From ea21c2f2c33600f220a1f9fe3a97e08424c532cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E7=A3=8A?= <45566618@qq.com> Date: Thu, 31 Oct 2024 10:39:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=9B=E5=AE=89=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BC=98=E5=8C=96-2=E3=80=813=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=A2=9E=E5=8A=A0=E6=8E=A8=E8=8D=90=EF=BC=9B=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=9C=88=E5=A2=9E=E5=8A=A0=E5=AE=A1=E6=89=B9=EF=BC=9B?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=BE=AE=E4=BF=A1=E8=AF=81=E4=B9=A6=EF=BC=9B?= =?UTF-8?q?=E6=8A=80=E5=B8=88=E9=97=B2=E6=97=B6=E8=AE=BE=E7=BD=AE=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/artificer/entity/MassageType.java | 5 + .../impl/ArtificerTimeServiceImpl.java | 18 +-- .../controller/MassagePackageController.java | 7 ++ .../bl/massage/dao/MassagePackageDao.java | 1 + .../bl/massage/entity/MassagePackage.java | 5 + .../service/MassagePackageService.java | 1 + .../impl/MassagePackageServiceImpl.java | 4 + .../pay/service/impl/WxServiceImpl.java | 1 + .../content/BlShipinquanController.java | 19 ++-- .../content/app/AppShipinquanController.java | 3 +- .../shipinquan/dao/BlShipinquanDao.java | 1 + .../shipinquan/entity/BlShipinquan.java | 14 ++- .../service/BlShipinquanService.java | 1 + .../service/impl/BlShipinquanServiceImpl.java | 13 +++ .../task/service/impl/AllTaskServiceImpl.java | 105 ++++++++++++++++-- .../com/sqx/modules/utils/WXConfigUtil.java | 28 ----- .../mapper/bl/massage/MassagePackageDao.xml | 10 ++ .../mapper/shipinquan/ShipinquanDao.xml | 17 +++ src/main/resources/weixin/apiclient_cert.p12 | Bin 4918 -> 2774 bytes 19 files changed, 189 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/sqx/modules/artificer/entity/MassageType.java b/src/main/java/com/sqx/modules/artificer/entity/MassageType.java index 977b123..e974650 100644 --- a/src/main/java/com/sqx/modules/artificer/entity/MassageType.java +++ b/src/main/java/com/sqx/modules/artificer/entity/MassageType.java @@ -125,6 +125,11 @@ public class MassageType implements Serializable { private Integer qyMinNum;//企业预约最小次数 + /** + * 是否推荐0否1是 + */ + private Integer isTj; + @TableField(exist = false) private String ids; diff --git a/src/main/java/com/sqx/modules/artificer/service/impl/ArtificerTimeServiceImpl.java b/src/main/java/com/sqx/modules/artificer/service/impl/ArtificerTimeServiceImpl.java index 2a67a9d..d7c30e4 100644 --- a/src/main/java/com/sqx/modules/artificer/service/impl/ArtificerTimeServiceImpl.java +++ b/src/main/java/com/sqx/modules/artificer/service/impl/ArtificerTimeServiceImpl.java @@ -71,17 +71,13 @@ public class ArtificerTimeServiceImpl extends ServiceImpl() - .eq("artificer_id", artificerId) - .eq("artificer_date", artificerDate)); + .eq("artificer_id", artificerId)); if(ati!=null){ map.put("startTime", ati.getStartTime()); map.put("endTime", ati.getEndTime()); }else{ - map.put("startTime", artificerDate+" 00:00:00"); - Date endDate = DateUtils.stringToDate(artificerDate,DateUtils.DATE_PATTERN); - endDate = DateUtils.addDateDays(endDate,1); - String endDateStr = DateUtils.format(endDate,DateUtils.DATE_PATTERN); - map.put("endTime", endDateStr+" 00:00:00"); + map.put("startTime", "00:00:00"); + map.put("endTime", "23:30:00"); } List artificerTimes = baseMapper.selectList(new QueryWrapper() .eq("artificer_id", artificerId) @@ -134,14 +130,12 @@ public class ArtificerTimeServiceImpl extends ServiceImpl(); qwi.eq("artificer_id", artificer.getArtificerId()); - qwi.eq("artificer_date", startDay); artificerTimeIdelDao.delete(qwi); ArtificerTimeIdel ati = new ArtificerTimeIdel(); ati.setArtificerId(artificer.getArtificerId()); - ati.setArtificerDate(startDay); - ati.setStartTime(idelTimes[0]); - ati.setEndTime(idelTimes[1]); + ati.setStartTime(startTime); + ati.setEndTime(endTime); ati.setCreateTime(DateUtils.format(new Date())); artificerTimeIdelDao.insert(ati); @@ -189,7 +183,7 @@ public class ArtificerTimeServiceImpl extends ServiceImpl { int updateCoupon(MassagePackage massagePackage); int updateVip(MassagePackage massagePackage); int updateNewer(MassagePackage massagePackage); + int updateTj(MassagePackage massagePackage); int updateStatus(MassagePackage massagePackage); int updatePrice(MassagePackage massagePackage); int delete(MassagePackage massagePackage); diff --git a/src/main/java/com/sqx/modules/bl/massage/entity/MassagePackage.java b/src/main/java/com/sqx/modules/bl/massage/entity/MassagePackage.java index 876a01b..c63641b 100644 --- a/src/main/java/com/sqx/modules/bl/massage/entity/MassagePackage.java +++ b/src/main/java/com/sqx/modules/bl/massage/entity/MassagePackage.java @@ -161,6 +161,11 @@ public class MassagePackage implements Serializable { */ private Integer isNewer; + /** + * 是否推荐0否1是 + */ + private Integer isTj; + /** * 服务次数 */ diff --git a/src/main/java/com/sqx/modules/bl/massage/service/MassagePackageService.java b/src/main/java/com/sqx/modules/bl/massage/service/MassagePackageService.java index 22dd7f3..c4cedfc 100644 --- a/src/main/java/com/sqx/modules/bl/massage/service/MassagePackageService.java +++ b/src/main/java/com/sqx/modules/bl/massage/service/MassagePackageService.java @@ -12,6 +12,7 @@ public interface MassagePackageService extends IService { int updateCoupon(MassagePackage massagePackage); int updateVip(MassagePackage massagePackage); int updateNewer(MassagePackage massagePackage); + int updateTj(MassagePackage massagePackage); int updateStatus(MassagePackage massagePackage); int updatePrice(MassagePackage massagePackage); int delete(MassagePackage massagePackage); diff --git a/src/main/java/com/sqx/modules/bl/massage/service/impl/MassagePackageServiceImpl.java b/src/main/java/com/sqx/modules/bl/massage/service/impl/MassagePackageServiceImpl.java index 764d0a3..d6aa078 100644 --- a/src/main/java/com/sqx/modules/bl/massage/service/impl/MassagePackageServiceImpl.java +++ b/src/main/java/com/sqx/modules/bl/massage/service/impl/MassagePackageServiceImpl.java @@ -81,6 +81,10 @@ public class MassagePackageServiceImpl extends ServiceImpl response = wxpay.refund(data); diff --git a/src/main/java/com/sqx/modules/shipinquan/content/BlShipinquanController.java b/src/main/java/com/sqx/modules/shipinquan/content/BlShipinquanController.java index 2223a1c..2b32c8c 100644 --- a/src/main/java/com/sqx/modules/shipinquan/content/BlShipinquanController.java +++ b/src/main/java/com/sqx/modules/shipinquan/content/BlShipinquanController.java @@ -1,22 +1,16 @@ package com.sqx.modules.shipinquan.content; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.sqx.common.utils.Result; import com.sqx.modules.shipinquan.entity.BlShipinquan; import com.sqx.modules.shipinquan.service.BlShipinquanService; -import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; - import java.util.Date; - @RestController @RequestMapping("/bl/shipinquan") public class BlShipinquanController { @@ -28,10 +22,7 @@ public class BlShipinquanController { @GetMapping("/list") @ApiOperation("获取数据列表") public Result list(BlShipinquan entity, Integer page, Integer limit){ - QueryWrapper qw = new QueryWrapper<>(); - qw.orderByDesc("create_time"); - IPage pageList = service.page(new Page<>(page,limit),qw); - return Result.success().put("data",pageList); + return service.findPage(page,limit,entity); } @PostMapping("/add") @@ -57,4 +48,12 @@ public class BlShipinquanController { return Result.success(); } + @PostMapping("/approve") + @ApiOperation("审批") + public Result approve(BlShipinquan BlShipinquan){ + service.approve(BlShipinquan); + return Result.success(); + } + + } diff --git a/src/main/java/com/sqx/modules/shipinquan/content/app/AppShipinquanController.java b/src/main/java/com/sqx/modules/shipinquan/content/app/AppShipinquanController.java index f9ac5b8..db0dc7b 100644 --- a/src/main/java/com/sqx/modules/shipinquan/content/app/AppShipinquanController.java +++ b/src/main/java/com/sqx/modules/shipinquan/content/app/AppShipinquanController.java @@ -38,7 +38,7 @@ public class AppShipinquanController { @GetMapping("/list") @ApiOperation("获取视频数据列表") - public Result list(Integer page, Integer limit, Long createBy,String userId,String gzrId,String longitude,String latitude){ + public Result list(Integer page, Integer limit, Long createBy,String userId,String gzrId,String longitude,String latitude,String status){ if(page==null){ page=1; limit=10; @@ -49,6 +49,7 @@ public class AppShipinquanController { entity.setLongitude(longitude); entity.setLatitude(latitude); entity.setGzrId(gzrId); + entity.setStatus(status); return service.findPage(page,limit,entity); } diff --git a/src/main/java/com/sqx/modules/shipinquan/dao/BlShipinquanDao.java b/src/main/java/com/sqx/modules/shipinquan/dao/BlShipinquanDao.java index 1bf7b3f..7c47212 100644 --- a/src/main/java/com/sqx/modules/shipinquan/dao/BlShipinquanDao.java +++ b/src/main/java/com/sqx/modules/shipinquan/dao/BlShipinquanDao.java @@ -11,4 +11,5 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface BlShipinquanDao extends BaseMapper { IPage findPage(Page page, @Param("params") BlShipinquan entity); + int approve(BlShipinquan entity); } \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/shipinquan/entity/BlShipinquan.java b/src/main/java/com/sqx/modules/shipinquan/entity/BlShipinquan.java index a2efd42..8142dbc 100644 --- a/src/main/java/com/sqx/modules/shipinquan/entity/BlShipinquan.java +++ b/src/main/java/com/sqx/modules/shipinquan/entity/BlShipinquan.java @@ -19,8 +19,8 @@ public class BlShipinquan implements Serializable { @TableId(type = IdType.AUTO) private Long id; - @DateTimeFormat(pattern = "yyyy-MM-dd") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime;//创建实践 private Long createBy;//创建人 private String content;//发布内容 @@ -29,6 +29,16 @@ public class BlShipinquan implements Serializable { private int dzs;//点赞数 private int pls;//评论数 private int type;//类型(0视频,1图片目前都是视频,预留) + private String status;//审批,0待审批 1通过 2拒绝 + private String opinion;//审批意见 + /** + *审批时间 + */ + private String approveTime; + /** + *审批人 + */ + private Long approveUser; @TableField(exist = false) private String artificerImg; diff --git a/src/main/java/com/sqx/modules/shipinquan/service/BlShipinquanService.java b/src/main/java/com/sqx/modules/shipinquan/service/BlShipinquanService.java index d66e38d..baf5a12 100644 --- a/src/main/java/com/sqx/modules/shipinquan/service/BlShipinquanService.java +++ b/src/main/java/com/sqx/modules/shipinquan/service/BlShipinquanService.java @@ -6,4 +6,5 @@ import com.sqx.modules.shipinquan.entity.BlShipinquan; public interface BlShipinquanService extends IService { Result findPage(Integer page, Integer limit, BlShipinquan entity); + int approve(BlShipinquan entity); } \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/shipinquan/service/impl/BlShipinquanServiceImpl.java b/src/main/java/com/sqx/modules/shipinquan/service/impl/BlShipinquanServiceImpl.java index eefb06b..5d502e7 100644 --- a/src/main/java/com/sqx/modules/shipinquan/service/impl/BlShipinquanServiceImpl.java +++ b/src/main/java/com/sqx/modules/shipinquan/service/impl/BlShipinquanServiceImpl.java @@ -7,8 +7,13 @@ import com.sqx.common.utils.Result; import com.sqx.modules.shipinquan.dao.BlShipinquanDao; import com.sqx.modules.shipinquan.entity.BlShipinquan; import com.sqx.modules.shipinquan.service.BlShipinquanService; +import com.sqx.modules.sys.entity.SysUserEntity; +import org.apache.shiro.SecurityUtils; import org.springframework.stereotype.Service; +import java.text.SimpleDateFormat; +import java.util.Date; + @Service public class BlShipinquanServiceImpl extends ServiceImpl implements BlShipinquanService { @Override @@ -16,4 +21,12 @@ public class BlShipinquanServiceImpl extends ServiceImpl pages=new Page<>(page,limit); return Result.success().put("data",new PageUtils(baseMapper.findPage(pages,entity))); } + + @Override + public int approve(BlShipinquan entity){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + entity.setApproveTime(sdf.format(new Date())); + entity.setApproveUser(((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUserId()); + return baseMapper.approve(entity); + } } \ No newline at end of file diff --git a/src/main/java/com/sqx/modules/task/service/impl/AllTaskServiceImpl.java b/src/main/java/com/sqx/modules/task/service/impl/AllTaskServiceImpl.java index 21ce353..d13e6c2 100644 --- a/src/main/java/com/sqx/modules/task/service/impl/AllTaskServiceImpl.java +++ b/src/main/java/com/sqx/modules/task/service/impl/AllTaskServiceImpl.java @@ -6,13 +6,8 @@ import com.sqx.modules.app.entity.UserMoney; import com.sqx.modules.app.entity.UserSadDetails; import com.sqx.modules.app.service.UserMoneyService; import com.sqx.modules.app.service.UserSadDetailsService; -import com.sqx.modules.artificer.dao.ArtificerDao; -import com.sqx.modules.artificer.dao.BlArtificerZqhzDao; -import com.sqx.modules.artificer.dao.OrdersDao; -import com.sqx.modules.artificer.dao.UserRechargeDao; -import com.sqx.modules.artificer.entity.Artificer; -import com.sqx.modules.artificer.entity.BlArtificerZqhz; -import com.sqx.modules.artificer.entity.UserRecharge; +import com.sqx.modules.artificer.dao.*; +import com.sqx.modules.artificer.entity.*; import com.sqx.modules.bl.artificer.dao.ArtificerIntegralStatisticsDao; import com.sqx.modules.bl.artificer.dao.ArtificerPartitioningDetailsDao; import com.sqx.modules.bl.artificer.entity.ArtificerIntegralStatistics; @@ -32,10 +27,8 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Service public class AllTaskServiceImpl implements AllTaskSercice { @@ -70,6 +63,10 @@ public class AllTaskServiceImpl implements AllTaskSercice { private UserMoneyService userMoneyService; @Autowired private ArtificerIntegralStatisticsDao artificerIntegralStatisticsDao; + @Autowired + private ArtificerTimeDao artificerTimeDao; + @Autowired + private ArtificerTimeIdelDao artificerTimeIdelDao; /** * 计算技师升级规则 每天半夜1点执行,预留12点到01点之间的计算间隔,用于触发其他计算逻辑 @@ -406,4 +403,90 @@ public class AllTaskServiceImpl implements AllTaskSercice { blSadJobService.updateById(par); } } + + //技师每天闲时配置 + @Scheduled(cron = "10 00 0 * * ?") + public void setArtificerTime() { + String curDate = DateUtils.format(new Date(),DateUtils.DATE_PATTERN); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.apply("id in ( select max(id) from artificer_time_idel b group by artificer_id )"); + List artificerTimeIdelList = artificerTimeIdelDao.selectList(queryWrapper); + for(int i=0;i dateMap = getIdelMap(curDate+" "+startTime,curDate+" "+endTime); + Map busyMap = getBusyMap(dateMap); + for (String key : busyMap.keySet()) { + List busyTimeList = busyMap.get(key); + for(String time : busyTimeList){ + Integer counts = artificerTimeDao.selectCount(new QueryWrapper().eq("artificer_date", key).eq("artificer_id", artificerId).eq("artificer_time", time)); + if(counts==0){ + ArtificerTime artificerTime=new ArtificerTime(); + artificerTime.setArtificerDate(key); + artificerTime.setArtificerTime(time); + artificerTime.setArtificerId(artificerId); + artificerTime.setClassify(2); + artificerTime.setCreateTime(DateUtils.format(new Date())); + artificerTimeDao.insert(artificerTime); + } + } + } + } + } + + private Map getIdelMap(String startDateStr, String endDateStr){ + Map map = new HashMap(); + Date startDate = DateUtils.stringToDate(startDateStr,"yyyy-MM-dd HH:mm"); + Date endDate = DateUtils.stringToDate(endDateStr,"yyyy-MM-dd HH:mm"); + Date current = startDate; + while(current.getTime()<=endDate.getTime()){ + String day = DateUtils.format(current,"yyyy-MM-dd"); + String time = DateUtils.format(current,"HH:mm"); + if(map.get(day)!=null){ + List timeList = map.get(day); + timeList.add(time); + }else{ + List timeList = new ArrayList<>(); + timeList.add(time); + map.put(day,timeList); + } + current = DateUtils.addDateMinutes(current,30); + } + return map; + } + + private Map getBusyMap(Map dateMap){ + Map map = new HashMap(); + for (String key : dateMap.keySet()) { + List timeList = dateMap.get(key); + Map allTimes = getTimeMap(); + for(int i=0; i < timeList.size();i++){ + String time = timeList.get(i); + if(allTimes.get(time)!=null){ + allTimes.remove(time); + } + } + List keyList = allTimes.keySet().stream().collect(Collectors.toList()); + Collections.sort(keyList); + map.put(key,keyList); + } + return map; + } + + private Map getTimeMap(){ + Map map = new HashMap(); + for(int i=0;i<24;i++){ + String s = ""; + if(i<10){ + s = "0"+i+":"; + }else{ + s = i+":"; + } + map.put(s+"00",s+"00"); + map.put(s+"30",s+"30"); + } + return map; + } } diff --git a/src/main/java/com/sqx/modules/utils/WXConfigUtil.java b/src/main/java/com/sqx/modules/utils/WXConfigUtil.java index 497d1ee..df3aa1e 100644 --- a/src/main/java/com/sqx/modules/utils/WXConfigUtil.java +++ b/src/main/java/com/sqx/modules/utils/WXConfigUtil.java @@ -18,61 +18,33 @@ public class WXConfigUtil implements WXPayConfig { private String appId = ""; private String key = ""; private String mchId = ""; - - //初始化加载证书 public WXConfigUtil() throws Exception { - /*int byteread = 0; - int bytesum = 0; - URL url = new URL("windine.blogdriver.com/logo.gif"); - *//*String certPath = ClassUtils.getDefaultClassLoader().getResource("").getPath()+"/weixin/apiclient_cert.p12";//从微信商户平台下载的安全证书存放的路径*//* - URLConnection conn = url.openConnection(); - InputStream inStream = conn.getInputStream(); - FileOutputStream fs = new FileOutputStream(" /www/wwwroot/"+profileHttpUrl+"/file/uploadPath"); - byte[] buffer = new byte[1204]; - int length; - while ((byteread = inStream.read(buffer)) != -1) { - bytesum += byteread; - fs.write(buffer, 0, byteread); - }*/ ClassPathResource classPathResource = new ClassPathResource("weixin/apiclient_cert.p12"); InputStream certStream = classPathResource.getInputStream(); this.certData = IOUtils.toByteArray(certStream); certStream.read(this.certData); certStream.close(); -// File file = new File(" "); - /*InputStream certStream = new FileInputStream(file); - this.certData = new byte[(int) file.length()]; - certStream.read(this.certData); - certStream.close();*/ } - - @Override public String getAppID() { return this.appId; } - @Override public String getMchID() { return this.mchId; } - @Override public InputStream getCertStream() { ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData); return certBis; } - @Override public int getHttpConnectTimeoutMs() { return 8000; } - @Override public int getHttpReadTimeoutMs() { return 10000; } - - } diff --git a/src/main/resources/mapper/bl/massage/MassagePackageDao.xml b/src/main/resources/mapper/bl/massage/MassagePackageDao.xml index 460c895..50a444a 100644 --- a/src/main/resources/mapper/bl/massage/MassagePackageDao.xml +++ b/src/main/resources/mapper/bl/massage/MassagePackageDao.xml @@ -53,6 +53,10 @@ update bl_massage_package set is_newer=#{isNewer} where id=#{id} + + update bl_massage_package set is_tj=#{isTj} where id=#{id} + + update bl_massage_package set status=#{status} where id=#{id} @@ -90,6 +94,9 @@ and a.type = #{params.type} + + and a.is_tj = #{params.isTj} + union all select massage_type_id as id,title,classify_id as type,b.value as type_name,old_price,price,massage_img,jianjie,content_img,add_num,sales,labels,'项目' as flag,1 as is_can_coupon,1 as is_can_vip, 1 as service_count, 0 as level @@ -109,6 +116,9 @@ and a.massage_type_id = 0 + + and a.is_tj = #{params.isTj} + order by sales desc,id asc diff --git a/src/main/resources/mapper/shipinquan/ShipinquanDao.xml b/src/main/resources/mapper/shipinquan/ShipinquanDao.xml index 821adbf..1d4ba6a 100644 --- a/src/main/resources/mapper/shipinquan/ShipinquanDao.xml +++ b/src/main/resources/mapper/shipinquan/ShipinquanDao.xml @@ -30,6 +30,8 @@ a.pls, a.type, a.pic_path, + a.status, + a.opinion, b.artificer_id as create_by, b.artificer_name as artificer_name, b.artificer_img AS artificerImg, @@ -43,6 +45,12 @@ and a.create_by = #{params.createBy} + + and a.status = #{params.status} + + + and b.artificer_name like concat('%',#{params.artificerName},'%') + order by (st_distance (point (b.longitude, b.latitude),point(#{params.longitude},#{params.longitude}) ) *111195) asc,a.create_time desc @@ -52,4 +60,13 @@ + + update bl_shipinquan + set status=#{status}, + opinion=#{opinion}, + approve_time=#{approveTime}, + approve_user=#{approveUser} + where id=#{id} + + \ No newline at end of file diff --git a/src/main/resources/weixin/apiclient_cert.p12 b/src/main/resources/weixin/apiclient_cert.p12 index eaeb5db238272a7052a608c443c395d1e749814e..38131cef7727ec96dfbefa99782f67cbe79ad1b0 100644 GIT binary patch delta 2745 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 literal 4918 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