Commit 726288f9 authored by tianbo's avatar tianbo

refactor(tcm): 优化企业信息更新和 orgCode 替换逻辑

- 新增 unitOrgCodeUpdate 方法,用于企业 orgCode调整历史数据修复 - 优化平台编辑单位层级信息后的数据同步逻辑
parent d28b1d6c
......@@ -8,7 +8,6 @@ import com.yeejoin.amos.boot.module.tcm.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Map;
......@@ -62,8 +61,25 @@ public interface TzBaseEnterpriseInfoMapper extends BaseMapper<TzBaseEnterpriseI
Map<String, Object> getProblemInfoBySourceId(@Param("sourceId")String sourceId);
@Update ("update tz_base_enterprise_info set SUPERVISE_ORG_NAME = #{superviseOrgName},SUPERVISE_ORG_CODE = REPLACE(SUPERVISE_ORG_CODE, #{oldSuperviseOrgCode}, #{preSuperviseOrgCode}), ORG_CODE = REPLACE(ORG_CODE, #{oldOrgCode}, #{preOrgCode}) where sequence_nbr = #{sequenceNbr}")
void updateSubCompanyOrgCode(@Param("superviseOrgName") String superviseOrgName, @Param("oldSuperviseOrgCode") String oldSuperviseOrgCode, @Param("preSuperviseOrgCode") String preSuperviseOrgCode,
@Param("oldOrgCode") String oldOrgCode, @Param("preOrgCode") String preOrgCode, @Param("sequenceNbr") Long sequenceNbr);
/**
* 用企业新orgCode替换各个表缓存orgCode
* 企业信息
* tz_base_enterprise_info:org_code、
* 人员信息
* cb_org_usr:amos_org_code
* 两个规定
* p_static_day、p_static_week、p_static_month:org_code
* p_check、p_check_input、p_check_shot:org_code
* p_plan:user_dept
* p_plan_task:org_code、user_dept
* 监管业务
* tzs_feedback_suggestions:supervise_org_code
*
* @param oldOrgCode 单位旧orgCode
* @param newOrgCode 单位新orgCode
*/
void updateUnitOrgCode(@Param("oldOrgCode") String oldOrgCode, @Param("newOrgCode") String newOrgCode);
}
......@@ -187,4 +187,63 @@
select sequence_nbr, org_code, company_code, company_name, company_type from privilege_company where company_code = #{companyCode} and is_deleted = false limit 1
</select>
<update id="updateSubCompanyOrgCode">
update tz_base_enterprise_info
set SUPERVISE_ORG_NAME = #{superviseOrgName},
SUPERVISE_ORG_CODE = REPLACE(SUPERVISE_ORG_CODE, #{oldSuperviseOrgCode}, #{preSuperviseOrgCode}),
ORG_CODE = IFNULL(REPLACE(ORG_CODE, #{oldOrgCode}, #{preOrgCode}), #{preOrgCode}) -- 兼容旧数据,如果为空则使用新值
where sequence_nbr = #{sequenceNbr}
</update>
<update id="updateUnitOrgCode">
UPDATE tz_base_enterprise_info
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE cb_org_usr
SET amos_org_code = #{newOrgCode}
WHERE
amos_org_code = #{oldOrgCode};
UPDATE p_static_day
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_static_week
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_static_month
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_check
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_check_input
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_check_shot
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE p_plan_task
SET org_code = #{newOrgCode}
WHERE
org_code = #{oldOrgCode};
UPDATE tzs_feedback_suggestions
SET supervise_org_code = #{newOrgCode}
WHERE
supervise_org_code = #{oldOrgCode};
UPDATE p_plan
SET user_dept = "replace" ( user_dept, #{oldOrgCode}, #{newOrgCode} )
WHERE
user_dept LIKE CONCAT('%', #{oldOrgCode}, '%');
UPDATE p_plan_task
SET user_dept = "replace" ( user_dept, #{oldOrgCode}, #{newOrgCode} )
WHERE
user_dept LIKE CONCAT('%', #{oldOrgCode}, '%');
</update>
</mapper>
......@@ -5,6 +5,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
......@@ -39,4 +40,11 @@ public class HistoryDataDealController {
return ResponseHelper.buildResponse(historyDataDealService.userPersonTypeUpdate());
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/orgCode/update")
@ApiOperation(httpMethod = "PUT", value = "企业orgCode调整历史数据修复")
public ResponseModel<Boolean> unitOrgCodeUpdate(@RequestParam String oldOrgCode, @RequestParam String newOrgCode) {
return ResponseHelper.buildResponse(historyDataDealService.unitOrgCodeUpdate(oldOrgCode, newOrgCode));
}
}
......@@ -27,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
......@@ -37,7 +36,6 @@ import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
/**
......@@ -308,7 +306,7 @@ public class TzBaseEnterpriseInfoController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/companyInfoUpdateById", method = RequestMethod.POST)
@ApiOperation(httpMethod = "POST", value = "根据ID修改企业信息", notes = "根据ID修改企业信息")
@ApiOperation(httpMethod = "POST", value = "根据ID修改企业信息-监管单位使用", notes = "根据ID修改企业信息-监管单位使用")
public ResponseModel<TzBaseEnterpriseInfoDto> companyInfoUpdateById(@RequestBody Map<String, Object> map) {
return ResponseHelper.buildResponse(iTzBaseEnterpriseInfoService.updateCompanyInfoById(map, getSelectedOrgInfo()));
}
......
package com.yeejoin.amos.boot.module.tcm.biz.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
......@@ -56,7 +57,15 @@ public class PlatformUserTopicMessage extends EmqxListener {
platformTokenService.setRequestContext();
JSONObject jsonObject = JSON.parseObject(message.toString());
JSONObject result = jsonObject.getJSONObject("result");
JSONObject dataResult = result.getJSONObject("result");
JSONArray dataResultList = new JSONArray();
JSONObject dataResult = new JSONObject();
if (result.get("result") instanceof JSONArray) {
dataResultList = JSON.parseArray(result.get("result").toString());
// 处理 dataList
} else {
// 处理 data
dataResult = result.getJSONObject("result");
}
String path = result.getString("path");
String agencyCode = jsonObject.getString("agencyCode");
if (!amosAgencyCode.equals(agencyCode)) {
......@@ -65,8 +74,10 @@ public class PlatformUserTopicMessage extends EmqxListener {
try {
if (StringUtils.isNotEmpty(path)) {
if (path.contains("company")) {
if ("监管机构".equals(dataResult.get("companyType"))) {
equipmentCategoryService.creatTree();
}
tzBaseEnterpriseInfoService.refreshCompanyInfo(dataResult);
// equipmentCategoryService.creatTree();
} else if (path.contains("agencyuser")) {
regUnitInfoService.updateAdminInfo(dataResult);
}
......
......@@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.entity.TzsUserPermission;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsUserInfo;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -14,6 +17,7 @@ import org.springframework.util.StopWatch;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
......@@ -27,9 +31,12 @@ public class HistoryDataDealServiceImpl {
private TzsUserPermissionServiceImpl userPermissionService;
public HistoryDataDealServiceImpl(TzsUserInfoServiceImpl userInfoService, TzsUserPermissionServiceImpl userPermissionService) {
private TzBaseEnterpriseInfoServiceImpl baseEnterpriseInfoService;
public HistoryDataDealServiceImpl(TzsUserInfoServiceImpl userInfoService, TzsUserPermissionServiceImpl userPermissionService, TzBaseEnterpriseInfoServiceImpl baseEnterpriseInfoService) {
this.userInfoService = userInfoService;
this.userPermissionService = userPermissionService;
this.baseEnterpriseInfoService = baseEnterpriseInfoService;
}
@Transactional(rollbackFor = Exception.class)
......@@ -88,4 +95,35 @@ public class HistoryDataDealServiceImpl {
log.info("刷存量人员类型结束,人员数量:{},耗时:{}秒", users.size(), stopWatch.getTotalTimeSeconds());
return users.size();
}
/**
* 用企业新orgCode替换各个表缓存orgCode
* 企业信息
* tz_base_enterprise_info:org_code、
* 人员信息
* cb_org_usr:amos_org_code
* 两个规定
* p_static_day、p_static_week、p_static_month:org_code
* p_check、p_check_input、p_check_shot:org_code
* p_plan:user_dept
* p_plan_task:org_code、user_dept
* 监管业务
* tzs_feedback_suggestions:supervise_org_code
*
* @param oldOrgCode 单位旧orgCode
* @param newOrgCode 单位新orgCode
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Boolean unitOrgCodeUpdate(String oldOrgCode, String newOrgCode) {
log.info("用企业新orgCode替换各个表缓存orgCode开始");
String newSuperviseOrgCode = newOrgCode.substring(0, newOrgCode.lastIndexOf("*"));
HashMap<String, Object> platformCompanyInfo = (HashMap<String, Object>) Privilege.companyClient.queryByOrgcode(newSuperviseOrgCode).getResult();
// 目前平台返回key为compnay(存在拼写错误)
CompanyModel parentModel = JSON.parseObject(JSON.toJSONString(platformCompanyInfo.get("compnay")), CompanyModel.class);
TzBaseEnterpriseInfo baseCompanyInfo = baseEnterpriseInfoService.getBaseMapper().selectOne(new LambdaQueryWrapper<TzBaseEnterpriseInfo>().eq(TzBaseEnterpriseInfo::getOrgCode, oldOrgCode));
baseEnterpriseInfoService.updateUnitOrgCode(baseCompanyInfo, parentModel, baseCompanyInfo.getSuperviseOrgCode(), newSuperviseOrgCode, oldOrgCode, newOrgCode);
log.info("用企业新orgCode替换各个表缓存orgCode结束");
return true;
}
}
......@@ -17,15 +17,10 @@ import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RequestContextWrapper;
import com.yeejoin.amos.boot.module.common.api.dto.UserPermissionDto;
import com.yeejoin.amos.boot.module.common.biz.event.CommonPublisher;
import com.yeejoin.amos.boot.module.common.biz.refresh.DataRefreshEvent;
import com.yeejoin.amos.boot.module.tcm.api.dto.BaseUnitLicenceDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.EquEnterDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzIndividualityDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsBaseInstitutionDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.*;
import com.yeejoin.amos.boot.module.tcm.api.entity.*;
import com.yeejoin.amos.boot.module.tcm.api.enums.EnterpriseEnums;
import com.yeejoin.amos.boot.module.tcm.api.enums.LicenceTypeEnum;
......@@ -1085,9 +1080,9 @@ public class TzBaseEnterpriseInfoServiceImpl
tzBaseEnterpriseInfo.setSequenceNbr(Long.valueOf(map.get("sequenceNbr").toString()));
tzBaseEnterpriseInfo = tzBaseEnterpriseInfoService.getById(tzBaseEnterpriseInfo.getSequenceNbr());
String superviseOrgCode = ObjectUtils.isEmpty(map.get("superviseOrgCode")) ? null : String.valueOf(map.get("superviseOrgCode"));
String newSuperviseOrgCode = ObjectUtils.isEmpty(map.get("superviseOrgCode")) ? null : String.valueOf(map.get("superviseOrgCode"));
if (!tzBaseEnterpriseInfo.getSuperviseCode().equals(superviseOrgCode)) {
if (!tzBaseEnterpriseInfo.getSuperviseCode().equals(newSuperviseOrgCode)) {
System.out.println("监管单位变更");
}
......@@ -1104,7 +1099,7 @@ public class TzBaseEnterpriseInfoServiceImpl
tzBaseEnterpriseInfo.setContactPhone(ObjectUtils.isEmpty(map.get("contactPhone")) ? null : String.valueOf(map.get("contactPhone")));
tzBaseEnterpriseInfo.setUnitBusinessLicense(ObjectUtils.isEmpty(map.get("unitBusinessLicense")) ? null : JSON.toJSONString(map.get("unitBusinessLicense")));
tzBaseEnterpriseInfo.setIndustrySupervisor(ObjectUtils.isEmpty(map.get("industrySupervisor")) ? null : String.valueOf(map.get("industrySupervisor")));
tzBaseEnterpriseInfo.setSuperviseOrgCode(superviseOrgCode);
tzBaseEnterpriseInfo.setSuperviseOrgCode(newSuperviseOrgCode);
tzBaseEnterpriseInfo.setSuperviseOrgName(ObjectUtils.isEmpty(map.get("superviseOrgName")) ? null : String.valueOf(map.get("superviseOrgName")));
tzBaseEnterpriseInfo.setOtherAccessories(ObjectUtils.isEmpty(map.get("otherAccessories")) ? null : JSON.toJSONString(map.get("otherAccessories")));
tzBaseEnterpriseInfo.setLegalPerson(ObjectUtils.isEmpty(map.get("legalPerson")) ? null : (String)map.get("legalPerson"));
......@@ -1211,11 +1206,11 @@ public class TzBaseEnterpriseInfoServiceImpl
log.error("更新单位错误: {}", companyResult);
throw new BadRequest("更新单位失败!");
}
String orgCode = Optional.ofNullable(companyResult.getResult()).map(CompanyModel::getOrgCode).orElse(null);
updateModel.setOrgCode(orgCode);
String newOrgCode = Optional.ofNullable(companyResult.getResult()).map(CompanyModel::getOrgCode).orElse(null);
updateModel.setOrgCode(newOrgCode);
// 更新企业的org_code
UpdateWrapper<TzBaseEnterpriseInfo> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("org_code", orgCode);
updateWrapper.set("org_code", newOrgCode);
updateWrapper.eq("sequence_nbr", tzBaseEnterpriseInfo.getSequenceNbr());
tzBaseEnterpriseInfoService.update(updateWrapper);
}
......@@ -1374,8 +1369,8 @@ public class TzBaseEnterpriseInfoServiceImpl
}
/**
* 平台编辑单位信息后, 异步通知, 刷新tz_base_enterprise_info表org_code
*
* 平台编辑单位层级信息后, 异步通知, 刷新tz_base_enterprise_info表org_code
* 同时更新其他表缓存的企业org_code
*
* @param dataResult dataResult
* @author yangyang
......@@ -1392,6 +1387,8 @@ public class TzBaseEnterpriseInfoServiceImpl
return;
}
List<CompanyModel> companyModels = result.getResult();
// 只处理非监管机构
companyModels = companyModels.stream().filter(i -> !i.getCompanyType().equals("监管机构")).collect(Collectors.toList());
List<String> useCodes = companyModels.stream().map(CompanyModel::getCompanyCode).filter(Objects::nonNull).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(companyBo.getCompanyCode())) {
useCodes.add(companyBo.getCompanyCode());
......@@ -1399,23 +1396,34 @@ public class TzBaseEnterpriseInfoServiceImpl
Map<String, List<CompanyModel>> companyModelMap = companyModels.stream().collect(Collectors.groupingBy(CompanyModel::getCompanyCode));
List<TzBaseEnterpriseInfo> tzBaseEnterpriseInfos = tzBaseEnterpriseInfoMapper.selectList(new QueryWrapper<TzBaseEnterpriseInfo>().in("use_code", useCodes));
// privilege_company 有触发器更新,只需要更新 tz_base_enterprise_info
int updateCount = 0;
if (!ValidationUtil.isEmpty(tzBaseEnterpriseInfos)) {
for (TzBaseEnterpriseInfo tzBaseEnterpriseInfo : tzBaseEnterpriseInfos) {
String oldOrgCode = tzBaseEnterpriseInfo.getOrgCode();// 旧的org_code
CompanyModel companyModel = companyModelMap.get(tzBaseEnterpriseInfo.getUseCode()).get(0);
String preOrgCode = companyModel.getOrgCode();// 新的org_code
String newOrgCode = companyModel.getOrgCode();// 新的org_code
String oldSuperviseOrgCode = tzBaseEnterpriseInfo.getSuperviseOrgCode();
String preSuperviseOrgCode = companyModel.getOrgCode().replace("*" + companyModel.getCompanyOrgCode(), "");
HashMap<String, Object> parentMessage = (HashMap<String, Object>) Privilege.companyClient.queryByOrgcode(preSuperviseOrgCode).getResult();
// 目前平台返回key为compnay(存在拼写错误)
CompanyModel parentModel = JSON.parseObject(JSON.toJSONString(parentMessage.get("compnay")), CompanyModel.class);
// 更新 tz_base_enterprise_info
tzBaseEnterpriseInfoMapper.updateSubCompanyOrgCode(parentModel.getCompanyName(), oldSuperviseOrgCode, preSuperviseOrgCode, oldOrgCode, preOrgCode, tzBaseEnterpriseInfo.getSequenceNbr());
String newSuperviseOrgCode = companyModel.getOrgCode().replace("*" + companyModel.getCompanyOrgCode(), "");
// 更新 tz_base_enterprise_info。只有管辖机构有改动才更新
if (!newSuperviseOrgCode.equals(oldSuperviseOrgCode)) {
HashMap<String, Object> parentMessage = (HashMap<String, Object>) Privilege.companyClient.queryByOrgcode(newSuperviseOrgCode).getResult();
// 目前平台返回key为compnay(存在拼写错误)
CompanyModel parentModel = JSON.parseObject(JSON.toJSONString(parentMessage.get("compnay")), CompanyModel.class);
updateUnitOrgCode(tzBaseEnterpriseInfo, parentModel, oldSuperviseOrgCode, newSuperviseOrgCode, oldOrgCode, newOrgCode);
updateCount++;
}
}
log.info("刷新企业信息成功,共更新{}条数据", updateCount);
}
} catch (Exception e) {
e.printStackTrace();
log.error("刷新企业信息发生异常", e);
}
}
public void updateUnitOrgCode(TzBaseEnterpriseInfo tzBaseEnterpriseInfo, CompanyModel parentModel, String oldSuperviseOrgCode, String newSuperviseOrgCode, String oldOrgCode, String newOrgCode) {
tzBaseEnterpriseInfoMapper.updateSubCompanyOrgCode(parentModel.getCompanyName(), oldSuperviseOrgCode, newSuperviseOrgCode, oldOrgCode, newOrgCode, tzBaseEnterpriseInfo.getSequenceNbr());
tzBaseEnterpriseInfoMapper.updateUnitOrgCode(oldOrgCode, newOrgCode);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment