feat: 拆包失效进行损耗出库

dev_no_inv
chenhc 9 months ago
parent 6f92047212
commit 7d4811ebb3

@ -305,4 +305,10 @@ public class UdiRelevanceEntity {
private Integer useMaxLevel; private Integer useMaxLevel;
/**
* ()
*/
@TableField(value = "unpackUseTime")
private Integer unpackUseTime;
} }

@ -27,14 +27,14 @@ import lombok.NoArgsConstructor;
public class IoCollectOrderCodeAuto implements Serializable { public class IoCollectOrderCodeAuto implements Serializable {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value = "") @ApiModelProperty(value = "")
private Integer id; private Long id;
/** /**
* ID * ID
*/ */
@TableField(value = "codeIdFk") @TableField(value = "codeIdFk")
@ApiModelProperty(value = "拆零表码ID") @ApiModelProperty(value = "拆零表码ID")
private Integer codeIdFk; private Long codeIdFk;
/** /**
* udi * udi

@ -27,7 +27,7 @@ import lombok.NoArgsConstructor;
public class IoSplitCodeEntity implements Serializable { public class IoSplitCodeEntity implements Serializable {
@TableId(value = "id", type = IdType.INPUT) @TableId(value = "id", type = IdType.INPUT)
@ApiModelProperty(value = "") @ApiModelProperty(value = "")
private Integer id; private Long id;
/** /**
* UDI * UDI
@ -176,6 +176,20 @@ public class IoSplitCodeEntity implements Serializable {
@ApiModelProperty(value = "创建日期") @ApiModelProperty(value = "创建日期")
private Date createTime; private Date createTime;
/**
*
*/
@TableField(value = "unpackTime")
@ApiModelProperty(value = "拆包日期")
private Date unpackTime;
/**
*
*/
@TableField(value = "createTime")
@ApiModelProperty(value = "拆包失效日期")
private Date unpackExpireTime;
/** /**
* *
*/ */

@ -27,7 +27,7 @@ import lombok.NoArgsConstructor;
public class IoSplitFifoCodeEntity implements Serializable { public class IoSplitFifoCodeEntity implements Serializable {
@TableId(value = "id", type = IdType.INPUT) @TableId(value = "id", type = IdType.INPUT)
@ApiModelProperty(value = "") @ApiModelProperty(value = "")
private Integer id; private Long id;
/** /**
* UDI/ * UDI/

@ -241,6 +241,13 @@ public class AddProductRequest {
*/ */
@TableField(value = "medicareType") @TableField(value = "medicareType")
private Integer medicareType; private Integer medicareType;
/**
* ()
*/
@TableField(value = "unpackUseTime")
private Integer unpackUseTime;
private Integer majorStatus; private Integer majorStatus;
/** /**

@ -322,4 +322,12 @@ public class UdiRelevanceResponse {
private Integer distributeLevel; private Integer distributeLevel;
private Integer useLevel; private Integer useLevel;
/**
* ()
*/
@TableField(value = "unpackUseTime")
private Integer unpackUseTime;
} }

@ -327,6 +327,7 @@ public class UdiProductService extends ServiceImpl<UdiProductDao, UdiProductEnti
udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode()); udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode());
udiRelevanceEntity.setUseMaxLevel(addProductRequest.getUseMaxLevel()); udiRelevanceEntity.setUseMaxLevel(addProductRequest.getUseMaxLevel());
udiRelevanceEntity.setDistributeMaxLevel(addProductRequest.getDistributeMaxLevel()); udiRelevanceEntity.setDistributeMaxLevel(addProductRequest.getDistributeMaxLevel());
udiRelevanceEntity.setUnpackUseTime(addProductRequest.getUnpackUseTime());
udiRelevanceDao.updateById(udiRelevanceEntity); udiRelevanceDao.updateById(udiRelevanceEntity);
updateLevelCount(udiRelevanceEntity); updateLevelCount(udiRelevanceEntity);
} else { } else {
@ -343,6 +344,7 @@ public class UdiProductService extends ServiceImpl<UdiProductDao, UdiProductEnti
udiRelevanceEntity.setAttributeType(addProductRequest.getAttributeType()); udiRelevanceEntity.setAttributeType(addProductRequest.getAttributeType());
udiRelevanceEntity.setHcType(addProductRequest.getHcType()); udiRelevanceEntity.setHcType(addProductRequest.getHcType());
udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode()); udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode());
udiRelevanceEntity.setUnpackUseTime(addProductRequest.getUnpackUseTime());
// if (addProductRequest.getDistributeLevelDi() != null) { // if (addProductRequest.getDistributeLevelDi() != null) {
// udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi()); // udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi());
// } // }

@ -258,7 +258,8 @@ public class IoSplitDesOrderService extends ServiceImpl<IoSplitDesOrderMapper, I
splitFifoCodeEntity.setTotalCount(splitFifoCodeEntity.getTotalCount() - addInvDesDetaiRequest.getOutCount()); splitFifoCodeEntity.setTotalCount(splitFifoCodeEntity.getTotalCount() - addInvDesDetaiRequest.getOutCount());
//是否在增加一个码字段 记录可用数量 //是否在增加一个码字段 记录可用数量
splitFifoCodeEntity.setUpdateTime(new Date()); splitFifoCodeEntity.setUpdateTime(new Date());
boolean b = splitFifoCodeService.updateById(splitFifoCodeEntity); // boolean b = splitFifoCodeService.updateById(splitFifoCodeEntity);
boolean b = splitFifoCodeService.removeById(splitFifoCodeEntity);
if (!b) { if (!b) {
return false; return false;
} }
@ -343,7 +344,8 @@ public class IoSplitDesOrderService extends ServiceImpl<IoSplitDesOrderMapper, I
count = 0; count = 0;
} }
splitCodeEntity.setRemainCount(count); splitCodeEntity.setRemainCount(count);
splitCodeService.updateById(splitCodeEntity); // splitCodeService.updateById(splitCodeEntity);
splitCodeService.removeById(splitCodeEntity);
//损耗详细表 //损耗详细表
IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder() IoSplitDesOrderDetail splitDesOrderDetail = IoSplitDesOrderDetail.builder()
.id(IdUtil.getSnowflakeNextId()) .id(IdUtil.getSnowflakeNextId())

@ -1,10 +1,12 @@
package com.glxp.api.service.inout; package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.glxp.api.constant.Constant;
import com.glxp.api.dao.inout.IoSplitCodeMapper; import com.glxp.api.dao.inout.IoSplitCodeMapper;
import com.glxp.api.entity.basic.SysWorkplacePutRel; import com.glxp.api.entity.basic.SysWorkplacePutRel;
import com.glxp.api.entity.basic.UdiRelevanceEntity; import com.glxp.api.entity.basic.UdiRelevanceEntity;
@ -14,12 +16,15 @@ import com.glxp.api.entity.inout.IoSplitFifoCodeEntity;
import com.glxp.api.entity.inout.IoSplitFifoInv; import com.glxp.api.entity.inout.IoSplitFifoInv;
import com.glxp.api.exception.JsonException; import com.glxp.api.exception.JsonException;
import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.req.basic.FilterUdiRelRequest;
import com.glxp.api.req.collect.AddInvDesDetaiRequest;
import com.glxp.api.req.inout.IoSplitCodeRequest; import com.glxp.api.req.inout.IoSplitCodeRequest;
import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.collect.*; import com.glxp.api.service.collect.*;
import com.glxp.api.service.thrsys.SysWorkplacePutRelService; import com.glxp.api.service.thrsys.SysWorkplacePutRelService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.IntUtil; import com.glxp.api.util.IntUtil;
import com.glxp.api.util.OrderNoTypeBean;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -39,6 +44,12 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
IoCollectOrderBizService collectOrderBizService; IoCollectOrderBizService collectOrderBizService;
@Resource @Resource
IoCollectOrderCodeAutoService collectOrderCodeAutoService; IoCollectOrderCodeAutoService collectOrderCodeAutoService;
@Resource
IoSplitDesOrderService splitDesOrderService;
@Resource
IoSplitDesOrderDetailService splitDesOrderDetailService;
@Resource
GennerOrderUtils gennerOrderUtils;
public List<IoSplitCodeEntity> filterList(IoSplitCodeRequest splitCodeRequest) { public List<IoSplitCodeEntity> filterList(IoSplitCodeRequest splitCodeRequest) {
if (splitCodeRequest == null) { if (splitCodeRequest == null) {
@ -235,7 +246,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
} }
} }
List<Integer> removeIds = new ArrayList<>(); List<Long> removeIds = new ArrayList<>();
for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) { for (IoCollectOrderBiz collectOrderBiz : collectOrderBizs) {
// UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderBiz.getRelId()); // UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderBiz.getRelId());
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest(); FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
@ -275,6 +286,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
.fifoSplit(1) .fifoSplit(1)
.createTime(new Date()).updateTime(new Date()) .createTime(new Date()).updateTime(new Date())
.remainCount(-unTagCount).build(); .remainCount(-unTagCount).build();
this.decorateUnpackExpireTime(ioSplitCodeEntity);
splitCodeService.save(ioSplitCodeEntity); splitCodeService.save(ioSplitCodeEntity);
} }
@ -418,7 +430,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
); );
Integer count = 0; Integer count = 0;
List<IoSplitCodeEntity> addSplitCodeEntities = new ArrayList<>(); List<IoSplitCodeEntity> addSplitCodeEntities = new ArrayList<>();
List<Integer> removeIds = new ArrayList<>(); List<Long> removeIds = new ArrayList<>();
for (IoSplitFifoCodeEntity splitFifoCodeEntity : splitFifoCodeEntities) { for (IoSplitFifoCodeEntity splitFifoCodeEntity : splitFifoCodeEntities) {
IoSplitCodeEntity splitCodeEntity = new IoSplitCodeEntity(); IoSplitCodeEntity splitCodeEntity = new IoSplitCodeEntity();
BeanUtils.copyProperties(splitFifoCodeEntity, splitCodeEntity); BeanUtils.copyProperties(splitFifoCodeEntity, splitCodeEntity);
@ -429,6 +441,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
splitCodeEntity.setStatus(1); splitCodeEntity.setStatus(1);
splitCodeEntity.setFifoSplit(splitFifoCodeEntity.getFifoSplit()); splitCodeEntity.setFifoSplit(splitFifoCodeEntity.getFifoSplit());
splitCodeEntity.setId(null); splitCodeEntity.setId(null);
this.decorateUnpackExpireTime(splitCodeEntity);
addSplitCodeEntities.add(splitCodeEntity); addSplitCodeEntities.add(splitCodeEntity);
removeIds.add(splitFifoCodeEntity.getId()); removeIds.add(splitFifoCodeEntity.getId());
IoSplitFifoInv splitFifoInv = splitFifoInvService.findByFifoCode(splitFifoCodeEntity); IoSplitFifoInv splitFifoInv = splitFifoInvService.findByFifoCode(splitFifoCodeEntity);
@ -488,4 +501,77 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
} }
//包装拆包失效时间
void decorateUnpackExpireTime(IoSplitCodeEntity ioSplitCodeEntity){
Long relId = ioSplitCodeEntity.getRelId();
UdiRelevanceEntity relevanceEntity = udiRelevanceService.getById(relId);
int n = IntUtil.value(relevanceEntity.getUnpackUseTime());
// 获取当前时间
Calendar calendar = Calendar.getInstance();
Date unpackTime = calendar.getTime();
// 加上n小时
calendar.add(Calendar.HOUR_OF_DAY, n);
// 转换为Date对象
Date unpackExpireTime = calendar.getTime();
ioSplitCodeEntity.setUnpackTime(unpackTime);
ioSplitCodeEntity.setUnpackExpireTime(unpackExpireTime);
}
/**
*
*/
public void asyncUnpackExpireTask() {
LambdaQueryWrapper<IoSplitCodeEntity> lqw = new LambdaQueryWrapper<>();
Date now = new Date();
lqw.lt(IoSplitCodeEntity::getUnpackExpireTime,now);
List<IoSplitCodeEntity> ioSplitCodeEntities = splitCodeMapper.selectList(lqw);
if (CollUtil.isNotEmpty(ioSplitCodeEntities)){
//进行损耗出库
IoSplitDesOrder collectOrder;
List<IoSplitDesOrderDetail> splitDesOrderDetails = new ArrayList<>();
List<Long> 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);
}
}
}
} }

@ -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();
}
}
Loading…
Cancel
Save