追溯代码备份

cert
anthonywj 2 years ago
parent a2ecdabbe4
commit 6778617902

@ -1,6 +1,8 @@
package com.glxp.api.controller.trace;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.common.enums.ResultEnum;
import com.glxp.api.common.res.BaseResponse;
@ -10,6 +12,7 @@ import com.glxp.api.controller.BaseController;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.sup.UserCompanyEntity;
import com.glxp.api.entity.trace.*;
import com.glxp.api.req.basic.FilterUdiRelRequest;
import com.glxp.api.req.trace.TraceOrderUploadRequest;
import com.glxp.api.req.trace.TraceRecordRequest;
import com.glxp.api.res.basic.BasicUdiRelResponse;
@ -36,8 +39,6 @@ import java.util.List;
public class UdiTraceController extends BaseController {
@Resource
TraceRecordService traceRecordService;
@Resource
TraceProductDetailService traceProductDetailService;
@Resource
@ -50,6 +51,10 @@ public class UdiTraceController extends BaseController {
RabbitPushService rabbitPushService;
@Resource
TraceOrderService traceOrderService;
@Resource
TraceRecordService traceRecordService;
@Resource
UdiTraceService udiTraceService;
/**
@ -61,117 +66,105 @@ public class UdiTraceController extends BaseController {
@AuthRuleAnnotation("udi/trace/source/search")
@GetMapping("udi/trace/source/search")
public BaseResponse createTrace(TraceRecordRequest traceRecordRequest) {
TraceRecordLogEntity traceRecordLogEntity = null;
TraceProductDetailEntity traceProductDetailEntity = null;
BasicUdiRelResponse basicUdiRelResponse = null;
UdiEntity udiEntity = null;
UserCompanyEntity userCompanyEntity = null;
if (traceRecordRequest.getTraceType() == Constant.UDI_TRACE) {
//1.校验UDI码格式
UdiEntity udiEntity = FilterUdiUtils.getUdi(traceRecordRequest.getUdiCode());
udiEntity = FilterUdiUtils.getUdi(traceRecordRequest.getUdiCode());
if (udiEntity == null) {
return ResultVOUtils.error(500, "UDI码格式错误");
}
//2.查询源头企业
UserCompanyEntity userCompanyEntity = basicUdiRelService.findByNameCode(udiEntity.getUdi());
userCompanyEntity = basicUdiRelService.findByNameCode(udiEntity.getUdi());
if (userCompanyEntity == null) {
return ResultVOUtils.error(500, "生产企业未关联该产品信息!");
}
//3.查询产品信息
BasicUdiRelResponse basicUdiRelResponse = basicUdiRelService.findByProductNameCode(traceRecordRequest.getNameCode());
basicUdiRelResponse = basicUdiRelService.findByProductNameCode(udiEntity.getUdi());
if (basicUdiRelResponse == null) {
return ResultVOUtils.error(500, "未查询到产品信息");
}
//4.生成查询记录
String userId = getUserId() + "";
TraceRecordLogEntity traceRecordLogEntity = new TraceRecordLogEntity();
traceRecordLogEntity.setId(IdUtil.getSnowflakeNextId());
traceRecordLogEntity.setRecordCode(gennerOrderUtils.getRecordNo());
traceRecordLogEntity.setCreateTime(new Date());
traceRecordLogEntity.setUpdateTime(new Date());
traceRecordLogEntity.setStatus(1);
traceRecordLogEntity.setCreateUser(userId);
traceRecordLogEntity.setFromType(traceRecordRequest.getFromType());
traceRecordLogEntity.setTraceType(traceRecordRequest.getTraceType());
//4.创建查询详情记录,若存在相同查询记录则直接获取
TraceProductDetailEntity traceProductDetailEntity = null;
if (traceRecordRequest.getTraceType() == 1) {//按UDI码查询
traceProductDetailEntity = traceProductDetailService.findUniqueByCode(1, traceRecordRequest.getUdiCode());
if (traceProductDetailEntity == null) {
traceProductDetailEntity.setId(IdUtil.getSnowflakeNextId());
traceProductDetailEntity.setTraceSource(1);
traceProductDetailEntity.setTraceType(traceRecordRequest.getTraceType());
traceProductDetailEntity.setUdiCode(traceRecordRequest.getUdiCode());
traceProductDetailEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceProductDetailEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceProductDetailEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceProductDetailEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceProductDetailEntity.setNameCode(basicUdiRelResponse.getNameCode());
traceProductDetailEntity.setBatchNo(udiEntity.getBatchNo());
traceProductDetailEntity.setProduceDate(udiEntity.getProduceDate());
traceProductDetailEntity.setExpireDate(udiEntity.getExpireDate());
traceProductDetailEntity.setSerialNo(udiEntity.getSerialNo());
traceProductDetailEntity.setStatus(1);
traceProductDetailService.save(traceProductDetailEntity);
}
} else { //按批次号查询
traceProductDetailEntity = traceProductDetailService.findUniqueByData(1, traceRecordRequest.getYlqxzcrbarmc(),
traceRecordRequest.getCpmctymc(), traceRecordRequest.getGgxh(), traceRecordRequest.getNameCode(), traceRecordRequest.getBatchNo());
traceRecordLogEntity = traceRecordService.getById(traceRecordRequest.getRecordCode());
if (traceRecordLogEntity == null)
traceRecordLogEntity = udiTraceService.createRecordLog(userId, traceRecordRequest.getFromType(), traceRecordRequest.getTraceType());
//5.创建查询详情记录,若存在相同查询记录则直接获取
if (traceRecordLogEntity.getTraceProductIdFk() != null) {
traceProductDetailEntity = traceProductDetailService.getById(traceRecordLogEntity.getTraceProductIdFk());
if (traceProductDetailEntity == null) {
traceProductDetailEntity.setId(IdUtil.getSnowflakeNextId());
traceProductDetailEntity.setTraceSource(1);
traceProductDetailEntity.setTraceType(traceRecordRequest.getTraceType());
traceProductDetailEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceProductDetailEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceProductDetailEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceProductDetailEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceProductDetailEntity.setNameCode(basicUdiRelResponse.getNameCode());
traceProductDetailEntity.setBatchNo(traceRecordRequest.getBatchNo());
traceProductDetailEntity.setStatus(1);
traceProductDetailService.save(traceProductDetailEntity);
traceProductDetailEntity = udiTraceService.createTracerProductByUdiCode(traceRecordRequest.getUdiCode(), 1, 1, basicUdiRelResponse, udiEntity);
traceRecordLogEntity.setTraceProductIdFk(traceProductDetailEntity.getId());
traceRecordService.updateById(traceRecordLogEntity);
}
} else {
traceProductDetailEntity = udiTraceService.createTracerProductByUdiCode(traceRecordRequest.getUdiCode(), 1, 1, basicUdiRelResponse, udiEntity);
}
} else {
//5.创建查询任务表
TraceTaskNoticeEntity traceTaskNoticeEntity = new TraceTaskNoticeEntity();
traceTaskNoticeEntity.setId(IdUtil.getSnowflakeNextId());
traceTaskNoticeEntity.setRecordCode(traceRecordLogEntity.getId());
traceTaskNoticeEntity.setTaskType(1);
traceTaskNoticeEntity.setStatus(1);
traceTaskNoticeEntity.setCompanyIdFk(basicUdiRelResponse.getCompanyIdFk());
traceTaskNoticeEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceTaskNoticeEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceTaskNoticeEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceTaskNoticeEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceTaskNoticeEntity.setBatchNo(udiEntity.getBatchNo());
traceTaskNoticeEntity.setProduceDate(udiEntity.getProduceDate());
traceTaskNoticeEntity.setExpireDate(udiEntity.getExpireDate());
traceTaskNoticeEntity.setSerialNo(udiEntity.getSerialNo());
traceTaskNoticeEntity.setCreateTime(new Date());
List<String> diList = basicUdiRelService.getBaseMapper().findDiList(basicUdiRelResponse.getUuid());
traceTaskNoticeEntity.setDiList(diList);
traceTaskNoticeEntity.setTaskType(1);
traceTaskNoticeService.save(traceTaskNoticeEntity);
//1:校验参数是否正确
if (StrUtil.isEmpty(traceRecordRequest.getYlqxzcrbarmc())) {
return ResultVOUtils.error(500, "医疗器械注册人不能为空!");
}
if (StrUtil.isEmpty(traceRecordRequest.getCpmctymc())) {
return ResultVOUtils.error(500, "产品通用名称不能为空!");
}
if (StrUtil.isEmpty(traceRecordRequest.getGgxh())) {
return ResultVOUtils.error(500, "规格型号不能为空!");
}
//2.查询源头企业
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setYlqxzcrbarmc(traceRecordRequest.getYlqxzcrbarmc());
filterUdiRelRequest.setCpmctymc(traceRecordRequest.getCpmctymc());
filterUdiRelRequest.setGgxh(traceRecordRequest.getGgxh());
userCompanyEntity = basicUdiRelService.findByProduct(filterUdiRelRequest);
if (userCompanyEntity == null) {
return ResultVOUtils.error(500, "生产企业未关联该产品信息!");
}
//3.查询产品信息
basicUdiRelResponse = basicUdiRelService.findByProductName(filterUdiRelRequest);
if (basicUdiRelResponse == null) {
return ResultVOUtils.error(500, "未查询到产品信息");
}
//4.生成查询记录
String userId = getUserId() + "";
traceRecordLogEntity = udiTraceService.createRecordLog(userId, traceRecordRequest.getFromType(), traceRecordRequest.getTraceType());
//5.创建查询详情记录,若存在相同查询记录则直接获取
traceProductDetailEntity = udiTraceService.createTracerProductByBatchNo(traceRecordRequest, 1, 2, basicUdiRelResponse);
}
//5.创建查询任务表
TraceTaskNoticeEntity traceTaskNoticeEntity = udiTraceService.createTraceNotice(1, traceProductDetailEntity, basicUdiRelResponse, udiEntity);
//6.构建MQ推送消息
MqTraceMessage mqTraceMessage = new MqTraceMessage();
mqTraceMessage.setCreateTime(new Date());
mqTraceMessage.setTaskType(1);
mqTraceMessage.setCompanyId(basicUdiRelResponse.getCompanyIdFk());
mqTraceMessage.setCerditNo(userCompanyEntity.getCreditNum());
mqTraceMessage.setTaskId(traceTaskNoticeEntity.getId());
rabbitPushService.send(mqTraceMessage);
return ResultVOUtils.success("创建查询成功,请稍后刷新查看查询结果!");
return ResultVOUtils.success(traceRecordLogEntity);
}
return ResultVOUtils.error(500, "查询失败");
}
/**
*
*

@ -19,5 +19,8 @@ public interface BasicUdiRelMapper extends BaseMapper<BasicUdiRelEntity> {
UserCompanyEntity findByNameCode(@Param("nameCode") String nameCode);
List<String> findDiList(@Param("nameCode") String uuid);
UserCompanyEntity findByProduct(FilterUdiRelRequest filterUdiRelRequest);
List<String> findDiList(@Param("uuid") String uuid);
}

@ -28,7 +28,7 @@ public class MqTraceMessage {
/**
* ID()
*/
private String taskId;
private Long taskId;
}

@ -7,13 +7,14 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import com.glxp.api.annotation.RepeatSubmit;
import lombok.Data;
/**
*
*/
@Data
@TableName(value = "trace_record_detail")
@TableName(value = "trace_product_record")
public class TraceProductDetailEntity implements Serializable {
@TableId(value = "id", type = IdType.INPUT)
private Long id;
@ -96,5 +97,7 @@ public class TraceProductDetailEntity implements Serializable {
@TableField(value = "status")
private Integer status;
private static final long serialVersionUID = 1L;
}

@ -68,6 +68,12 @@ public class TraceRecordLogEntity implements Serializable {
@TableField(value = "traceType")
private Integer traceType;
/**
*
*/
@TableField(value = "traceProductIdFk")
private Long traceProductIdFk;
private static final long serialVersionUID = 1L;
}

@ -37,11 +37,23 @@ public class BasicUdiRelService extends ServiceImpl<BasicUdiRelMapper, BasicUdiR
return basicUdiRelMapper.findByNameCode(nameCode);
}
public UserCompanyEntity findByProduct(FilterUdiRelRequest filterUdiRelRequest) {
return basicUdiRelMapper.findByProduct(filterUdiRelRequest);
}
public BasicUdiRelResponse findByProductNameCode(String namCode) {
if (StrUtil.isEmpty(namCode))
return null;
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
filterUdiRelRequest.setNameCode(namCode);
List<BasicUdiRelResponse> udiRelResponses = basicUdiRelMapper.filterList(filterUdiRelRequest);
if (CollUtil.isNotEmpty(udiRelResponses))
return udiRelResponses.get(0);
return null;
}
public BasicUdiRelResponse findByProductName(FilterUdiRelRequest filterUdiRelRequest) {
List<BasicUdiRelResponse> udiRelResponses = basicUdiRelMapper.filterList(filterUdiRelRequest);
if (CollUtil.isNotEmpty(udiRelResponses))
return udiRelResponses.get(0);

@ -1,12 +1,21 @@
package com.glxp.api.service.trace;
import cn.hutool.core.util.IdUtil;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.sup.UserCompanyEntity;
import com.glxp.api.entity.trace.TraceProductDetailEntity;
import com.glxp.api.entity.trace.TraceRecordLogEntity;
import com.glxp.api.entity.trace.TraceTaskNoticeEntity;
import com.glxp.api.req.trace.TraceRecordRequest;
import com.glxp.api.res.basic.BasicUdiRelResponse;
import com.glxp.api.service.basic.BasicUdiProductService;
import com.glxp.api.service.basic.BasicUdiRelService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.udi.FilterUdiUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Resource
public class UdiTraceService {
@ -16,23 +25,108 @@ public class UdiTraceService {
BasicUdiProductService basicUdiProductService;
@Resource
BasicUdiRelService basicUdiRelService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
TraceOrderService traceOrderService;
@Resource
TraceRecordService traceRecordService;
@Resource
TraceProductDetailService traceProductDetailService;
@Resource
TraceTaskNoticeService traceTaskNoticeService;
//创建查询日志
public TraceRecordLogEntity createRecordLog(String userId, Integer fromType, Integer traceType) {
TraceRecordLogEntity traceRecordLogEntity = new TraceRecordLogEntity();
traceRecordLogEntity.setId(IdUtil.getSnowflakeNextId());
traceRecordLogEntity.setRecordCode(gennerOrderUtils.getRecordNo());
traceRecordLogEntity.setCreateTime(new Date());
traceRecordLogEntity.setUpdateTime(new Date());
traceRecordLogEntity.setStatus(1);
traceRecordLogEntity.setCreateUser(userId);
traceRecordLogEntity.setFromType(fromType);
traceRecordLogEntity.setTraceType(traceType);
traceRecordService.save(traceRecordLogEntity);
return traceRecordLogEntity;
}
//创建追溯产品详情
public TraceProductDetailEntity createTracerProductByUdiCode(String udiCode, Integer traceSource, Integer traceType, BasicUdiRelResponse basicUdiRelResponse, UdiEntity udiEntity) {
TraceProductDetailEntity traceProductDetailEntity = null;
traceProductDetailEntity = traceProductDetailService.findUniqueByCode(1, udiCode);
if (traceProductDetailEntity == null) {
traceProductDetailEntity.setId(IdUtil.getSnowflakeNextId());
traceProductDetailEntity.setTraceSource(traceSource);
traceProductDetailEntity.setTraceType(traceType);
traceProductDetailEntity.setUdiCode(udiCode);
traceProductDetailEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceProductDetailEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceProductDetailEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceProductDetailEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceProductDetailEntity.setNameCode(basicUdiRelResponse.getNameCode());
traceProductDetailEntity.setBatchNo(udiEntity.getBatchNo());
traceProductDetailEntity.setProduceDate(udiEntity.getProduceDate());
traceProductDetailEntity.setExpireDate(udiEntity.getExpireDate());
traceProductDetailEntity.setSerialNo(udiEntity.getSerialNo());
traceProductDetailEntity.setStatus(1);
traceProductDetailService.save(traceProductDetailEntity);
return traceProductDetailEntity;
}
return traceProductDetailEntity;
}
//创建追溯产品详情
public TraceProductDetailEntity createTracerProductByBatchNo(TraceRecordRequest traceRecordRequest, Integer traceSource, Integer traceType, BasicUdiRelResponse basicUdiRelResponse) {
public String vailUdiCode(String udiCode) {
UdiEntity udiEntity = FilterUdiUtils.getUdi(udiCode);
if (udiEntity == null) {
return "UDI码格式错误";
TraceProductDetailEntity traceProductDetailEntity = null;
traceProductDetailEntity = traceProductDetailService.findUniqueByData(1, traceRecordRequest.getYlqxzcrbarmc(),
traceRecordRequest.getCpmctymc(), traceRecordRequest.getGgxh(), traceRecordRequest.getNameCode(), traceRecordRequest.getBatchNo());
if (traceProductDetailEntity == null) {
traceProductDetailEntity.setId(IdUtil.getSnowflakeNextId());
traceProductDetailEntity.setTraceSource(traceSource);
traceProductDetailEntity.setTraceType(traceType);
traceProductDetailEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceProductDetailEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceProductDetailEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceProductDetailEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceProductDetailEntity.setNameCode(basicUdiRelResponse.getNameCode());
traceProductDetailEntity.setBatchNo(traceRecordRequest.getBatchNo());
traceProductDetailEntity.setStatus(1);
traceProductDetailService.save(traceProductDetailEntity);
}
return null;
return traceProductDetailEntity;
}
/**
*
*
* @param udiEntity
*/
public UserCompanyEntity findSourceCompamy(UdiEntity udiEntity) {
String nameCode = udiEntity.getUdi();
UserCompanyEntity userCompanyEntity = basicUdiRelService.findByNameCode(nameCode);
return userCompanyEntity;
//创建任务列表
public void createTraceTask() {
}
//创建任务列表
public TraceTaskNoticeEntity createTraceNotice(Integer taskType, TraceProductDetailEntity traceProductDetailEntity, BasicUdiRelResponse basicUdiRelResponse, UdiEntity udiEntity) {
TraceTaskNoticeEntity traceTaskNoticeEntity = new TraceTaskNoticeEntity();
traceTaskNoticeEntity.setId(IdUtil.getSnowflakeNextId());
traceTaskNoticeEntity.setRecordCode(traceProductDetailEntity.getId());
traceTaskNoticeEntity.setTaskType(taskType);
traceTaskNoticeEntity.setStatus(1);
traceTaskNoticeEntity.setCompanyIdFk(basicUdiRelResponse.getCompanyIdFk());
traceTaskNoticeEntity.setYlqxzcrbarmc(basicUdiRelResponse.getYlqxzcrbarmc());
traceTaskNoticeEntity.setCreditNum(basicUdiRelResponse.getTyshxydm());
traceTaskNoticeEntity.setCpmctymc(basicUdiRelResponse.getCpmctymc());
traceTaskNoticeEntity.setGgxh(basicUdiRelResponse.getGgxh());
traceTaskNoticeEntity.setBatchNo(udiEntity.getBatchNo());
traceTaskNoticeEntity.setProduceDate(udiEntity.getProduceDate());
traceTaskNoticeEntity.setExpireDate(udiEntity.getExpireDate());
traceTaskNoticeEntity.setSerialNo(udiEntity.getSerialNo());
traceTaskNoticeEntity.setCreateTime(new Date());
List<String> diList = basicUdiRelService.getBaseMapper().findDiList(basicUdiRelResponse.getUuid());
traceTaskNoticeEntity.setDiList(diList);
traceTaskNoticeService.save(traceTaskNoticeEntity);
return traceTaskNoticeEntity;
}
}

@ -105,6 +105,19 @@
limit 1
</select>
<select id="findByProduct"
resultType="com.glxp.api.entity.sup.UserCompanyEntity">
select user_company.*
from basic_udi_rel
INNER JOIN basic_udi_product on basic_udi_rel.uuid = basic_udi_product.uuid
INNER JOIN user_company on basic_udi_rel.companyIdFk = user_company.id
where basic_udi_product.ylqxzcrbarmc = #{ylqxzcrbarmc}
and basic_udi_product.cpmctymc = #{cpmctymc}
and basic_udi_product.ggxh = #{ggxh}
limit 1
</select>
<select id="findDiList" parameterType="java.lang.String"
resultType="java.lang.String">
select nameCode

@ -8,7 +8,7 @@
LEFT JOIN user_company uc ON uc.id = tmo.companyIdFk
LEFT JOIN (SELECT tr.recordCode,tr.createUser,tr.remark,trd.batchNo,trd.traceType
FROM trace_record_log tr
LEFT JOIN trace_record_detail trd ON trd.recordIdFk = tr.id) mid ON mid.recordCode = tmo.recordCode
LEFT JOIN trace_product_record trd ON trd.recordIdFk = tr.id) mid ON mid.recordCode = tmo.recordCode
<where>
<if test="recordCode != '' and recordCode != null">
and recordCode = #{recordCode}

@ -9,7 +9,7 @@
LEFT JOIN user_company uc ON uc.id = tor.companyIdFk
LEFT JOIN (SELECT tr.recordCode, trd.*
FROM trace_record_log tr
LEFT JOIN trace_record_detail trd ON trd.recordIdFk = tr.id) trmid
LEFT JOIN trace_product_record trd ON trd.recordIdFk = tr.id) trmid
ON trmid.recordCode = tor.recordCode
<where>
<if test="udiCode != '' and udiCode != null">

@ -5,7 +5,7 @@
resultType="com.glxp.api.res.trace.TraceRecordResponse">
SELECT tr.recordCode, tr.remark, trd.*, mid.*
FROM trace_record_log tr
LEFT JOIN trace_record_detail trd ON trd.recordIdFk = tr.id
LEFT JOIN trace_product_record trd ON trd.recordIdFk = tr.id
LEFT JOIN (SELECT tor.billNo, tor.fromCorp, tor.toCorp, tor.createUser, uc.companyName
FROM trace_order tor
LEFT JOIN user_company uc ON uc.id = tor.companyIdFk) mid

Loading…
Cancel
Save