From e6e27836666d64423f1731b3bf4e51bdd99eed3c Mon Sep 17 00:00:00 2001 From: wangxiaopeng <807933401@qq.com> Date: Tue, 30 Apr 2024 10:23:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=B2=9C=E4=B8=B0=E9=97=A8=E5=BA=97=E4=B8=8B?= =?UTF-8?q?=E5=9F=B9=E8=AE=AD=E4=BA=BA=E5=91=98=E6=8B=89=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/enums/RocketMqGroupEnum.java | 1 + .../com/cool/store/enums/RocketMqTagEnum.java | 1 + .../java/com/cool/store/dao/ShopInfoDAO.java | 8 + .../ehr/SyncXfsgTrainingPersonInfoDTO.java | 37 +++++ .../store/mq/consumer/ConsumerClient.java | 19 +++ .../XfsgTrainingPersonSyncListener.java | 152 ++++++++++++++++++ 6 files changed, 218 insertions(+) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java create mode 100644 coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java index ca1849ed2..ca49af01b 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/RocketMqGroupEnum.java @@ -31,6 +31,7 @@ public enum RocketMqGroupEnum { * 事件消息监听 */ FEI_SHU_EVENT_LISTENER("fei_shu_event_listener", new ArrayList<>(Arrays.asList(RocketMqTagEnum.USER_EVENT, RocketMqTagEnum.AUTH_SCOPE_CHANGE, RocketMqTagEnum.DEPT_EVENT))), + SYNC_TRAINING_PERSON("sync_training_person", new ArrayList<>(Arrays.asList(RocketMqTagEnum.SYNC_TRAINING_PERSON))), ; 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..8014a6138 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", "微应用钉钉消息发送"), + SYNC_TRAINING_PERSON("sync_training_person", "建店完成后拉取培训人员"), ; 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 ed6979ca7..29eaac83e 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 @@ -16,6 +16,7 @@ import com.github.pagehelper.PageHelper; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -161,4 +162,11 @@ public class ShopInfoDAO { public Long getRegionIdByid(Long shopId){ return shopInfoMapper.getRegionIdByid(shopId); } + + public ShopInfoDO selectByStoreNum(String storeNum){ + if (StringUtils.isBlank(storeNum)) { + return null; + } + return shopInfoMapper.selectByStoreNum(storeNum); + } } diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java new file mode 100644 index 000000000..e76c9a464 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/ehr/SyncXfsgTrainingPersonInfoDTO.java @@ -0,0 +1,37 @@ +package com.cool.store.dto.ehr; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 鲜丰门店下培训人员拉取 + * @author chenyupeng + * @since 2021/8/17 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class SyncXfsgTrainingPersonInfoDTO { + + /** + * 企业id + */ + private String enterpriseId; + /** + * 工号 + */ + private String jobnumber; + /** + * 身份证号码 + */ + private String idCard; + /** + * 门店编号 + */ + private String storeNum; + + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java index ad8e55b85..7bfffd031 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/ConsumerClient.java @@ -8,6 +8,7 @@ import com.aliyun.openservices.ons.api.bean.Subscription; import com.cool.store.constants.CommonConstants; import com.cool.store.enums.RocketMqGroupEnum; import com.cool.store.mq.RocketMqConfig; +import com.cool.store.mq.consumer.listener.XfsgTrainingPersonSyncListener; import com.google.common.collect.Maps; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,6 +30,8 @@ public class ConsumerClient { private RocketMqConfig rocketMqConfig; // @Resource // private FeiShuEventListener feiShuEventListener; + @Resource + private XfsgTrainingPersonSyncListener xfsgTrainingPersonSyncListener; /** * 获取通用配置 @@ -81,4 +84,20 @@ public class ConsumerClient { // return consumerBean; // } + /** + * 鲜丰门店下培训人员拉取 + */ + @Bean(initMethod = "start", destroyMethod = "shutdown") + public ConsumerBean xfsgTrainingPersonSyncQueueBean() { + RocketMqGroupEnum groupEnum = RocketMqGroupEnum.SYNC_TRAINING_PERSON; + ConsumerBean consumerBean = new ConsumerBean(); + //配置文件 + Properties properties = getCommonProperties(groupEnum); + consumerBean.setProperties(properties); + Map commonSubscriptionTable = getCommonSubscriptionTable(groupEnum, xfsgTrainingPersonSyncListener); + //订阅多个topic如上面设置 + consumerBean.setSubscriptionTable(commonSubscriptionTable); + return consumerBean; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java new file mode 100644 index 000000000..fe1353fe2 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/mq/consumer/listener/XfsgTrainingPersonSyncListener.java @@ -0,0 +1,152 @@ +package com.cool.store.mq.consumer.listener; + +import com.alibaba.fastjson.JSONObject; +import com.aliyun.openservices.ons.api.Action; +import com.aliyun.openservices.ons.api.ConsumeContext; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.MessageListener; +import com.cool.store.constants.CommonConstants; +import com.cool.store.dao.ShopInfoDAO; +import com.cool.store.dao.TempUserDetailDAO; +import com.cool.store.dto.ehr.StaffBaseInfoDTO; +import com.cool.store.dto.ehr.SyncXfsgTrainingPersonInfoDTO; +import com.cool.store.entity.ShopInfoDO; +import com.cool.store.entity.TempUserDetailDO; +import com.cool.store.enums.UserRoleEnum; +import com.cool.store.service.XfsgEhrService; +import com.cool.store.utils.RedisUtilPool; +import com.cool.store.utils.poi.DateUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; + +/** + * 鲜丰门店下培训人员拉取 + * @author wxp + * @since 2024/4/29 + */ +@Slf4j +@Service +public class XfsgTrainingPersonSyncListener implements MessageListener { + + @Resource + public XfsgEhrService xfsgEhrService; + + @Resource + private ShopInfoDAO shopInfoDAO; + + @Resource + private TempUserDetailDAO tempUserDetailDAO; + + @Autowired + public RedisUtilPool redisUtilPool; + + @Override + public Action consume(Message message, ConsumeContext context) { + String text = new String(message.getBody()); + if(StringUtils.isBlank(text)){ + log.info("消息体为空,tag:{},messageId:{}",message.getTag(),message.getMsgID()); + return Action.CommitMessage; + } + String lockKey = "XfsgTrainingPersonSyncListener:" + message.getMsgID(); + boolean lock = redisUtilPool.setNxExpire(lockKey, message.getMsgID(), CommonConstants.NORMAL_LOCK_TIMES); + if(lock){ + try { + syncXfsgTrainingPerson(text); + }catch (Exception e){ + log.error("XfsgTrainingPersonSyncListener consume error",e); + return Action.ReconsumeLater; + }finally { + redisUtilPool.delKey(lockKey); + } + log.info("消费成功,tag:{},messageId:{},reqBody={}",message.getTag(),message.getMsgID(),text); + return Action.CommitMessage; + } + return Action.ReconsumeLater; + } + + public void syncXfsgTrainingPerson(String text) { + log.info("syncXfsgTrainingPerson, reqBody={}", text); + SyncXfsgTrainingPersonInfoDTO request = JSONObject.parseObject(text, SyncXfsgTrainingPersonInfoDTO.class); + if(StringUtils.isAnyBlank(request.getStoreNum(), request.getJobnumber(), request.getIdCard())){ + log.info("syncXfsgTrainingPerson参数缺失={}", text); + return; + } + // 系统建店完成一定有门店编码??? + ShopInfoDO shopInfoDO = shopInfoDAO.selectByStoreNum(request.getStoreNum()); + if(shopInfoDO == null){ + log.info("门店编码对应的店铺信息不存在storeNum:{}", request.getStoreNum()); + return; + } + TempUserDetailDO checkTempUserDetailDO = tempUserDetailDAO.selectByIdCard(request.getIdCard()); + // 系统已建店,并且身份证号信息不存在 + if(checkTempUserDetailDO != null){ + log.info("培训人员身份证信息已存在idCard:{}", checkTempUserDetailDO.getIdCard()); + return; + } + StaffBaseInfoDTO staffBaseInfoDTO = xfsgEhrService.getUserInfoByCode(request.getJobnumber()); + log.info("培训人员主数据信息:staffBaseInfoDTO:{}", JSONObject.toJSONString(staffBaseInfoDTO)); + if(staffBaseInfoDTO != null){ + TempUserDetailDO tempUserDetailDO = new TempUserDetailDO(); + tempUserDetailDO.setLineId(shopInfoDO.getLineId()); + tempUserDetailDO.setShopId(shopInfoDO.getId()); + tempUserDetailDO.setRegionId(shopInfoDO.getRegionId()); + tempUserDetailDO.setMobile(staffBaseInfoDTO.getPhone()); + tempUserDetailDO.setUsername(staffBaseInfoDTO.getName()); + tempUserDetailDO.setSex(staffBaseInfoDTO.getSex()); + if(StringUtils.isNotBlank(staffBaseInfoDTO.getAge())){ + tempUserDetailDO.setAge(Integer.valueOf(staffBaseInfoDTO.getAge())); + } + tempUserDetailDO.setIdCard(staffBaseInfoDTO.getIdCard()); + tempUserDetailDO.setStatus(1); + tempUserDetailDO.setEducational(fillEducational(staffBaseInfoDTO.getHighestDegree())); + tempUserDetailDO.setRoleId(fillRoleId(staffBaseInfoDTO.getJobName())); + tempUserDetailDO.setIdCardNegativeUrl(staffBaseInfoDTO.getEmblemPhoto()); + tempUserDetailDO.setIdCardPositiveUrl(staffBaseInfoDTO.getIdNumPhoto()); + tempUserDetailDO.setHealthCertificateUrl(staffBaseInfoDTO.getHealthCertificate()); + tempUserDetailDO.setRegisterTime(new Date()); + if(StringUtils.isNotBlank(staffBaseInfoDTO.getEntryDate())){ + tempUserDetailDO.setRegisterTime(DateUtils.parseDate(staffBaseInfoDTO.getEntryDate())); + } + tempUserDetailDO.setSubmitTime(new Date()); + tempUserDetailDO.setSource("sync"); + tempUserDetailDAO.insertSelective(tempUserDetailDO); + } + } + + // 学历 0-小学 1-初中 2-高中 3-中专 4-大专 5-本科 6-硕士 7-硕士以上 + private Integer fillEducational(String highestDegree) { + if("小学".equals(highestDegree)){ + return 0; + }else if("初中".equals(highestDegree)){ + return 1; + }else if("高中".equals(highestDegree)){ + return 2; + }else if("中专".equals(highestDegree)){ + return 3; + }else if("大专".equals(highestDegree)){ + return 4; + }else if("本科".equals(highestDegree)){ + return 5; + }else if("硕士".equals(highestDegree)){ + return 6; + }else if("硕士以上".equals(highestDegree)){ + return 7; + } + return null; + } + + private Long fillRoleId(String jobName) { + if(UserRoleEnum.XFSG_CLERK.getDesc().equals(jobName)){ + return UserRoleEnum.XFSG_CLERK.getCode(); + }else if(UserRoleEnum.XFSG_SHOPOWNER.getDesc().equals(jobName)){ + return UserRoleEnum.XFSG_SHOPOWNER.getCode(); + } + return null; + } + +}