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

dev_no_inv
chenhc 9 months ago
parent 6f92047212
commit 7d4811ebb3

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

@ -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

@ -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;
/**
*
*/

@ -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/

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

@ -322,4 +322,12 @@ public class UdiRelevanceResponse {
private Integer distributeLevel;
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.setUseMaxLevel(addProductRequest.getUseMaxLevel());
udiRelevanceEntity.setDistributeMaxLevel(addProductRequest.getDistributeMaxLevel());
udiRelevanceEntity.setUnpackUseTime(addProductRequest.getUnpackUseTime());
udiRelevanceDao.updateById(udiRelevanceEntity);
updateLevelCount(udiRelevanceEntity);
} else {
@ -343,6 +344,7 @@ public class UdiProductService extends ServiceImpl<UdiProductDao, UdiProductEnti
udiRelevanceEntity.setAttributeType(addProductRequest.getAttributeType());
udiRelevanceEntity.setHcType(addProductRequest.getHcType());
udiRelevanceEntity.setPayFeeCode(addProductRequest.getPayFeeCode());
udiRelevanceEntity.setUnpackUseTime(addProductRequest.getUnpackUseTime());
// if (addProductRequest.getDistributeLevelDi() != null) {
// udiRelevanceEntity.setDistributeLevelDi(addProductRequest.getDistributeLevelDi());
// }

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

@ -1,10 +1,12 @@
package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.glxp.api.constant.Constant;
import com.glxp.api.dao.inout.IoSplitCodeMapper;
import com.glxp.api.entity.basic.SysWorkplacePutRel;
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.exception.JsonException;
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.res.basic.UdiRelevanceResponse;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.collect.*;
import com.glxp.api.service.thrsys.SysWorkplacePutRelService;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.IntUtil;
import com.glxp.api.util.OrderNoTypeBean;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -39,6 +44,12 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
IoCollectOrderBizService collectOrderBizService;
@Resource
IoCollectOrderCodeAutoService collectOrderCodeAutoService;
@Resource
IoSplitDesOrderService splitDesOrderService;
@Resource
IoSplitDesOrderDetailService splitDesOrderDetailService;
@Resource
GennerOrderUtils gennerOrderUtils;
public List<IoSplitCodeEntity> filterList(IoSplitCodeRequest splitCodeRequest) {
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) {
// UdiRelevanceEntity udiRelevanceEntity = udiRelevanceService.selectById(collectOrderBiz.getRelId());
FilterUdiRelRequest filterUdiRelRequest = new FilterUdiRelRequest();
@ -275,6 +286,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
.fifoSplit(1)
.createTime(new Date()).updateTime(new Date())
.remainCount(-unTagCount).build();
this.decorateUnpackExpireTime(ioSplitCodeEntity);
splitCodeService.save(ioSplitCodeEntity);
}
@ -418,7 +430,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
);
Integer count = 0;
List<IoSplitCodeEntity> addSplitCodeEntities = new ArrayList<>();
List<Integer> removeIds = new ArrayList<>();
List<Long> removeIds = new ArrayList<>();
for (IoSplitFifoCodeEntity splitFifoCodeEntity : splitFifoCodeEntities) {
IoSplitCodeEntity splitCodeEntity = new IoSplitCodeEntity();
BeanUtils.copyProperties(splitFifoCodeEntity, splitCodeEntity);
@ -429,6 +441,7 @@ public class IoSplitCodeService extends ServiceImpl<IoSplitCodeMapper, IoSplitCo
splitCodeEntity.setStatus(1);
splitCodeEntity.setFifoSplit(splitFifoCodeEntity.getFifoSplit());
splitCodeEntity.setId(null);
this.decorateUnpackExpireTime(splitCodeEntity);
addSplitCodeEntities.add(splitCodeEntity);
removeIds.add(splitFifoCodeEntity.getId());
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