diff --git a/web-adapter/src/main/java/com/zcloud/fire/check/facade/ZcloudFireCheckFacadeImpl.java b/web-adapter/src/main/java/com/zcloud/fire/check/facade/ZcloudFireCheckFacadeImpl.java new file mode 100644 index 0000000..7342239 --- /dev/null +++ b/web-adapter/src/main/java/com/zcloud/fire/check/facade/ZcloudFireCheckFacadeImpl.java @@ -0,0 +1,207 @@ +package com.zcloud.fire.check.facade; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.SingleResponse; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jjb.saas.message.client.message.facede.MessageFacade; +import com.jjb.saas.message.client.message.request.MessageSendCmd; +import com.jjb.saas.message.client.message.request.MessageTargetCmd; +import com.zcloud.fire.check.domain.config.MessageConfig; +import com.zcloud.fire.check.persistence.dataobject.FireCheckListDO; +import com.zcloud.fire.check.persistence.dataobject.FireCheckListUserDO; +import com.zcloud.fire.check.persistence.dataobject.UserDO; +import com.zcloud.fire.check.persistence.mapper.FireCheckListMapper; +import com.zcloud.fire.check.persistence.mapper.FireCheckListUserMapper; +import com.zcloud.fire.check.persistence.repository.UserRepository; +import com.zcloud.gbscommon.utils.UuidUtil; +import com.zcloud.gbscommon.zloudfirecheck.facade.ZcloudFireCheckFacade; +import com.zcloud.gbscommon.zloudfirecheck.request.FireCheckQry; +import com.zcloud.gbscommon.zloudfirecheck.response.FireCheckListByUserCO; +import com.zcloud.gbscommon.zloudfirecheck.response.FireCheckWorkChangeCmd; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +@DubboService +@AllArgsConstructor +@Slf4j +public class ZcloudFireCheckFacadeImpl implements ZcloudFireCheckFacade { + @Resource + private final FireCheckListMapper fireCheckListMapper; + @Resource + private final FireCheckListUserMapper fireCheckListUserMapper; + @Resource + private final UserRepository userRepository; + @DubboReference + private MessageFacade messageFacade; + @Resource + private final MessageConfig messageConfig; + + @Override + public MultiResponse listManagerByUserId(FireCheckQry fireCheckQry) { + if (fireCheckQry == null || fireCheckQry.getUserId() == null || fireCheckQry.getCorpinfoId() == null) { + return MultiResponse.of(Collections.emptyList()); + } + QueryWrapper listUserQueryWrapper = new QueryWrapper<>(); + listUserQueryWrapper.eq("user_id", fireCheckQry.getUserId()); + listUserQueryWrapper.eq("corpinfo_id", fireCheckQry.getCorpinfoId()); + List fireCheckListUserDOList = fireCheckListUserMapper.selectList(listUserQueryWrapper); + if (CollUtil.isEmpty(fireCheckListUserDOList)) { + return MultiResponse.of(Collections.emptyList()); + } + Set fireCheckIdSet = fireCheckListUserDOList.stream() + .map(FireCheckListUserDO::getFireCheckId) + .filter(StringUtils::isNotEmpty) + .collect(Collectors.toSet()); + if (CollUtil.isEmpty(fireCheckIdSet)) { + return MultiResponse.of(Collections.emptyList()); + } + QueryWrapper listQueryWrapper = new QueryWrapper<>(); + listQueryWrapper.in("fire_check_id", fireCheckIdSet); + listQueryWrapper.eq("corpinfo_id", fireCheckQry.getCorpinfoId()); + List fireCheckListDOList = fireCheckListMapper.selectList(listQueryWrapper); + if (CollUtil.isEmpty(fireCheckListDOList)) { + return MultiResponse.of(Collections.emptyList()); + } + List result = fireCheckListDOList.stream() + .map(this::buildFireCheckListByUserCO) + .collect(Collectors.toList()); + return MultiResponse.of(result); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public SingleResponse updateRiskWorkChange(FireCheckWorkChangeCmd fireCheckWorkChangeCmd) { + if (fireCheckWorkChangeCmd == null + || StringUtils.isEmpty(fireCheckWorkChangeCmd.getFireCheckId()) + || fireCheckWorkChangeCmd.getOldUserId() == null + || fireCheckWorkChangeCmd.getUserId() == null) { + return SingleResponse.buildFailure("PARAM_ERROR", "交接参数不完整"); + } + QueryWrapper listUserQueryWrapper = new QueryWrapper<>(); + listUserQueryWrapper.eq("fire_check_id", fireCheckWorkChangeCmd.getFireCheckId()); + listUserQueryWrapper.eq("user_id", fireCheckWorkChangeCmd.getOldUserId()); + List fireCheckListUserDOList = fireCheckListUserMapper.selectList(listUserQueryWrapper); + if (CollUtil.isEmpty(fireCheckListUserDOList)) { + return SingleResponse.buildFailure("DATA_NOT_FOUND", "未查询到待交接的消防检查工作"); + } + QueryWrapper existsQueryWrapper = new QueryWrapper<>(); + existsQueryWrapper.eq("fire_check_id", fireCheckWorkChangeCmd.getFireCheckId()); + existsQueryWrapper.eq("user_id", fireCheckWorkChangeCmd.getUserId()); + Long existsCount = fireCheckListUserMapper.selectCount(existsQueryWrapper); + if (existsCount != null && existsCount > 0) { + return SingleResponse.buildFailure("DATA_EXISTS", "新责任人已存在于该消防检查工作中"); + } + UserDO newUser = getNewUser(fireCheckWorkChangeCmd); + for (FireCheckListUserDO fireCheckListUserDO : fireCheckListUserDOList) { + fireCheckListUserDO.setUserId(fireCheckWorkChangeCmd.getUserId()); + fireCheckListUserDO.setDepartmentId(resolveDepartmentId(fireCheckWorkChangeCmd, newUser)); + fireCheckListUserDO.setCorpinfoId(resolveCorpinfoId(fireCheckWorkChangeCmd, newUser)); + fireCheckListUserMapper.updateById(fireCheckListUserDO); + } + FireCheckListDO fireCheckListDO = getFireCheckList(fireCheckWorkChangeCmd.getFireCheckId()); + sendWorkChangeMessage(fireCheckWorkChangeCmd, fireCheckListDO); + return SingleResponse.buildSuccess(); + } + + private FireCheckListByUserCO buildFireCheckListByUserCO(FireCheckListDO fireCheckListDO) { + FireCheckListByUserCO fireCheckListByUserCO = new FireCheckListByUserCO(); + fireCheckListByUserCO.setFireCheckId(fireCheckListDO.getFireCheckId()); + fireCheckListByUserCO.setWorkProject("消防检查"); + fireCheckListByUserCO.setWorkContent(buildWorkContent(fireCheckListDO)); + return fireCheckListByUserCO; + } + + private String buildWorkContent(FireCheckListDO fireCheckListDO) { + if (StringUtils.isNotEmpty(fireCheckListDO.getFireCheckName()) + && StringUtils.isNotEmpty(fireCheckListDO.getFireCheckTypeName())) { + return fireCheckListDO.getFireCheckName() + "(" + fireCheckListDO.getFireCheckTypeName() + ")"; + } + if (StringUtils.isNotEmpty(fireCheckListDO.getFireCheckName())) { + return fireCheckListDO.getFireCheckName(); + } + return StringUtils.defaultString(fireCheckListDO.getFireCheckTypeName()); + } + + private UserDO getNewUser(FireCheckWorkChangeCmd fireCheckWorkChangeCmd) { + List userDOList = userRepository.getListById(Collections.singletonList(fireCheckWorkChangeCmd.getUserId())); + if (CollUtil.isEmpty(userDOList)) { + return null; + } + return userDOList.get(0); + } + + private Long resolveDepartmentId(FireCheckWorkChangeCmd fireCheckWorkChangeCmd, UserDO newUser) { + if (fireCheckWorkChangeCmd.getDeptId() != null) { + return fireCheckWorkChangeCmd.getDeptId(); + } + if (newUser != null) { + return newUser.getDepartmentId(); + } + return null; + } + + private Long resolveCorpinfoId(FireCheckWorkChangeCmd fireCheckWorkChangeCmd, UserDO newUser) { + if (fireCheckWorkChangeCmd.getCorpId() != null) { + return fireCheckWorkChangeCmd.getCorpId(); + } + if (newUser != null) { + return newUser.getCorpinfoId(); + } + return null; + } + + private FireCheckListDO getFireCheckList(String fireCheckId) { + QueryWrapper listQueryWrapper = new QueryWrapper<>(); + listQueryWrapper.eq("fire_check_id", fireCheckId); + return fireCheckListMapper.selectOne(listQueryWrapper); + } + + private void sendWorkChangeMessage(FireCheckWorkChangeCmd fireCheckWorkChangeCmd, FireCheckListDO fireCheckListDO) { + try { + MessageSendCmd messageSendCmd = new MessageSendCmd(); + messageSendCmd.setBusinessId(UuidUtil.get32UUID()); + MessageTargetCmd messageTargetCmd = new MessageTargetCmd(); + messageTargetCmd.setUserId(fireCheckWorkChangeCmd.getUserId()); + messageSendCmd.setTargetCmd(messageTargetCmd); + messageSendCmd.setSourceCode(messageConfig.getFireCheckPending()); + messageSendCmd.setNeedTokenEnum(false); + Map sendParams = buildSendParams(fireCheckWorkChangeCmd, fireCheckListDO); + messageSendCmd.setParams(sendParams); + log.info("消防检查工作交接发送消息参数:{}", JSONUtil.toJsonStr(messageSendCmd)); + messageFacade.send(messageSendCmd); + } catch (Exception e) { + log.error("消防检查工作交接发送消息失败", e); + } + } + + private Map buildSendParams(FireCheckWorkChangeCmd fireCheckWorkChangeCmd, FireCheckListDO fireCheckListDO) { + String fireCheckName = fireCheckListDO == null ? "" : StringUtils.defaultString(fireCheckListDO.getFireCheckName()); + String fireCheckTypeName = fireCheckListDO == null ? "" : StringUtils.defaultString(fireCheckListDO.getFireCheckTypeName()); + return Collections.unmodifiableMap( + java.util.stream.Stream.of( + new Object[]{"FirefightinglistName", fireCheckName}, + new Object[]{"checkPeriod", fireCheckTypeName}, + new Object[]{"oldUserId", fireCheckWorkChangeCmd.getOldUserId()}, + new Object[]{"newUserId", fireCheckWorkChangeCmd.getUserId()}, + new Object[]{"newUserName", StringUtils.defaultString(fireCheckWorkChangeCmd.getUserName())} + ) + .filter(item -> Objects.nonNull(item[1])) + .collect(Collectors.toMap(item -> String.valueOf(item[0]), item -> item[1], (left, right) -> right)) + ); + } +}