diff --git a/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java b/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java index b37cf0f34..dbe5db069 100644 --- a/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java +++ b/src/main/java/com/glxp/api/entity/basic/UdiRelevanceEntity.java @@ -305,4 +305,10 @@ public class UdiRelevanceEntity { private Integer useMaxLevel; + /** + * 拆包后可用时长(小时) + */ + @TableField(value = "unpackUseTime") + private Integer unpackUseTime; + } diff --git a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeAuto.java b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeAuto.java index 933a8db0e..f38d14f15 100644 --- a/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeAuto.java +++ b/src/main/java/com/glxp/api/entity/collect/IoCollectOrderCodeAuto.java @@ -27,14 +27,14 @@ import lombok.NoArgsConstructor; public class IoCollectOrderCodeAuto implements Serializable { @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value = "") - private Integer id; + private Long id; /** * 拆零表码ID */ @TableField(value = "codeIdFk") @ApiModelProperty(value = "拆零表码ID") - private Integer codeIdFk; + private Long codeIdFk; /** * udi码、追溯码 diff --git a/src/main/java/com/glxp/api/entity/inout/IoSplitCodeEntity.java b/src/main/java/com/glxp/api/entity/inout/IoSplitCodeEntity.java index 3b9f2a6bb..aec43813e 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoSplitCodeEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoSplitCodeEntity.java @@ -27,7 +27,7 @@ import lombok.NoArgsConstructor; public class IoSplitCodeEntity implements Serializable { @TableId(value = "id", type = IdType.INPUT) @ApiModelProperty(value = "") - private Integer id; + private Long id; /** * UDI码 @@ -176,6 +176,20 @@ public class IoSplitCodeEntity implements Serializable { @ApiModelProperty(value = "创建日期") private Date createTime; + /** + * 拆包日期 + */ + @TableField(value = "unpackTime") + @ApiModelProperty(value = "拆包日期") + private Date unpackTime; + + /** + * 拆包失效日期 + */ + @TableField(value = "createTime") + @ApiModelProperty(value = "拆包失效日期") + private Date unpackExpireTime; + /** * 创建人 */ diff --git a/src/main/java/com/glxp/api/entity/inout/IoSplitFifoCodeEntity.java b/src/main/java/com/glxp/api/entity/inout/IoSplitFifoCodeEntity.java index 6c22c81e3..d0664bb2d 100644 --- a/src/main/java/com/glxp/api/entity/inout/IoSplitFifoCodeEntity.java +++ b/src/main/java/com/glxp/api/entity/inout/IoSplitFifoCodeEntity.java @@ -27,7 +27,7 @@ import lombok.NoArgsConstructor; public class IoSplitFifoCodeEntity implements Serializable { @TableId(value = "id", type = IdType.INPUT) @ApiModelProperty(value = "") - private Integer id; + private Long id; /** * UDI码/药品追溯码 diff --git a/src/main/java/com/glxp/api/req/basic/AddProductRequest.java b/src/main/java/com/glxp/api/req/basic/AddProductRequest.java index d5aeeaba8..69606537d 100644 --- a/src/main/java/com/glxp/api/req/basic/AddProductRequest.java +++ b/src/main/java/com/glxp/api/req/basic/AddProductRequest.java @@ -241,6 +241,13 @@ public class AddProductRequest { */ @TableField(value = "medicareType") private Integer medicareType; + + /** + * 拆包后可用时长(小时) + */ + @TableField(value = "unpackUseTime") + private Integer unpackUseTime; + private Integer majorStatus; /** diff --git a/src/main/java/com/glxp/api/res/basic/UdiRelevanceResponse.java b/src/main/java/com/glxp/api/res/basic/UdiRelevanceResponse.java index e766d999e..dff673ab6 100644 --- a/src/main/java/com/glxp/api/res/basic/UdiRelevanceResponse.java +++ b/src/main/java/com/glxp/api/res/basic/UdiRelevanceResponse.java @@ -322,4 +322,12 @@ public class UdiRelevanceResponse { private Integer distributeLevel; private Integer useLevel; + + + /** + * 拆包后可用时长(小时) + */ + @TableField(value = "unpackUseTime") + private Integer unpackUseTime; + } diff --git a/src/main/java/com/glxp/api/service/basic/UdiProductService.java b/src/main/java/com/glxp/api/service/basic/UdiProductService.java index 2aca941fc..bded86f20 100644 --- a/src/main/java/com/glxp/api/service/basic/UdiProductService.java +++ b/src/main/java/com/glxp/api/service/basic/UdiProductService.java @@ -327,6 +327,7 @@ public class UdiProductService extends ServiceImpl filterList(IoSplitCodeRequest splitCodeRequest) { if (splitCodeRequest == null) { @@ -235,7 +246,7 @@ public class IoSplitCodeService extends ServiceImpl removeIds = new ArrayList<>(); + List removeIds = new ArrayList<>(); for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { // UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderBiz.getRelId()); FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); @@ -275,6 +286,7 @@ public class IoSplitCodeService extends ServiceImpl addSplitCodeEntities = new ArrayList<>(); - List removeIds = new ArrayList<>(); + List removeIds = new ArrayList<>(); for (IoSplitFifoCodeEntity splitFifoCodeEntity : splitFifoCodeEntities) { IoSplitCodeEntity splitCodeEntity = new IoSplitCodeEntity(); BeanUtils.copyProperties(splitFifoCodeEntity, splitCodeEntity); @@ -429,6 +441,7 @@ public class IoSplitCodeService extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + Date now = new Date(); + lqw.lt(IoSplitCodeEntity::getUnpackExpireTime,now); + + List ioSplitCodeEntities = splitCodeMapper.selectList(lqw); + if (CollUtil.isNotEmpty(ioSplitCodeEntities)){ + //进行损耗出库 + IoSplitDesOrder collectOrder; + List splitDesOrderDetails = new ArrayList<>(); + List removeByIds = new ArrayList<>(); + collectOrder = IoSplitDesOrder.builder() + .id(IdUtil.getSnowflakeNextId()) + .billNo(gennerOrderUtils.createWdOrderNo(new OrderNoTypeBean(Constant.SPLIT_DES_ORDER, "yyyyMMdd"))) + .busType(null) + .workPlaceCode(null) + .createTime(new Date()) + .billTime(new Date()) + .remark(null) + .status(2) + .createUser("1") + .updateTime(new Date()) + .updateUser("1") + .build(); + splitDesOrderService.save(collectOrder); + + ioSplitCodeEntities.forEach( splitCodeEntity -> { + //损耗详细表 + IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder() + .id(IdUtil.getSnowflakeNextId()) + .workPlaceCode(collectOrder.getWorkPlaceCode()) + .orderIdFk(collectOrder.getBillNo()) + .relId(splitCodeEntity.getRelId()) + .batchNo(splitCodeEntity.getBatchNo()) + .produceDate(splitCodeEntity.getProduceDate()) + .expireDate(splitCodeEntity.getExpireDate()) + .supId(splitCodeEntity.getSupId()) + .count(splitCodeEntity.getRemainCount()) + .reCount(splitCodeEntity.getRemainCount()) + .createTime(new Date()) + .updateTime(new Date()) + .remark("").build(); + splitDesOrderDetails.add(splitDesOrderDetail); + removeByIds.add(splitCodeEntity.getId()); + }); + + if (removeByIds.size() > 0) { + this.removeByIds(removeByIds); + } + if (splitDesOrderDetails.size() > 0) { + splitDesOrderDetailService.saveBatch(splitDesOrderDetails); + } + } + } } diff --git a/src/main/java/com/glxp/api/task/AsyncUnpackExpireTask.java b/src/main/java/com/glxp/api/task/AsyncUnpackExpireTask.java new file mode 100644 index 000000000..24b4a0948 --- /dev/null +++ b/src/main/java/com/glxp/api/task/AsyncUnpackExpireTask.java @@ -0,0 +1,52 @@ +package com.glxp.api.task; + +import com.glxp.api.dao.schedule.ScheduledDao; +import com.glxp.api.entity.system.ScheduledEntity; +import com.glxp.api.idc.service.IdcService; +import com.glxp.api.req.system.ScheduledRequest; +import com.glxp.api.service.inout.IoSplitCodeService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; + +import javax.annotation.Resource; + +// +//@Component +//@EnableScheduling +public class AsyncUnpackExpireTask implements SchedulingConfigurer { + + final Logger logger = LoggerFactory.getLogger(AsyncUnpackExpireTask.class); + + @Resource + private ScheduledDao scheduledDao; + + @Resource + IoSplitCodeService splitCodeService; + + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + scheduledTaskRegistrar.addTriggerTask(() -> process(), + triggerContext -> { + ScheduledRequest scheduledRequest = new ScheduledRequest(); + scheduledRequest.setCronName("asyncUnpackExpireTask"); + logger.info("asyncUnpackExpireTask----------------"); + ScheduledEntity scheduledEntity = scheduledDao.findScheduled(scheduledRequest); + String cron = scheduledEntity!=null ? scheduledEntity.getCron() : "0 */2 * * * ?"; + + if (cron.isEmpty()) { + logger.error("cron is null"); + } + logger.info("asyncUnpackExpireTask----------------"+cron); + return new CronTrigger(cron).nextExecutionTime(triggerContext); + }); + } + + private void process() { + logger.info("asyncUnpackExpireTask----process------------"); + splitCodeService.asyncUnpackExpireTask(); + } + +}