Commit ddb50201 authored by suhuiguang's avatar suhuiguang

1.检验检测报检规则3.0版本

parent 410eff12
package com.yeejoin.amos.boot.module.jyjc.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.typroject.tyboot.core.rdbms.orm.entity.BaseEntity;
import java.util.Date;
/**
* @author system_generator
* @date 2024-06-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_jyjc_inspection_application_no_accept_log")
public class JyjcInspectionApplicationNoAcceptLog extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 不予处理的检验检测单位编码
*/
@TableField("inspection_unit_code")
private String inspectionUnitCode;
/**
* 不予处理操作日期
*/
@TableField("no_accept_date")
private Date noAcceptDate;
/**
* 不予处理操作说明
*/
@TableField("remark")
private String remark;
/**
* 操作人
*/
@TableField("no_accept_user_id")
private String noAcceptUserId;
/**
* 报检申请表主键
*/
@TableField("application_seq")
private Long applicationSeq;
}
package com.yeejoin.amos.boot.module.jyjc.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author Administrator
*/
@AllArgsConstructor
@Getter
public enum InspectionCompanyType {
/**
* 检验单位分类
*/
LEGAL("legal","法定"),
THIRD("third","第3方");
private String code;
private String name;
}
package com.yeejoin.amos.boot.module.jyjc.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author Administrator
*/
@AllArgsConstructor
@Getter
public enum RequestTypeEnum {
/**
* 提交的类型
*/
FIRST_REQUEST("firstRequest", "首次的提交"),
NO_ACCEPT_REQUEST("noAcceptRequest", "不予受理的提交");
private String code;
private String name;
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.jyjc.api.mapper;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationNoAcceptLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* Mapper 接口
*
* @author system_generator
* @date 2024-06-19
*/
public interface JyjcInspectionApplicationNoAcceptLogMapper extends BaseMapper<JyjcInspectionApplicationNoAcceptLog> {
}
...@@ -18,4 +18,7 @@ public class InspectionEquipInfoModel implements Serializable { ...@@ -18,4 +18,7 @@ public class InspectionEquipInfoModel implements Serializable {
@ApiModelProperty(value = "检验类型(小类)") @ApiModelProperty(value = "检验类型(小类)")
private String inspectionType; private String inspectionType;
@ApiModelProperty(value = "申请表主键")
private String appSeq;
} }
package com.yeejoin.amos.boot.module.jyjc.api.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.typroject.tyboot.core.rdbms.model.BaseModel;
import java.util.Date;
/**
* @author system_generator
* @date 2024-06-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "JyjcInspectionApplicationNoAcceptLogModel", description = "")
public class JyjcInspectionApplicationNoAcceptLogModel extends BaseModel {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "不予处理的检验检测单位编码")
private String inspectionUnitCode;
@ApiModelProperty(value = "不予处理操作日期")
private Date noAcceptDate;
@ApiModelProperty(value = "不予处理操作说明")
private String remark;
@ApiModelProperty(value = "操作人")
private String noAcceptUserId;
@ApiModelProperty(value = "报检申请表主键")
private Long applicationSeq;
}
package com.yeejoin.amos.boot.module.jyjc.api.service;
/**
* 接口类
*
* @author system_generator
* @date 2024-06-19
*/
public interface IJyjcInspectionApplicationNoAcceptLogService {}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationNoAcceptLogMapper">
</mapper>
...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.action; ...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.action;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yeejoin.amos.boot.module.jyjc.api.enums.InspectionCompanyType;
import com.yeejoin.amos.boot.module.jyjc.api.enums.LicenceTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.LicenceTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.OpenBizTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.TopicEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.TopicEnum;
...@@ -17,10 +18,12 @@ import com.yeejoin.amos.component.rule.config.RuleConfig; ...@@ -17,10 +18,12 @@ import com.yeejoin.amos.component.rule.config.RuleConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.typroject.tyboot.component.emq.EmqKeeper; import org.typroject.tyboot.component.emq.EmqKeeper;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -42,6 +45,12 @@ public class RuleActionHandler { ...@@ -42,6 +45,12 @@ public class RuleActionHandler {
*/ */
private static final String[] EXCLUSION_CITY_REGIONS = {"610403", "610581"}; private static final String[] EXCLUSION_CITY_REGIONS = {"610403", "610581"};
/**
* 省特检院公司code
*/
@Value("${province.inspection.company.code:126100004352004822}")
private String provinceInspectionCompanyCode;
public RuleActionHandler(EmqKeeper emqKeeper, TzBaseUnitLicenceMapper baseUnitLicenceMapper, public RuleActionHandler(EmqKeeper emqKeeper, TzBaseUnitLicenceMapper baseUnitLicenceMapper,
TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper, TzBaseEnterpriseInfoMapper tzBaseEnterpriseInfoMapper,
...@@ -53,41 +62,77 @@ public class RuleActionHandler { ...@@ -53,41 +62,77 @@ public class RuleActionHandler {
} }
/** /**
* 规则回调方法 * 规则回调方法-首次提交的检验机构匹配
* *
* @param bizObj 请求变量参数 * @param bizObj 请求变量参数
* @param itemCode 核对项目编码,多个用逗号分割 * @param itemCode 核对项目编码,多个用逗号分割
* @param isMatchArea 是否进行属地过滤(检验检测机构的开通区域包含设备归属地市),true-过滤,false-不过滤 * @param isMatchArea 是否进行属地过滤(检验检测机构的开通区域包含设备归属地市),true-过滤,false-不过滤
* @param defaultInspectionCode 默认的检验机构code,多个用逗号分割,在按照属地匹配不上时,默认的检验机构
* @param legalInspectionCodes 法定的检验机构code,多个用逗号分割,检验机构的最大集合-不为空
* @param inspectionCompanyType 需要显示的单位类型:legal-法定、third-第3方、all-全部,默认都是legal-法定,预留需求变更点
* @param isMatchItem 是否需要匹配核准代码:true-匹配; false-不匹配
*/ */
public void filterInspectionOrgAction(Object bizObj, String itemCode, Boolean isMatchArea) { public void filterInspectionOrgAction(Object bizObj, String itemCode, Boolean isMatchArea, String defaultInspectionCode, String legalInspectionCodes, String inspectionCompanyType, Boolean isMatchItem) {
log.info("收到首次提交的检验机构匹配规则回调:请求变量参数:{},核对项目编码:{},是否进行属地过滤:{},默认的检验机构code:{}, 法定的检验机构code:{}, 法定的检验机构code: {},是否需要匹配核准代码:{}", bizObj, itemCode, isMatchArea, defaultInspectionCode, legalInspectionCodes, inspectionCompanyType, isMatchItem);
InspectionEquipInfo inspectionEquipInfo = (InspectionEquipInfo) bizObj; InspectionEquipInfo inspectionEquipInfo = (InspectionEquipInfo) bizObj;
try { try {
// 1.获取所有的符合资质条件的单位许可信息 // 1.获取所有的符合资质条件的单位许可信息
List<TzBaseUnitLicence> unitLicenceList = getBaseUnitLicenceList(itemCode); List<TzBaseUnitLicence> unitLicenceList = getBaseUnitLicenceList(itemCode, isMatchItem);
// 2.匹配过滤机构信息,默认检验机构(目前检测没配置规则,后续检测也需要配置规则时,需要规则那回调方法新增参数,区分检验还是检测) // 2.匹配过滤机构信息,默认检验机构(目前检测没配置规则,后续检测也需要配置规则时,需要规则那回调方法新增参数,区分检验还是检测)
List<TzBaseEnterpriseInfoDto> tzBaseEnterpriseInfoList = getInspectionUnitList(unitLicenceList, isMatchArea, inspectionEquipInfo.getRecord(), OpenBizTypeEnum.JY.getCode()); List<TzBaseEnterpriseInfoDto> tzBaseEnterpriseInfoList = getInspectionUnitListForFirstCommit(unitLicenceList, isMatchArea, inspectionEquipInfo.getRecord(), OpenBizTypeEnum.JY.getCode(), defaultInspectionCode, legalInspectionCodes);
publishMqttMessage(inspectionEquipInfo.getComponentKey(), tzBaseEnterpriseInfoList);
} catch (MqttException e) {
log.error("Error publishing MQTT message: {}", e.getMessage());
}
}
/**
* 规则回调方法-不予受理的检验机构匹配
*
* @param bizObj 请求变量参数
* @param itemCode 核对项目编码,多个用逗号分割
* @param isMatchArea 是否进行属地过滤(检验检测机构的开通区域包含设备归属地市),true-过滤,false-不过滤
* @param defaultInspectionCode 默认的检验机构code
* @param inspectionCompanyType 需要显示的单位类型:legal-法定、third-第3方、all-全部,默认都是legal-法定,预留需求变更点
* @param legalInspectionCodes 法定的检验机构code,多个用逗号分割,检验机构的最大集合-不为空
*/
public void noAcceptInspectionOrgMatchAction(Object bizObj, String itemCode, Boolean isMatchArea, String defaultInspectionCode, String inspectionCompanyType, Boolean isMatchItem, String legalInspectionCodes) {
log.info("收到不予受理的检验机构匹配规则回调:请求变量参数:{},核对项目编码:{},是否进行属地过滤:{},默认的检验机构code:{}, 法定的检验机构code:{}, 法定的检验机构code: {},是否需要匹配核准代码:{}", bizObj, itemCode, isMatchArea, defaultInspectionCode, legalInspectionCodes, inspectionCompanyType, isMatchItem);
InspectionEquipInfo inspectionEquipInfo = (InspectionEquipInfo) bizObj;
try {
// 1.获取所有的符合资质条件的单位许可信息
List<TzBaseUnitLicence> unitLicenceList = getBaseUnitLicenceList(itemCode, isMatchItem);
// 2.匹配过滤机构信息,默认检验机构(目前检测没配置规则,后续检测也需要配置规则时,需要规则那回调方法新增参数,区分检验还是检测)
List<TzBaseEnterpriseInfoDto> tzBaseEnterpriseInfoList = getInspectionUnitListForNoAccept(unitLicenceList, isMatchArea, inspectionEquipInfo.getRecord(), OpenBizTypeEnum.JY.getCode(), defaultInspectionCode, legalInspectionCodes, inspectionCompanyType);
publishMqttMessage(inspectionEquipInfo.getComponentKey(), tzBaseEnterpriseInfoList); publishMqttMessage(inspectionEquipInfo.getComponentKey(), tzBaseEnterpriseInfoList);
} catch (MqttException e) { } catch (MqttException e) {
log.error("Error publishing MQTT message: {}", e.getMessage()); log.error("Error publishing MQTT message: {}", e.getMessage());
} }
} }
private List<TzBaseUnitLicence> getBaseUnitLicenceList(String itemCode) { private List<TzBaseUnitLicence> getBaseUnitLicenceList(String itemCode, Boolean isMatchItem) {
return baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>() List<TzBaseUnitLicence> tzBaseUnitLicences;
if (isMatchItem && StringUtils.isNotEmpty(itemCode)) {
tzBaseUnitLicences = baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>()
.select(TzBaseUnitLicence::getUnitCode) .select(TzBaseUnitLicence::getUnitCode)
.eq(TzBaseUnitLicence::getLicenceType, LicenceTypeEnum.JY_JC.getCode()) .eq(TzBaseUnitLicence::getLicenceType, LicenceTypeEnum.JY_JC.getCode())
.in(TzBaseUnitLicence::getItemCode, Arrays.asList(itemCode.split(",")))); .in(TzBaseUnitLicence::getItemCode, Arrays.asList(itemCode.split(",")))
// .ge(TzBaseUnitLicence::getExpiryDate, LocalDate.now())); .ge(TzBaseUnitLicence::getExpiryDate, LocalDate.now()));
} else {
tzBaseUnitLicences = baseUnitLicenceMapper.selectList(new LambdaQueryWrapper<TzBaseUnitLicence>()
.select(TzBaseUnitLicence::getUnitCode)
.eq(TzBaseUnitLicence::getLicenceType, LicenceTypeEnum.JY_JC.getCode())
.ge(TzBaseUnitLicence::getExpiryDate, LocalDate.now()));
}
return tzBaseUnitLicences;
} }
public List<TzBaseEnterpriseInfoDto> getInspectionUnitList(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType) { public List<TzBaseEnterpriseInfoDto> getInspectionUnitList(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType) {
// 是否进行属地过滤 // 是否进行属地过滤
String areaCode = isMatchArea ? this.getArea(record) : ""; String areaCode = isMatchArea ? this.getArea(record) : "";
// 所有符合单位的code // 所有符合单位的code
List<String> unitCodes = unitLicenceList.stream() List<String> unitCodes = unitLicenceList.stream().map(TzBaseUnitLicence::getUnitCode).collect(Collectors.toList());
.map(TzBaseUnitLicence::getUnitCode)
.collect(Collectors.toList());
// 按照资质 + areaCode,进行设备单位的筛选 // 按照资质 + areaCode,进行设备单位的筛选
List<TzBaseEnterpriseInfoDto> matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(unitCodes, areaCode, openBizType); List<TzBaseEnterpriseInfoDto> matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(unitCodes, areaCode, openBizType);
if (matchEnterpriseInfos.isEmpty()) { if (matchEnterpriseInfos.isEmpty()) {
...@@ -97,8 +142,62 @@ public class RuleActionHandler { ...@@ -97,8 +142,62 @@ public class RuleActionHandler {
return matchEnterpriseInfos; return matchEnterpriseInfos;
} }
private List<TzBaseEnterpriseInfoDto> getInspectionUnitListForNoAccept(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType, String defaultInspectionCode, String legalInspectionCodes, String inspectionCompanyType) {
// 是否进行属地过滤
String areaCode = isMatchArea ? this.getArea(record) : "";
// 所有符合单位的code
List<String> unitCodes = unitLicenceList.stream().map(TzBaseUnitLicence::getUnitCode).collect(Collectors.toList());
// 按照资质 + areaCode,进行设备单位的筛选
List<TzBaseEnterpriseInfoDto> matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(unitCodes, areaCode, openBizType);
// 第三方时需要去掉法定机构
if (inspectionCompanyType.equals(InspectionCompanyType.THIRD.getCode())) {
log.info("第三方检验机构开始匹配");
matchEnterpriseInfos = matchEnterpriseInfos.stream().filter(e -> !legalInspectionCodes.contains(e.getUseCode())).collect(Collectors.toList());
log.info("匹配到的第三方检验机构:{}", matchEnterpriseInfos);
}
// 法定时,机构为定义的法定机构 defaultInspectionCode
if (inspectionCompanyType.equals(InspectionCompanyType.LEGAL.getCode())) {
log.info("法定检验机构开始匹配");
matchEnterpriseInfos = matchEnterpriseInfos.stream().filter(e -> defaultInspectionCode.contains(e.getUseCode())).collect(Collectors.toList());
log.info("匹配到的法定检验机构:{}", matchEnterpriseInfos);
}
// 代码严谨判断,如前置调整法定机构单位为注册,返回全部的法定机构和第3方机构
if (matchEnterpriseInfos.isEmpty()) {
log.info("指定的默认的检验机构未匹配到,将返回所有的检验机构包括第三方和法定检验机构,省特检院除外");
matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(null, null, openBizType);
matchEnterpriseInfos = matchEnterpriseInfos.stream().filter(c -> !provinceInspectionCompanyCode.contains(c.getUseCode())).collect(Collectors.toList());
log.info("指定的默认的检验机构未匹配到,将返回所有的检验机构包括第三方和法定检验机构,数据为:{}", matchEnterpriseInfos);
}
return matchEnterpriseInfos;
}
private List<TzBaseEnterpriseInfoDto> getInspectionUnitListForFirstCommit(List<TzBaseUnitLicence> unitLicenceList, Boolean isMatchArea, String record, String openBizType, String defaultInspectionCode, String legalInspectionCodes) {
// 是否进行属地过滤
String areaCode = isMatchArea ? this.getArea(record) : "";
// 所有符合单位的code
List<String> unitCodes = unitLicenceList.stream()
.map(TzBaseUnitLicence::getUnitCode)
.collect(Collectors.toList());
// 将法定机构和符合资质要求的机构取交集
List<String> legalUnitCodes = Arrays.stream(legalInspectionCodes.split(",")).filter(unitCodes::contains).collect(Collectors.toList());
// 按照资质 + areaCode,进行设备单位的筛选
List<TzBaseEnterpriseInfoDto> matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(legalUnitCodes, areaCode, openBizType);
// 未匹配到法定机构时,返回指定的默认的法定机构
if (matchEnterpriseInfos.isEmpty()) {
log.info("按照资质、区域未匹配到法定检验机构");
matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(new ArrayList<>(Arrays.asList(defaultInspectionCode.split(","))), areaCode, openBizType);
}
// 代码严谨判断,如前置调整法定机构单位为注册,返回全部的法定机构和第3方机构
if (matchEnterpriseInfos.isEmpty()) {
log.info("指定的默认的检验机构未匹配到,将返回所有的检验机构包括第三方和法定检验机构,省特检院除外");
matchEnterpriseInfos = tzBaseEnterpriseInfoMapper.getInspectionUnitListByCode(null, null, openBizType);
matchEnterpriseInfos = matchEnterpriseInfos.stream().filter(c -> !provinceInspectionCompanyCode.contains(c.getUseCode())).collect(Collectors.toList());
}
return matchEnterpriseInfos;
}
private String getArea(String record) { private String getArea(String record) {
UseInfo equipUseInfo = useInfoMapper.selectOne(Wrappers.<UseInfo>lambdaQuery().select(UseInfo::getCity,UseInfo::getCounty).eq(UseInfo::getRecord, record)); UseInfo equipUseInfo = useInfoMapper.selectOne(Wrappers.<UseInfo>lambdaQuery().select(UseInfo::getCity, UseInfo::getCounty).eq(UseInfo::getRecord, record));
if (equipUseInfo == null) { if (equipUseInfo == null) {
return ""; return "";
} }
......
...@@ -12,6 +12,7 @@ import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationMode ...@@ -12,6 +12,7 @@ import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationMode
import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionApplicationPushEvent; import com.yeejoin.amos.boot.module.jyjc.biz.event.InspectionApplicationPushEvent;
import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher; import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.impl.JyjcInspectionApplicationServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -188,6 +189,21 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -188,6 +189,21 @@ public class JyjcInspectionApplicationController extends BaseController {
} }
/** /**
* 不予受理接口(监督检验、定(首)检、检测)-通用
*
* @param params params
* @return {@link }
* @author shg
* @date 2023/12/15 13:44
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "不予受理", notes = "不予受理")
@PostMapping(value = "/flow/noAccept")
public ResponseModel<Boolean> doNoAcceptFlow(@RequestBody Map<String, Object> params) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.doNoAccept(params));
}
/**
* 撤回接口(监督检验、定(首)检、检测)-通用 * 撤回接口(监督检验、定(首)检、检测)-通用
* *
* @param sequenceNbr sequenceNbr * @param sequenceNbr sequenceNbr
...@@ -238,4 +254,16 @@ public class JyjcInspectionApplicationController extends BaseController { ...@@ -238,4 +254,16 @@ public class JyjcInspectionApplicationController extends BaseController {
JSONObject jsonObject = new JSONObject(map); JSONObject jsonObject = new JSONObject(map);
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForEquipmentRegisterPage(jsonObject)); return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.queryForEquipmentRegisterPage(jsonObject));
} }
/**
* 查询检验检测机构列表(基本信息及联系人)-工作台专用
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/workbench/getInspectionUnitList")
@ApiOperation(httpMethod = "GET", value = "查询检验检测机构列表,不包括省院", notes = "查询检验检测机构列表,不包括省院")
public ResponseModel<List<TzBaseEnterpriseInfoDto>> getInspectionUnitListForWorkbench(@RequestParam String openBizType) {
return ResponseHelper.buildResponse(jyjcInspectionApplicationServiceImpl.getInspectionUnitListForWorkbench(openBizType));
}
} }
...@@ -204,7 +204,7 @@ public class InspectionApplicationPushEventListener implements ApplicationListen ...@@ -204,7 +204,7 @@ public class InspectionApplicationPushEventListener implements ApplicationListen
equipData.setTechParams(this.populateEquipInfoWithTechParams(equipData.getEquList(), equipUnicode)); equipData.setTechParams(this.populateEquipInfoWithTechParams(equipData.getEquList(), equipUnicode));
} }
private Map<String, Object> populateEquipInfoWithTechParams(String equList, String record) { public Map<String, Object> populateEquipInfoWithTechParams(String equList, String record) {
EquipCategoryEnum productType = EquipCategoryEnum.of(Integer.parseInt(equList)); EquipCategoryEnum productType = EquipCategoryEnum.of(Integer.parseInt(equList));
Map<String, Object> echParamMap = new HashMap<>(); Map<String, Object> echParamMap = new HashMap<>();
switch (Objects.requireNonNull(productType)) { switch (Objects.requireNonNull(productType)) {
......
package com.yeejoin.amos.boot.module.jyjc.biz.listener; package com.yeejoin.amos.boot.module.jyjc.biz.listener;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils; import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationNoAcceptLog;
import com.yeejoin.amos.boot.module.jyjc.api.enums.JYJCTypeEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.JYJCTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.RequestTypeEnum;
import com.yeejoin.amos.boot.module.jyjc.api.enums.TopicEnum; import com.yeejoin.amos.boot.module.jyjc.api.enums.TopicEnum;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationNoAcceptLogMapper;
import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionEquipInfoModel; import com.yeejoin.amos.boot.module.jyjc.api.model.InspectionEquipInfoModel;
import com.yeejoin.amos.boot.module.jyjc.biz.event.listener.InspectionApplicationPushEventListener;
import com.yeejoin.amos.boot.module.jyjc.biz.listener.message.BizMessage; import com.yeejoin.amos.boot.module.jyjc.biz.listener.message.BizMessage;
import com.yeejoin.amos.boot.module.jyjc.biz.rule.InspectionEquipInfo; import com.yeejoin.amos.boot.module.jyjc.biz.rule.InspectionEquipInfo;
import com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.RegistrationInfo;
...@@ -14,6 +20,7 @@ import com.yeejoin.amos.component.rule.RuleTrigger; ...@@ -14,6 +20,7 @@ import com.yeejoin.amos.component.rule.RuleTrigger;
import com.yeejoin.amos.feign.rule.Rule; import com.yeejoin.amos.feign.rule.Rule;
import com.yeejoin.amos.feign.rule.model.FactBaseModel; import com.yeejoin.amos.feign.rule.model.FactBaseModel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -27,6 +34,7 @@ import java.nio.charset.StandardCharsets; ...@@ -27,6 +34,7 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
...@@ -54,9 +62,20 @@ public class InspectionOrgRefreshListener extends EmqxListener { ...@@ -54,9 +62,20 @@ public class InspectionOrgRefreshListener extends EmqxListener {
@Autowired @Autowired
private RegistrationInfoMapper registrationInfoMapper; private RegistrationInfoMapper registrationInfoMapper;
@Autowired
private JyjcInspectionApplicationNoAcceptLogMapper inspectionApplicationNoAcceptLogMapper;
@Autowired
InspectionApplicationPushEventListener applicationPushEventListener;
@Value("${spring.application.name}") @Value("${spring.application.name}")
private String applicationName; private String applicationName;
@Autowired
Sequence sequence;
@Autowired
private static final int repeatTime = 2; private static final int repeatTime = 2;
@Autowired @Autowired
...@@ -99,7 +118,6 @@ public class InspectionOrgRefreshListener extends EmqxListener { ...@@ -99,7 +118,6 @@ public class InspectionOrgRefreshListener extends EmqxListener {
private void processBizMessage(BizMessage bizMessage) { private void processBizMessage(BizMessage bizMessage) {
byte[] payload = bizMessage.getMessage().getPayload(); byte[] payload = bizMessage.getMessage().getPayload();
InspectionEquipInfoModel equipInfoModel = parseObject(new String(payload, StandardCharsets.UTF_8), InspectionEquipInfoModel.class); InspectionEquipInfoModel equipInfoModel = parseObject(new String(payload, StandardCharsets.UTF_8), InspectionEquipInfoModel.class);
RegistrationInfo registrationInfo = fetchRegistrationInfo(equipInfoModel.getRecord()); RegistrationInfo registrationInfo = fetchRegistrationInfo(equipInfoModel.getRecord());
InspectionEquipInfo inspectionEquipInfo = new InspectionEquipInfo(); InspectionEquipInfo inspectionEquipInfo = new InspectionEquipInfo();
...@@ -114,9 +132,39 @@ public class InspectionOrgRefreshListener extends EmqxListener { ...@@ -114,9 +132,39 @@ public class InspectionOrgRefreshListener extends EmqxListener {
inspectionEquipInfo.setInspectionType(equipInfoModel.getInspectionType()); inspectionEquipInfo.setInspectionType(equipInfoModel.getInspectionType());
inspectionEquipInfo.setRecord(equipInfoModel.getRecord()); inspectionEquipInfo.setRecord(equipInfoModel.getRecord());
inspectionEquipInfo.setBizType(getCategoryByType(JYJCTypeEnum.of(inspectionEquipInfo.getInspectionType()))); inspectionEquipInfo.setBizType(getCategoryByType(JYJCTypeEnum.of(inspectionEquipInfo.getInspectionType())));
inspectionEquipInfo.setUuid(sequence.nextId() + "");
inspectionEquipInfo.setRequestType(this.buildRequestType(equipInfoModel));
inspectionEquipInfo.setTechParams(this.getTechParams(registrationInfo));
touchRuleWithApi(inspectionEquipInfo); touchRuleWithApi(inspectionEquipInfo);
} }
private Map<String, Object> getTechParams(RegistrationInfo registrationInfo) {
return applicationPushEventListener.populateEquipInfoWithTechParams(registrationInfo.getEquList(), registrationInfo.getRecord());
}
private String buildRequestType(InspectionEquipInfoModel equipInfoModel) {
// 工作台发起申请
if (StringUtils.isEmpty(equipInfoModel.getAppSeq())) {
return RequestTypeEnum.FIRST_REQUEST.getCode();
}
JyjcInspectionApplicationNoAcceptLog jyjcInspectionApplicationNoAcceptLog = getLastNoAcceptLog(equipInfoModel);
// 没有不予受理请求记录
if (jyjcInspectionApplicationNoAcceptLog == null) {
return RequestTypeEnum.FIRST_REQUEST.getCode();
}
// 有记录
return RequestTypeEnum.NO_ACCEPT_REQUEST.getCode();
}
private JyjcInspectionApplicationNoAcceptLog getLastNoAcceptLog(InspectionEquipInfoModel equipInfoModel) {
LambdaQueryWrapper<JyjcInspectionApplicationNoAcceptLog> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(JyjcInspectionApplicationNoAcceptLog::getApplicationSeq, equipInfoModel.getAppSeq());
wrapper.orderByDesc(JyjcInspectionApplicationNoAcceptLog::getNoAcceptDate);
wrapper.last("limit 1");
wrapper.select(JyjcInspectionApplicationNoAcceptLog::getApplicationSeq, JyjcInspectionApplicationNoAcceptLog::getInspectionUnitCode);
return inspectionApplicationNoAcceptLogMapper.selectOne(wrapper);
}
private RegistrationInfo fetchRegistrationInfo(String record) { private RegistrationInfo fetchRegistrationInfo(String record) {
return registrationInfoMapper.selectOne( return registrationInfoMapper.selectOne(
Wrappers.<RegistrationInfo>lambdaQuery().select(RegistrationInfo::getRecord, RegistrationInfo::getEquCategory, Wrappers.<RegistrationInfo>lambdaQuery().select(RegistrationInfo::getRecord, RegistrationInfo::getEquCategory,
......
...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.rule; ...@@ -3,6 +3,7 @@ package com.yeejoin.amos.boot.module.jyjc.biz.rule;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Map; import java.util.Map;
...@@ -40,4 +41,14 @@ public class InspectionEquipInfo implements Serializable { ...@@ -40,4 +41,14 @@ public class InspectionEquipInfo implements Serializable {
@ApiModelProperty(value = "检验类型(小类)") @ApiModelProperty(value = "检验类型(小类)")
private String inspectionType; private String inspectionType;
@ApiModelProperty(value = "请求类型:firstRequest-首次的提交,noAcceptRequest-不予受理的提交")
private String requestType;
@ApiModelProperty(value = "消息唯一标识用来判断消息重复")
private String uuid;
@ApiModelProperty(value = "最近不受理检验机构code")
private String lastNoAcceptInspectionCode;
} }
package com.yeejoin.amos.boot.module.jyjc.biz.service.impl;
import com.yeejoin.amos.boot.module.jyjc.api.entity.JyjcInspectionApplicationNoAcceptLog;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionApplicationNoAcceptLogMapper;
import com.yeejoin.amos.boot.module.jyjc.api.service.IJyjcInspectionApplicationNoAcceptLogService;
import com.yeejoin.amos.boot.module.jyjc.api.model.JyjcInspectionApplicationNoAcceptLogModel;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
/**
* 服务实现类
*
* @author system_generator
* @date 2024-06-19
*/
@Service
public class JyjcInspectionApplicationNoAcceptLogServiceImpl extends BaseService<JyjcInspectionApplicationNoAcceptLogModel,JyjcInspectionApplicationNoAcceptLog,JyjcInspectionApplicationNoAcceptLogMapper> implements IJyjcInspectionApplicationNoAcceptLogService {
/**
* 分页查询
*/
public Page<JyjcInspectionApplicationNoAcceptLogModel> queryForJyjcInspectionApplicationNoAcceptLogPage(Page<JyjcInspectionApplicationNoAcceptLogModel> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<JyjcInspectionApplicationNoAcceptLogModel> queryForJyjcInspectionApplicationNoAcceptLogList() {
return this.queryForList("" , false);
}
}
\ No newline at end of file
...@@ -30,6 +30,7 @@ import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher; ...@@ -30,6 +30,7 @@ import com.yeejoin.amos.boot.module.jyjc.biz.event.publisher.EventPublisher;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.JgFeignClient; import com.yeejoin.amos.boot.module.jyjc.biz.feign.JgFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.feign.TzsServiceFeignClient; import com.yeejoin.amos.boot.module.jyjc.biz.feign.TzsServiceFeignClient;
import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl; import com.yeejoin.amos.boot.module.jyjc.biz.service.TaskModelServiceImpl;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto;
import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo; import com.yeejoin.amos.boot.module.ymt.api.entity.IdxBizJgUseInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.ApplicationFormTypeEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum; import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
...@@ -129,6 +130,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -129,6 +130,12 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Value("classpath:/json/bizTypeInfo.json") @Value("classpath:/json/bizTypeInfo.json")
private Resource bizTypeInfo; private Resource bizTypeInfo;
/**
* 省特检院公司code
*/
@Value("${province.inspection.company.code:126100004352004822}")
private String provinceInspectionCompanyCode;
@Autowired @Autowired
private JyjcInspectionApplicationEquipMapper jyjcInspectionApplicationEquipMapper; private JyjcInspectionApplicationEquipMapper jyjcInspectionApplicationEquipMapper;
...@@ -159,6 +166,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -159,6 +166,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
@Autowired @Autowired
IdxBizJgUseInfoMapper jgUseInfoMapper; IdxBizJgUseInfoMapper jgUseInfoMapper;
@Autowired
JyjcInspectionApplicationNoAcceptLogServiceImpl noAcceptLogService;
private static final String EQU_STATE = "EQU_STATE"; private static final String EQU_STATE = "EQU_STATE";
private static final String EQU_CODE = "EQU_CODE"; private static final String EQU_CODE = "EQU_CODE";
...@@ -834,6 +844,86 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -834,6 +844,86 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
} }
@Transactional(rollbackFor = Exception.class)
public Boolean doNoAccept(Map<String, Object> params) {
String instanceId = params.get("instanceId").toString();
String nextTaskId = params.get("nextTaskId").toString();
String lockKey = CommonServiceImpl.buildJcExecuteLockKey(instanceId);
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(0, 180, TimeUnit.SECONDS);
// 解决并发问题:多个人同时操作一个流程(并发执行通过、驳回、撤回)
if (!isLocked) {
throw new BadRequest("当前流程已经被执行!请重新打开页面查看并执行!");
}
// 流程执行时,状态及权限校验
commonService.checkForExecuteFlow(nextTaskId, instanceId);
Long sequenceNbr = Long.parseLong(params.get("sequenceNbr") + "");
JyjcInspectionApplicationModel model = this.queryBySeq(sequenceNbr);
ArrayList<String> roleListAll = new ArrayList<>();
ArrayList<String> roleList = new ArrayList<>();
String taskId = model.getNextTaskId();
//组装信息
TaskResultDTO task = new TaskResultDTO();
task.setResultCode("approvalStatus");
task.setTaskId(taskId);
task.setComment(params.getOrDefault("comments", "").toString());
HashMap<String, Object> map = new HashMap<>();
map.put("approvalStatus", "1");
task.setVariable(map);
//执行流程
task.setNextExecuteUserCompanyCode(model.getInspectionUnitCode());
ProcessTaskDTO processTaskDTO = cmWorkflowService.reject(taskId, task);
String nextTaskName = "";
this.buildRoleList(Collections.singletonList(processTaskDTO), roleList, roleListAll);
List<WorkflowResultDto> workflowResultDtos = taskModelService.buildWorkFlowInfo(Collections.singletonList(processTaskDTO));
model.setStatus(String.valueOf(FlowStatusEnum.NO_ACCEPT.getCode()));
model.setStatusName(FlowStatusEnum.NO_ACCEPT.getName());
String processDescription = (String) params.get("comments");
if (StringUtils.isNotBlank(processDescription)) {
model.setProcessDescription(processDescription);
}
String nextUserIds = workflowResultDtos.get(0).getNextExecutorUserIds();
String executorRoleIds = workflowResultDtos.get(0).getExecutorRoleIds();
nextTaskName = workflowResultDtos.get(0).getNextTaskName();
nextTaskId = workflowResultDtos.get(0).getNextTaskId();
model.setNextExecuteIds(String.join(",", roleList));
if (!org.springframework.util.ObjectUtils.isEmpty(model.getWorkflowRole())) {
model.setWorkflowRole(model.getWorkflowRole() + "," + String.join(",", roleList));
} else {
model.setWorkflowRole(String.join(",", roleList));
}
model.setNextTaskId(nextTaskId);
model.setPromoter(RequestContext.getExeUserId());
model.setNextTaskName(nextTaskName);
model.setNextExecuteIds(executorRoleIds);
model.setNextExecuteUserIds(nextUserIds);
createNextTask(model, nextTaskName, nextUserIds);
this.updateWithModel(model);
this.createNoAcceptLog(model);
// 更新流程中的流程数据
commonService.saveExecuteFlowData2Redis(model.getProcessInstanceId(), this.buildInstanceRuntimeData(model));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return true;
}
private void createNoAcceptLog(JyjcInspectionApplicationModel model) {
JyjcInspectionApplicationNoAcceptLogModel noAcceptLogModel = new JyjcInspectionApplicationNoAcceptLogModel();
noAcceptLogModel.setApplicationSeq(model.getSequenceNbr());
noAcceptLogModel.setInspectionUnitCode(model.getInspectionUnitCode());
noAcceptLogModel.setNoAcceptUserId(RequestContext.getExeUserId());
noAcceptLogModel.setRemark(model.getProcessDescription());
noAcceptLogService.createWithModel(noAcceptLogModel);
}
/** /**
* 撤回流程办理单 * 撤回流程办理单
*/ */
...@@ -973,7 +1063,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -973,7 +1063,7 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
TaskModelDto modelDto = new TaskModelDto(); TaskModelDto modelDto = new TaskModelDto();
BeanUtil.copyProperties(taskV2Model, modelDto); BeanUtil.copyProperties(taskV2Model, modelDto);
modelDto.setNextExecuteUser(model.getNextExecuteIds()); modelDto.setNextExecuteUser(model.getNextExecuteIds());
if (model.getStatus().equals(FlowStatusEnum.REJECTED.getCode() + "")) { if (model.getStatus().equals(FlowStatusEnum.REJECTED.getCode() + "") || model.getStatus().equals(FlowStatusEnum.NO_ACCEPT.getCode() + "")) {
modelDto.setPageType("edit"); modelDto.setPageType("edit");
} }
TaskMessageDto obj = new TaskMessageDto(); TaskMessageDto obj = new TaskMessageDto();
...@@ -1254,4 +1344,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec ...@@ -1254,4 +1344,9 @@ public class JyjcInspectionApplicationServiceImpl extends BaseService<JyjcInspec
queryWrapper.lambda().in(IdxBizJgUseInfo::getRecord, equIds); queryWrapper.lambda().in(IdxBizJgUseInfo::getRecord, equIds);
return jgUseInfoMapper.selectList(queryWrapper); return jgUseInfoMapper.selectList(queryWrapper);
} }
public List<TzBaseEnterpriseInfoDto> getInspectionUnitListForWorkbench(String openBizType) {
List<TzBaseEnterpriseInfoDto> enterpriseInfoDtos = commonService.getInspectionUnitList(openBizType);
return enterpriseInfoDtos.stream().filter(e -> !provinceInspectionCompanyCode.contains(e.getUseCode())).collect(Collectors.toList());
}
} }
\ No newline at end of file
...@@ -37,8 +37,8 @@ spring.security.user.name=admin ...@@ -37,8 +37,8 @@ spring.security.user.name=admin
spring.security.user.password=a1234560 spring.security.user.password=a1234560
spring.security.user.roles=SBA_ADMIN spring.security.user.roles=SBA_ADMIN
amos.system.user.user-name=robot_admin amos.system.user.user-name=tzs_shg
amos.system.user.password=a1234567 amos.system.user.password=a1234560
amos.system.user.app-key=AMOS_STUDIO amos.system.user.app-key=AMOS_STUDIO
amos.system.user.product=AMOS_STUDIO_WEB amos.system.user.product=AMOS_STUDIO_WEB
......
...@@ -43,7 +43,12 @@ public enum FlowStatusEnum { ...@@ -43,7 +43,12 @@ public enum FlowStatusEnum {
/** /**
* 已作废 * 已作废
*/ */
TO_BE_DISCARD(6617, "已作废"); TO_BE_DISCARD(6617, "已作废"),
/**
* 不予受理
*/
NO_ACCEPT(6618, "不予受理");
private final int code; private final int code;
......
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