From 67c6a72163537a53743c75c923871a941cffe483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E7=AB=B9=E7=BA=A2?= Date: Fri, 20 Dec 2024 16:22:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AF=81=E7=85=A7=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/ExpiryTypeEnum.java | 29 +++++ .../com/cool/store/enums/RocketMqTagEnum.java | 1 + .../java/com/cool/store/dao/ShopInfoDAO.java | 10 ++ .../cool/store/mapper/ApplyLicenseMapper.java | 9 ++ .../com/cool/store/mapper/ShopInfoMapper.java | 4 + .../resources/mapper/ApplyLicenseMapper.xml | 19 +++ .../main/resources/mapper/ShopInfoMapper.xml | 14 +++ .../java/com/cool/store/dto/LicenseDTO.java | 21 ++++ .../com/cool/store/dto/LicenseSyncDTO.java | 20 ++++ .../cool/store/dto/LicenseSyncInfoDTO.java | 25 ++++ .../cool/store/entity/LicenseTransactDO.java | 2 + .../service/impl/ApplyLicenseServiceImpl.java | 6 + .../controller/webb/PCTestController.java | 9 ++ .../com/cool/store/job/XxlJobHandler.java | 110 +++++++++++++++++- 14 files changed, 277 insertions(+), 2 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/enums/ExpiryTypeEnum.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncDTO.java create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncInfoDTO.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ExpiryTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExpiryTypeEnum.java new file mode 100644 index 000000000..bd4a8ffe8 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExpiryTypeEnum.java @@ -0,0 +1,29 @@ +package com.cool.store.enums; + +/** + * @Author suzhuhong + * @Date 2024/12/20 14:13 + * @Version 1.0 + */ +public enum ExpiryTypeEnum { + + LONG("long","长期"), + TEMP("temp","临时"),; + + + + private String expiryType; + private String desc; + private ExpiryTypeEnum(String expiryType, String desc) { + this.expiryType = expiryType; + this.desc = desc; + } + public String getExpiryType() { + return expiryType; + } + public String getDesc() { + return desc; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java index a0bad07e3..a9f9c0fa5 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqTagEnum.java @@ -15,6 +15,7 @@ public enum RocketMqTagEnum { USER_EVENT("user_event","钉钉通讯录变更事件"), DEPT_EVENT("dept_event","部门事件"), STORE_DING_QUEUE("store_ding_queue", "微应用钉钉消息发送"), + PARTNER_LICENSE_SYNC_QUEUE("partner_license_sync_queue", "招商证照信息同步"); ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java index 00e17dd73..b394da8d8 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/ShopInfoDAO.java @@ -1,6 +1,7 @@ package com.cool.store.dao; import com.cool.store.constants.CommonConstants; +import com.cool.store.dto.LicenseSyncDTO; import com.cool.store.dto.Preparation.PreparationDTO; import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; import com.cool.store.dto.point.LineCountDTO; @@ -172,4 +173,13 @@ public class ShopInfoDAO { } return shopInfoMapper.platformBuildList(regionIds, request); } + + public List getShopAndStoreList(String eid , List shopIds){ + if(CollectionUtils.isEmpty(shopIds)){ + return new ArrayList<>(); + } + return shopInfoMapper.getShopAndStoreList(eid,shopIds); + } + + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java index 0248f6680..6ed1faa0d 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ApplyLicenseMapper.java @@ -18,4 +18,13 @@ public interface ApplyLicenseMapper extends Mapper { void updateByShopId(@Param("entity") LicenseTransactDO licenseTransactDO); LicenseTransactDO selectByShopId(@Param("shopId") Long shopId); + + + /** + * queryNotSyncList + * @return + */ + List queryNotSyncList(); + + Boolean updateSyncFlagByIds(@Param("ids") List ids); } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java index 2a2b3e05e..9b6e68483 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/ShopInfoMapper.java @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.LicenseSyncDTO; import com.cool.store.dto.Preparation.PreparationDTO; import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; import com.cool.store.dto.point.LineCountDTO; @@ -94,4 +95,7 @@ public interface ShopInfoMapper extends Mapper { List selectByIdOrSelectAll(@Param("shopId") Long shopId); List platformBuildList(@Param("list") List regionIds,@Param("request") platformBuildListRequest request); + + + List getShopAndStoreList(@Param("enterpriseId") String eid , @Param("shopIds") List shopIds); } diff --git a/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml index 8b8af6353..30d9cbdb4 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ApplyLicenseMapper.xml @@ -95,4 +95,23 @@ where shop_id = #{shopId} and deleted = 0 + + + + + + update xfsg_license_transact + set sync_flag = 1 + where deleted = 0 + + + #{item} + + + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml index 1f65fa991..0cbdf0b9d 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/ShopInfoMapper.xml @@ -225,5 +225,19 @@ + + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseDTO.java new file mode 100644 index 000000000..b138da97e --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseDTO.java @@ -0,0 +1,21 @@ +package com.cool.store.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @Author suzhuhong + * @Date 2024/12/20 15:16 + * @Version 1.0 + */ +@Data +public class LicenseDTO { + + private String enterpriseId; + + + List requests; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncDTO.java new file mode 100644 index 000000000..5ec4d32d2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncDTO.java @@ -0,0 +1,20 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/12/20 10:52 + * @Version 1.0 + */ +@Data +public class LicenseSyncDTO { + + private Long shopId; + + private String shopCode; + + private String storeId; + + +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncInfoDTO.java new file mode 100644 index 000000000..a9723c0b2 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/LicenseSyncInfoDTO.java @@ -0,0 +1,25 @@ +package com.cool.store.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @Author suzhuhong + * @Date 2024/12/20 10:52 + * @Version 1.0 + */ +@Data +public class LicenseSyncInfoDTO { + + private String storeId; + + private Integer licenseType; + + private String picture; + + private String expiryType; + + private Long expiryBeginDate; + + private Long expiryEndDate; +} diff --git a/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java b/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java index 7ca955a12..a19d86e43 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/entity/LicenseTransactDO.java @@ -73,5 +73,7 @@ public class LicenseTransactDO { private Integer deleted; @Column(name = "two_certificates_one") private Integer twoCertificatesOne; + @Column(name = "sync_flag") + private Integer syncFlag; } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java index b882f0354..0c6b45b8f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/ApplyLicenseServiceImpl.java @@ -116,6 +116,9 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { if (licenseTransactDO.getId() == null) { applyLicenseMapper.insertSelective(licenseTransactDO); } else { + //如果更新了数据 同步标识置为0 + licenseTransactDO.setUpdateTime(new Date()); + licenseTransactDO.setSyncFlag(CommonConstants.ZERO); applyLicenseMapper.updateByPrimaryKey(licenseTransactDO); } ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_3); @@ -145,6 +148,9 @@ public class ApplyLicenseServiceImpl implements ApplyLicenseService { if (licenseTransactDO.getId() == null) { applyLicenseMapper.insertSelective(licenseTransactDO); } else { + //如果更新了数据 同步标识置为0 + licenseTransactDO.setUpdateTime(new Date()); + licenseTransactDO.setSyncFlag(CommonConstants.ZERO); applyLicenseMapper.updateByPrimaryKey(licenseTransactDO); } ShopStageInfoDO shopSubStageInfo = shopStageInfoDAO.getShopSubStageInfo(request.getShopId(), ShopSubStageEnum.SHOP_STAGE_4); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index a9284502b..878d5557f 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -5,6 +5,7 @@ import com.cool.store.dao.*; import com.cool.store.entity.*; import com.cool.store.enums.MessageEnum; import com.cool.store.enums.SMSMsgEnum; +import com.cool.store.job.XxlJobHandler; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.xfsgFirstOrderListRequest; import com.cool.store.response.ResponseResult; @@ -34,6 +35,8 @@ public class PCTestController { @Resource private LineInterviewDAO lineInterviewDAO; @Resource + private XxlJobHandler xxlJobHandler; + @Resource DataHandleService dataHandleService; static String url = "https://hzly.cloudcubic.net/ajaxHandle/synchronization/JCallBackSynchronizationHandler.ashx?action=app&controller=GetProjectDetails&projectid="; @@ -92,4 +95,10 @@ public class PCTestController { return ResponseResult.success(dataHandleService.dataHandleService(shopId)); } + + @GetMapping("/licenseSync") + public ResponseResult licenseSync(){ + xxlJobHandler.partnerSyncLicense(); + return ResponseResult.success(Boolean.TRUE); + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java index 1bc522c08..ba6711fea 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/job/XxlJobHandler.java @@ -4,17 +4,18 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; -import com.cool.store.dto.StaffExamInfoDTO; +import com.cool.store.dto.*; import com.cool.store.dto.decoration.ConstructionScheduleDTO; import com.cool.store.dto.openPreparation.OpenPlanShopInfoDTO; -import com.cool.store.dto.xfsgFirstOderDTO; import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.enums.point.ShopSubStageEnum; import com.cool.store.enums.point.ShopSubStageStatusEnum; import com.cool.store.exception.ServiceException; +import com.cool.store.mapper.ApplyLicenseMapper; import com.cool.store.mapper.LineInfoMapper; import com.cool.store.mapper.TrainingExperienceMapper; +import com.cool.store.mq.producer.SimpleMessageService; import com.cool.store.mq.util.HttpRestTemplateService; import com.cool.store.request.xfsgFirstOrderListRequest; import com.cool.store.response.xfsgFirstOderListResponse; @@ -53,6 +54,8 @@ import java.util.stream.Collectors; public class XxlJobHandler { + @Value("${mybatis.configuration.variables.enterpriseId}") + private String eid; @Resource TrainingExperienceMapper trainingExperienceMapper; @Value("${xfsg.url}") @@ -91,6 +94,10 @@ public class XxlJobHandler { private UserAuthMappingService userAuthMappingService; @Resource private OpenAcceptanceInfoDAO openAcceptanceInfoDAO; + @Resource + private SimpleMessageService simpleMessageService; + @Resource + ApplyLicenseMapper applyLicenseMapper; @@ -199,4 +206,103 @@ public class XxlJobHandler { XxlJobHelper.handleSuccess(); } + + @XxlJob("partnerSyncLicense") + public void partnerSyncLicense() { + log.info("------start sync license------"); + boolean hasNext = true; + int pageNum = 1; + int pageSize = 9; + List updateSyncList = new ArrayList<>(); + while (hasNext) { + PageHelper.startPage(pageNum, pageSize); + List licenseTransactDOS = applyLicenseMapper.queryNotSyncList(); + if (CollectionUtils.isEmpty(licenseTransactDOS)) { + log.info("------sync license is empty------"); + break; + } + List shopIds = licenseTransactDOS.stream().map(LicenseTransactDO::getShopId).collect(Collectors.toList()); + List infoDOS = shopInfoDAO.getShopAndStoreList(eid, shopIds); + if (CollectionUtils.isEmpty(infoDOS)) { + log.info("------sync store is empty------"); + } + Map transactDOMap = licenseTransactDOS.stream().collect(Collectors.toMap(LicenseTransactDO::getShopId, x -> x)); + List pushList = new ArrayList<>(); + infoDOS.forEach(x -> { + LicenseTransactDO licenseTransactDO = transactDOMap.get(x.getShopId()); + Integer currentStoreSyncCount = 0; + if (licenseTransactDO != null) { + // 同步营业执照 + if (StringUtils.isNotEmpty(licenseTransactDO.getCreditUrl())) { + pushList.add(createLicenseSyncInfoDTO(x.getStoreId(), CommonConstants.ONE, + licenseTransactDO.getCreditUrl(), licenseTransactDO.getIssueTime(), licenseTransactDO.getValidity())); + currentStoreSyncCount++; + } + + // 同步食品经营许可证 + if (StringUtils.isNotEmpty(licenseTransactDO.getFoodBusinessLicenseUrl())) { + pushList.add(createLicenseSyncInfoDTO(x.getStoreId(), CommonConstants.THREE, + licenseTransactDO.getFoodBusinessLicenseUrl(), licenseTransactDO.getFoodBusinessStartTime(), licenseTransactDO.getFoodBusinessEndTime())); + currentStoreSyncCount++; + } + + // 如果食品证为空且为二证合一,使用营业执照的图片 + if (StringUtils.isEmpty(licenseTransactDO.getFoodBusinessLicenseUrl()) && + Integer.valueOf(CommonConstants.ONE).equals(licenseTransactDO.getTwoCertificatesOne())) { + pushList.add(createLicenseSyncInfoDTO(x.getStoreId(), CommonConstants.THREE, + licenseTransactDO.getCreditUrl(), licenseTransactDO.getIssueTime(), licenseTransactDO.getValidity())); + currentStoreSyncCount++; + } + + // 发送消息 + if (!pushList.isEmpty()) { + LicenseDTO licenseDTO = new LicenseDTO(); + licenseDTO.setEnterpriseId(eid); + licenseDTO.setRequests(pushList); + log.info("licenseDTO:{}",JSONObject.toJSONString(licenseDTO)); + //simpleMessageService.send(JSONObject.toJSONString(licenseDTO), RocketMqTagEnum.PARTNER_LICENSE_SYNC_QUEUE); + } + if (currentStoreSyncCount == CommonConstants.TWO) { + updateSyncList.add(licenseTransactDO.getId()); + } + + } + }); + + hasNext = licenseTransactDOS.size() >= pageSize; + pageNum++; + } + log.info("licenseDTO:{}",JSONObject.toJSONString(updateSyncList)); + if (CollectionUtils.isNotEmpty(updateSyncList)) { + applyLicenseMapper.updateSyncFlagByIds(updateSyncList); + } + log.info("------sync complete-------"); + XxlJobHelper.handleSuccess(); + } + + + + private LicenseSyncInfoDTO createLicenseSyncInfoDTO(String storeId, Integer licenseType, String pictureUrl, + Date startTime, Date endTime) { + LicenseSyncInfoDTO licenseSyncInfoDTO = new LicenseSyncInfoDTO(); + licenseSyncInfoDTO.setStoreId(storeId); + licenseSyncInfoDTO.setLicenseType(licenseType); + licenseSyncInfoDTO.setPicture(pictureUrl); + licenseSyncInfoDTO.setExpiryType(ExpiryTypeEnum.TEMP.getExpiryType()); + licenseSyncInfoDTO.setExpiryBeginDate(startTime.getTime()); + + if (endTime != null) { + licenseSyncInfoDTO.setExpiryEndDate(endTime.getTime()); + } else { + // 如果没有有效期,则设置为长期有效 + licenseSyncInfoDTO.setExpiryType(ExpiryTypeEnum.LONG.getExpiryType()); + } + return licenseSyncInfoDTO; + } + + + + + + }