@@ -87,6 +87,11 @@ public interface BizConst { | |||||
int MAX_EXPORT_COUNT = 5000; | int MAX_EXPORT_COUNT = 5000; | ||||
String RESPONSE_KEY_DATA = "data"; | String RESPONSE_KEY_DATA = "data"; | ||||
String RESPONSE_KEY_ID = "id"; | |||||
String RESPONSE_KEY_DING_CODE = "dingCode"; | |||||
String RESPONSE_KEY_MATTER_NAME = "matterName"; | |||||
String RESPONSE_KEY_ORG_NAME = "orgName"; | |||||
String RESPONSE_KEY_USER_STATE = "userState"; | |||||
String ORG_NAME = "organizationName"; | String ORG_NAME = "organizationName"; | ||||
String ORG_CODE = "organizationCode"; | String ORG_CODE = "organizationCode"; | ||||
@@ -5,6 +5,7 @@ import com.ningdatech.pmapi.irs.model.dto.ForwardDTO; | |||||
import com.ningdatech.pmapi.projectdeclared.manage.IrsManage; | import com.ningdatech.pmapi.projectdeclared.manage.IrsManage; | ||||
import com.ningdatech.pmapi.projectdeclared.model.vo.IrsApplicationVO; | import com.ningdatech.pmapi.projectdeclared.model.vo.IrsApplicationVO; | ||||
import com.ningdatech.pmapi.projectdeclared.model.vo.PiotTasksVO; | import com.ningdatech.pmapi.projectdeclared.model.vo.PiotTasksVO; | ||||
import com.ningdatech.pmapi.scheduler.task.SynProjectCoreBizTask; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam; | |||||
import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||
import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||
import java.net.UnknownHostException; | |||||
import java.security.NoSuchAlgorithmException; | import java.security.NoSuchAlgorithmException; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -35,6 +37,8 @@ public class IrsController { | |||||
private final IrsManage irsManage; | private final IrsManage irsManage; | ||||
private final SynProjectCoreBizTask projectCoreBizTask; | |||||
@ApiOperation(value = "irs应用列表", notes = "irs应用列表") | @ApiOperation(value = "irs应用列表", notes = "irs应用列表") | ||||
@WebLog("irs应用列表") | @WebLog("irs应用列表") | ||||
@GetMapping("/application-list") | @GetMapping("/application-list") | ||||
@@ -54,4 +58,10 @@ public class IrsController { | |||||
public String getCreditCode() throws NoSuchAlgorithmException, UnsupportedEncodingException { | public String getCreditCode() throws NoSuchAlgorithmException, UnsupportedEncodingException { | ||||
return irsManage.getCreditCode(); | return irsManage.getCreditCode(); | ||||
} | } | ||||
@ApiOperation(value = "强制刷新核心业务", notes = "强制刷新核心业务") | |||||
@GetMapping("/refresh-core-biz") | |||||
public void refreshCoreBiz() throws UnknownHostException { | |||||
projectCoreBizTask.doTask(); | |||||
} | |||||
} | } |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.irs.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.ningdatech.pmapi.irs.model.entity.ProjectCoreBiz; | |||||
/** | |||||
* <p> | |||||
* Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-09-13 | |||||
*/ | |||||
public interface ProjectCoreBizMapper extends BaseMapper<ProjectCoreBiz> { | |||||
} |
@@ -0,0 +1,52 @@ | |||||
package com.ningdatech.pmapi.irs.model.entity; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* @Classname ProjectCoreBiz | |||||
* @Description | |||||
* @Date 2023/9/13 15:33 | |||||
* @Author PoffyZhang | |||||
*/ | |||||
@Data | |||||
@TableName("nd_project_core_biz") | |||||
@ApiModel(value = "项目核心业务对象") | |||||
public class ProjectCoreBiz { | |||||
@TableId(type = IdType.AUTO) | |||||
@ApiModelProperty("主键") | |||||
private Long id; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createOn; | |||||
@ApiModelProperty("修改时间") | |||||
private LocalDateTime updateOn; | |||||
@ApiModelProperty("irs那边的ID") | |||||
private Long irsId; | |||||
@ApiModelProperty("生成的业务编号") | |||||
private String matterCode; | |||||
@ApiModelProperty("业务名") | |||||
private String matterName; | |||||
@ApiModelProperty("企业名") | |||||
private String orgName; | |||||
@ApiModelProperty("企业钉code") | |||||
private String orgCode; | |||||
@ApiModelProperty("区域名") | |||||
private String areaName; | |||||
@ApiModelProperty("状态") | |||||
private String userState; | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.ningdatech.pmapi.irs.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.ningdatech.pmapi.gov.entity.BelongOrg; | |||||
import com.ningdatech.pmapi.irs.model.entity.ProjectCoreBiz; | |||||
import java.util.Collection; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* 服务类 | |||||
* </p> | |||||
* | |||||
* @author Zpf | |||||
* @since 2023-09-13 | |||||
*/ | |||||
public interface IProjectCoreBizService extends IService<ProjectCoreBiz> { | |||||
} |
@@ -0,0 +1,21 @@ | |||||
package com.ningdatech.pmapi.irs.service.impl; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.ningdatech.pmapi.irs.mapper.ProjectCoreBizMapper; | |||||
import com.ningdatech.pmapi.irs.model.entity.ProjectCoreBiz; | |||||
import com.ningdatech.pmapi.irs.service.IProjectCoreBizService; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-09-13 | |||||
*/ | |||||
@Service | |||||
public class ProjectCoreBizServiceImpl extends ServiceImpl<ProjectCoreBizMapper, ProjectCoreBiz> | |||||
implements IProjectCoreBizService { | |||||
} |
@@ -55,4 +55,5 @@ public class DingOrganization implements Serializable { | |||||
private String status; | private String status; | ||||
private String unifiedSocialCreditCode; | |||||
} | } |
@@ -36,6 +36,6 @@ public class OrganizationTreeVO { | |||||
// @ApiModelProperty(value = "是否为叶子节点") | // @ApiModelProperty(value = "是否为叶子节点") | ||||
// private Boolean isLeaf; | // private Boolean isLeaf; | ||||
// | // | ||||
// @ApiModelProperty(value = "联合唯一字段方便页面使用(name##organizationCode)") | |||||
// private String unionCode; | |||||
@ApiModelProperty(value = "社会同一信用代码") | |||||
private String unifiedSocialCreditCode;; | |||||
} | } |
@@ -35,4 +35,6 @@ public class ResOrganizationListVO { | |||||
@ApiModelProperty("是否为上级条线主管单位") | @ApiModelProperty("是否为上级条线主管单位") | ||||
private Boolean isSuperiorLineCompetentUnit; | private Boolean isSuperiorLineCompetentUnit; | ||||
@ApiModelProperty("社会统一信用代码") | |||||
private String unifiedSocialCreditCode; | |||||
} | } |
@@ -13,4 +13,5 @@ public interface ProjectCodeContant { | |||||
String PROJECT_TYPE_PREFIX = "0"; | String PROJECT_TYPE_PREFIX = "0"; | ||||
String SHUZI_5 = "%05d"; | String SHUZI_5 = "%05d"; | ||||
String SHUZI_4 = "%04d"; | |||||
} | } |
@@ -0,0 +1,144 @@ | |||||
package com.ningdatech.pmapi.scheduler.task; | |||||
import cn.hutool.core.collection.CollUtil; | |||||
import cn.hutool.core.date.StopWatch; | |||||
import com.alibaba.fastjson.JSON; | |||||
import com.alibaba.fastjson.JSONArray; | |||||
import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.google.common.collect.Lists; | |||||
import com.ningdatech.basic.model.GenericResult; | |||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.ding.constants.DingOrganizationContant; | |||||
import com.ningdatech.pmapi.irs.manage.ProjectIrsManage; | |||||
import com.ningdatech.pmapi.irs.model.entity.ProjectCoreBiz; | |||||
import com.ningdatech.pmapi.irs.service.IProjectCoreBizService; | |||||
import com.ningdatech.pmapi.organization.model.entity.DingOrganization; | |||||
import com.ningdatech.pmapi.organization.service.IDingOrganizationService; | |||||
import com.ningdatech.pmapi.projectdeclared.contants.ProjectCodeContant; | |||||
import com.ningdatech.zwdd.client.ZwddClient; | |||||
import com.ningdatech.zwdd.model.dto.DingOrgInfoDTO; | |||||
import lombok.RequiredArgsConstructor; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.beans.factory.annotation.Value; | |||||
import org.springframework.scheduling.annotation.Scheduled; | |||||
import org.springframework.stereotype.Component; | |||||
import java.net.InetAddress; | |||||
import java.net.UnknownHostException; | |||||
import java.time.LocalDateTime; | |||||
import java.util.List; | |||||
import java.util.Objects; | |||||
/** | |||||
* @author ZPF | |||||
* @since 2023/09/13 18:16 | |||||
*/ | |||||
@Component | |||||
@Slf4j | |||||
@RequiredArgsConstructor | |||||
public class SynProjectCoreBizTask { | |||||
@Value("${hostname}") | |||||
public String HOST; | |||||
@Value("${spring.profiles.active}") | |||||
public String active; | |||||
@Autowired | |||||
private IProjectCoreBizService projectCoreBizService; | |||||
@Autowired | |||||
private IDingOrganizationService organizationService; | |||||
@Autowired | |||||
private ZwddClient zwddClient; | |||||
@Autowired | |||||
private ProjectIrsManage projectIrsManage; | |||||
/** | |||||
* 前置机每天晚上10点自动清空,第二天早上6点获取数据 | |||||
* 定时同步前置机数据 每天1点开始执行一次 | |||||
* | |||||
*/ | |||||
@Scheduled(cron = "0 0 2 * * ?") | |||||
public void doTask() throws UnknownHostException { | |||||
if (!HOST.equals(InetAddress.getLocalHost().getHostName())) { | |||||
log.info("定时器没开启或者host不对! {}:{}", | |||||
HOST,InetAddress.getLocalHost().getHostName()); | |||||
return; | |||||
} | |||||
log.info("同步项目核心业务开始====="); | |||||
StopWatch stopWatch = new StopWatch(); | |||||
stopWatch.start(); | |||||
List<DingOrganization> orgs = organizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||||
.in(DingOrganization::getTypeCode, Lists.newArrayList(DingOrganizationContant.UNIT_TYPE | |||||
, DingOrganizationContant.GOV_TEMPORARY))); | |||||
log.info("总共需要同步 orgs size :{}",orgs.size()); | |||||
for(DingOrganization organization : orgs){ | |||||
GenericResult<DingOrgInfoDTO> dingResult = zwddClient.getOrganizationByCode(organization.getOrganizationCode()); | |||||
if(dingResult.isSuccess()){ | |||||
DingOrgInfoDTO data = dingResult.getData(); | |||||
String unifiedSocialCreditCode = data.getUnifiedSocialCreditCode(); | |||||
if(StringUtils.isNotBlank(unifiedSocialCreditCode)){ | |||||
organization.setUnifiedSocialCreditCode(unifiedSocialCreditCode); | |||||
organizationService.updateById(organization); | |||||
} | |||||
//去请求IRS接口 | |||||
JSONObject jsonObject = projectIrsManage.searchCoreBiz(null, organization.getOrganizationCode(), 1000, 1); | |||||
JSONArray jsonArray = jsonObject.getJSONArray(BizConst.RESPONSE_KEY_DATA); | |||||
if(CollUtil.isNotEmpty(jsonArray)){ | |||||
jsonArray.forEach(j -> { | |||||
JSONObject jsonData = JSON.parseObject(JSON.toJSONString(j)); | |||||
ProjectCoreBiz coreBiz = new ProjectCoreBiz(); | |||||
// | |||||
Long irsId = jsonData.getLong(BizConst.RESPONSE_KEY_ID); | |||||
String dingCode = jsonData.getString(BizConst.RESPONSE_KEY_DING_CODE); | |||||
String matterName = jsonData.getString(BizConst.RESPONSE_KEY_MATTER_NAME); | |||||
String orgName = jsonData.getString(BizConst.RESPONSE_KEY_ORG_NAME); | |||||
String userState = jsonData.getString(BizConst.RESPONSE_KEY_USER_STATE); | |||||
ProjectCoreBiz old = projectCoreBizService.getOne(Wrappers.lambdaQuery(ProjectCoreBiz.class) | |||||
.eq(ProjectCoreBiz::getIrsId, irsId) | |||||
.last(BizConst.LIMIT_1)); | |||||
if(Objects.nonNull(old)){ | |||||
coreBiz.setId(old.getId()); | |||||
}else{ | |||||
coreBiz.setCreateOn(LocalDateTime.now()); | |||||
} | |||||
coreBiz.setIrsId(irsId); | |||||
coreBiz.setMatterName(matterName); | |||||
coreBiz.setOrgCode(dingCode); | |||||
coreBiz.setOrgName(orgName); | |||||
coreBiz.setUserState(userState); | |||||
projectCoreBizService.saveOrUpdate(coreBiz); | |||||
coreBiz.setMatterCode(genirate(unifiedSocialCreditCode,coreBiz.getId())); | |||||
projectCoreBizService.updateById(coreBiz); | |||||
}); | |||||
} | |||||
} | |||||
} | |||||
stopWatch.stop(); | |||||
log.info("同步项目核心业务结束====={}s",stopWatch.getTotalTimeSeconds()); | |||||
} | |||||
/** | |||||
* 生成 编号 | |||||
* @param unifiedSocialCreditCode | |||||
* @param id | |||||
* @return | |||||
*/ | |||||
private String genirate(String unifiedSocialCreditCode, Long id) { | |||||
String formatId = String.format(ProjectCodeContant.SHUZI_4, id); | |||||
return unifiedSocialCreditCode + formatId; | |||||
} | |||||
} |