单据流程->库存

master
anthonywj 2 years ago
parent 4821fb1ea0
commit 8fe7d604e0

@ -38,9 +38,9 @@ public class BaseController {
return authAdmin.getId();
}
public Long getCustomerId() {
public String getCustomerId() {
AuthAdmin authAdmin = getUser();
return authAdmin.getCustomerId();
return authAdmin.getCustomerId() + "";
}
}

@ -590,7 +590,7 @@ public class IoCodeTempController extends BaseController {
orderEntity.setCreateTime(new Date());
orderEntity.setUpdateUser(authAdmin.getId() + "");
orderEntity.setUpdateTime(new Date());
orderEntity.setCustomerId(authAdmin.getCustomerId());
orderEntity.setCustomerId(authAdmin.getCustomerId() + "");
orderEntity.setDeptCode(invWarehouseEntity.getParentId());
orderEntity.setInvCode(addOrderRequest.getInvCode());
orderService.insertOrder(orderEntity);

@ -0,0 +1,10 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvPreinOrderEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InvPreinDetailDao extends BaseMapperPlus<InvPreinDetailDao, InvPreinDetailEntity, InvPreinDetailEntity> {
}

@ -0,0 +1,9 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreinOrderEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InvPreinOrderDao extends BaseMapperPlus<InvPreinOrderDao, InvPreinOrderEntity, InvPreinOrderEntity> {
}

@ -0,0 +1,10 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvProductEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InvProductDao extends BaseMapperPlus<InvProductDao, InvProductEntity, InvProductEntity> {
}

@ -0,0 +1,10 @@
package com.glxp.api.dao.inv;
import com.glxp.api.dao.BaseMapperPlus;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InvProductDetailDao extends BaseMapperPlus<InvProductDetailDao, InvProductDetailEntity, InvProductDetailEntity> {
}

@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import lombok.Data;
@Data
@ -24,7 +26,7 @@ public class IoOrderDetailResultEntity implements Serializable {
* ID
*/
@TableField(value = "bindRlFk")
private String bindRlFk;
private Long bindRlFk;
/**
* DIUUID

@ -116,7 +116,7 @@ public class IoOrderEntity implements Serializable {
* ID
*/
@TableField(value = "customerId")
private Long customerId;
private String customerId;
/**
*
@ -181,5 +181,11 @@ public class IoOrderEntity implements Serializable {
@TableField(value = "errMsg")
private String errMsg;
@TableField(value = "preOutBillNo")
private String preOutBillNo;
@TableField(value = "preInBillNo")
private String preInBillNo;
private static final long serialVersionUID = 1L;
}

@ -20,12 +20,6 @@ public class InvPreinOrderEntity implements Serializable {
@TableField(value = "billNo")
private String billNo;
/**
*
*/
@TableField(value = "`action`")
private String action;
/**
*
*/

@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@ -48,13 +50,13 @@ public class InvProductDetailEntity implements Serializable {
*
*/
@TableField(value = "produceDate")
private Date produceDate;
private String produceDate;
/**
*
*/
@TableField(value = "expireDate")
private Date expireDate;
private String expireDate;
/**
*
@ -66,7 +68,7 @@ public class InvProductDetailEntity implements Serializable {
*
*/
@TableField(value = "supId")
private Integer supId;
private String supId;
/**
*
@ -78,7 +80,7 @@ public class InvProductDetailEntity implements Serializable {
*
*/
@TableField(value = "reCount")
private String reCount;
private Integer reCount;
/**
*
@ -108,7 +110,7 @@ public class InvProductDetailEntity implements Serializable {
*
*/
@TableField(value = "purchaseType")
private String purchaseType;
private Integer purchaseType;
/**
*
@ -116,5 +118,10 @@ public class InvProductDetailEntity implements Serializable {
@TableField(value = "updateTime")
private Date updateTime;
@TableField(value = "mainAction")
private String mainAction;
@TableField(value = "action")
private String action;
private static final long serialVersionUID = 1L;
}

@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
@ -18,7 +20,7 @@ public class InvProductEntity implements Serializable {
* ID
*/
@TableField(value = "relIdFk")
private String relIdFk;
private Long relIdFk;
/**
*
@ -36,25 +38,25 @@ public class InvProductEntity implements Serializable {
*
*/
@TableField(value = "productionDate")
private Date productionDate;
private String productionDate;
/**
*
*/
@TableField(value = "expireDate")
private Date expireDate;
private String expireDate;
/**
*
*/
@TableField(value = "inCount")
private String inCount;
private Integer inCount;
/**
*
*/
@TableField(value = "outCount")
private String outCount;
private Integer outCount;
/**
*
@ -72,7 +74,7 @@ public class InvProductEntity implements Serializable {
* ID
*/
@TableField(value = "supId")
private Integer supId;
private String supId;
/**
*
@ -86,11 +88,19 @@ public class InvProductEntity implements Serializable {
@TableField(value = "invCode")
private String invCode;
/**
*
*/
@TableField(value = "createTime")
private Date createTime;
/**
*
*/
@TableField(value = "updateTime")
private Date updateTime;
private static final long serialVersionUID = 1L;
}

@ -9,7 +9,7 @@ public class PostOrderRequest {
List<PostOrder> postOrders;
int submitType;//0提交1保存
String oldOrderId;//保存再编辑后再保存或提交根据旧id删除旧数据。
private Long customerId;
private String customerId;
private Long userId;
private String wmsUserId;

@ -70,4 +70,7 @@ public interface IBasicBusTypePreService {
*/
List<BasicBusTypePreResponse> filterBusTypePreResList(FilterBusTypePreRequest filterBusTypePreRequest);
BasicBusTypePreEntity findByOriginAction(String orginAction);
}

@ -1,5 +1,6 @@
package com.glxp.api.service.basic.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.dao.basic.BasicBusTypePreDao;
import com.glxp.api.entity.basic.BasicBusTypePreEntity;
@ -73,6 +74,11 @@ public class BasicBusTypePreServiceImpl implements IBasicBusTypePreService {
return basicBusTypePreDao.selectBusTypePreResList(filterBusTypePreRequest);
}
@Override
public BasicBusTypePreEntity findByOriginAction(String orginAction) {
return basicBusTypePreDao.selectOne(new QueryWrapper<BasicBusTypePreEntity>().eq("originAction", orginAction));
}
/**
* /
*

@ -95,10 +95,6 @@ public class IoAddInoutService {
}
}
//校验条码关联供应商
public String checkExitSup(Long relId) {
FilterCompanyProductRelevanceRequest filterCompanyProductRelevanceRequest = new FilterCompanyProductRelevanceRequest();

@ -3,15 +3,23 @@ package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvPreinOrderService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
@ -33,64 +41,71 @@ public class IoCheckInoutService {
IoOrderDetailBizService orderDetailBizService;
@Resource
IoOrderDetailResultService orderDetailResultService;
@Resource
InvPreinOrderService invPreinOrderService;
@Resource
InvPreinDetailService invPreinDetailService;
@Resource
IoGenInvService genInvService;
public void check(String orderId) {
IoOrderEntity orderEntity = orderService.findByBillNo(orderId);
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (!bussinessTypeEntity.isCheckEnable()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
} else {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (!bussinessTypeEntity.isCheckUdims()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (!bussinessTypeEntity.isCheckWebNew()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (!bussinessTypeEntity.isCheckPdaEd()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (!bussinessTypeEntity.isCheckPdaUn()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (!bussinessTypeEntity.isCheckPc()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (!bussinessTypeEntity.isCheckChange()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (!bussinessTypeEntity.isCheckBalance()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDISP) {
if (!bussinessTypeEntity.isCheckSp()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (!bussinessTypeEntity.isCheckCopy()) {
unCheckFinish(orderEntity);
unCheckFirstFinish(orderEntity);
return;
}
}
checkFinish(orderEntity);
checkFirstFinish(orderEntity);
}
}
public void unCheckFinish(IoOrderEntity orderEntity) {
//一次校验(无需校验)完成
public void unCheckFirstFinish(IoOrderEntity orderEntity) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
@ -116,12 +131,14 @@ public class IoCheckInoutService {
});
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_SUCCESS);
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
checkSecond(orderEntity);
}
public void checkFinish(IoOrderEntity orderEntity) {
//一次校验完成
public void checkFirstFinish(IoOrderEntity orderEntity) {
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(orderEntity.getBillNo());
List<IoOrderDetailBizEntity> orderDetailBizEntities = orderDetailBizService.findByOrderId(orderEntity.getBillNo());
@ -189,7 +206,7 @@ public class IoCheckInoutService {
}
}
if (StrUtil.isEmpty(errMsg)) {
if (StrUtil.isNotEmpty(errMsg)) {
orderEntity.setErrMsg(errMsg + "校验失败");
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_FAIL);
orderEntity.setUpdateTime(new Date());
@ -214,9 +231,93 @@ public class IoCheckInoutService {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_SUCCESS);
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
checkSecond(orderEntity);
}
}
//二次校验
public void checkSecond(IoOrderEntity orderEntity) {
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(orderEntity.getAction());
if (bussinessTypeEntity.isSecCheckEnable()) {
if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_UDIMS) {
if (!bussinessTypeEntity.isSecCheckUdims()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_WEBNEW) {
if (!bussinessTypeEntity.isSecCheckWebNew()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAED) {
if (!bussinessTypeEntity.isSecCheckPdaEd()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PDAUN) {
if (!bussinessTypeEntity.isSecCheckPdaUn()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PC) {
if (!bussinessTypeEntity.isSecCheckPc()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_CHANGE) {
if (!bussinessTypeEntity.isSecCheckChange()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_PEACE_CHANGE) {
if (!bussinessTypeEntity.isSecCheckBalance()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
} else if (orderEntity.getFromType().intValue() == ConstantStatus.FROM_COPY) {
if (!bussinessTypeEntity.isSecCheckCopy()) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_RECEIVEED);
}
}
}
if (orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_RECEIVEED) {
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
genInv(orderEntity, bussinessTypeEntity);
}
}
//校验完成后生成库存
public void genInv(IoOrderEntity orderEntity, BasicBussinessTypeEntity bussinessTypeEntity) {
//预验收出库,删掉对应预验收库存
if (bussinessTypeEntity.getMainAction().equals(ConstantType.TYPE_OUT) && bussinessTypeEntity.isScanPreIn()) {
List<IoCodeEntity> codeList = codeService.findByOrderId(orderEntity.getBillNo());
Map<String, String> preInOrder = new HashMap<>();
for (IoCodeEntity warehouseEntity : codeList) {
List<InvPreinDetailEntity> invProductDetailEntities = invPreinDetailService.findByCode(warehouseEntity.getCode());
if (invProductDetailEntities.size() > 0) {
preInOrder.put(invProductDetailEntities.get(0).getOrderId(), invProductDetailEntities.get(0).getOrderId());
}
}
if (preInOrder.size() > 0) {
String preInBillNo = "";
for (String key : preInOrder.keySet()) {
preInBillNo = preInBillNo + "," + key;
IoOrderEntity preInEntity = orderService.findByBillNo(key);
preInEntity.setPreOutBillNo(orderEntity.getBillNo());
orderService.update(preInEntity);
invPreinOrderService.deleteByOrderId(preInEntity.getBillNo());
invPreinDetailService.deleteByOrderId(preInEntity.getBillNo());
}
orderEntity.setPreInBillNo(preInBillNo.substring(1));
orderService.update(orderEntity);
}
}
//生成库存
if (bussinessTypeEntity.isPreIn()) {
genInvService.genPreInInv(orderEntity.getBillNo());
} else {
genInvService.genNorInv(orderEntity.getBillNo());
}
}
public String checkId(IoOrderDetailBizEntity bizEntity, IoOrderDetailCodeEntity codeEntity) {
if (bizEntity.getBindRlFk() == codeEntity.getBindRlFk()) {

@ -1,10 +1,292 @@
package com.glxp.api.service.inout;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.constant.ConstantType;
import com.glxp.api.entity.auth.InvWarehouseEntity;
import com.glxp.api.entity.basic.BasicBusTypePreEntity;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.UdiRelevanceEntity;
import com.glxp.api.entity.inout.IoCodeEntity;
import com.glxp.api.entity.inout.IoCodeTempEntity;
import com.glxp.api.entity.inout.IoOrderDetailResultEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvPreinOrderEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.entity.inv.InvProductEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.IBasicBusTypePreService;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvPreinOrderService;
import com.glxp.api.service.inv.InvProductDetailService;
import com.glxp.api.service.inv.InvProductService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.DateUtil;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
@Service
public class IoGenInvService {
@Resource
InvProductService invProductService;
@Resource
InvProductDetailService invProductDetailService;
@Resource
InvPreinOrderService invPreinOrderService;
@Resource
InvPreinDetailService invPreinDetailService;
@Resource
IBasicBussinessTypeService basicBussinessTypeService;
@Resource
IoOrderService orderService;
@Resource
IoOrderDetailResultService orderDetailResultService;
@Resource
IoCodeService codeService;
@Resource
IBasicBusTypePreService basicBusTypePreService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
InvWarehouseService invWarehouseService;
@Resource
SystemParamConfigService systemParamConfigService;
@Resource
IoCodeTempService codeTempService;
//生成普通库存
public void genNorInv(String orderId) {
IoOrderEntity orderEntity = orderService.findByBillNo(orderId);
List<IoOrderDetailResultEntity> orderDetailResultEntities = orderDetailResultService.findByOrderId(orderId);
List<IoCodeEntity> codeEnttities = codeService.findByOrderId(orderId);
//生成库存产品表
List<InvProductEntity> invProductEntities = new ArrayList<>();
for (IoOrderDetailResultEntity orderDetailResultEntity : orderDetailResultEntities) {
InvProductEntity invProductEntity = invProductService.selectByUnique(orderDetailResultEntity.getBindRlFk(), orderDetailResultEntity.getBatchNo(), orderDetailResultEntity.getSupId(), orderEntity.getDeptCode(), orderEntity.getInvCode());
if (invProductEntity == null) {
invProductEntity = new InvProductEntity();
invProductEntity.setRelIdFk(orderDetailResultEntity.getBindRlFk());
invProductEntity.setNameCode(orderDetailResultEntity.getNameCode());
invProductEntity.setBatchNo(orderDetailResultEntity.getBatchNo());
invProductEntity.setProductionDate(orderDetailResultEntity.getProductDate());
invProductEntity.setExpireDate(orderDetailResultEntity.getExpireDate());
invProductEntity.setInCount(0);
invProductEntity.setOutCount(0);
invProductEntity.setSupId(orderDetailResultEntity.getSupId());
invProductEntity.setDeptCode(orderEntity.getDeptCode());
invProductEntity.setInvCode(orderEntity.getInvCode());
invProductEntity.setCreateTime(new Date());
invProductEntity.setUpdateTime(new Date());
invProductService.insert(invProductEntity);
}
if (orderEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
invProductEntity.setOutCount(invProductEntity.getOutCount() + orderDetailResultEntity.getReCount());
} else if (orderEntity.getMainAction().equals(ConstantType.TYPE_PUT)) {
invProductEntity.setInCount(invProductEntity.getInCount() + orderDetailResultEntity.getReCount());
}
invProductEntity.setUpdateTime(new Date());
invProductEntities.add(invProductEntity);
}
invProductService.updateBatch(invProductEntities);
//生成库存码详情
List<InvProductDetailEntity> invProductDetailEntities = new ArrayList<>();
for (IoCodeEntity codeEntity : codeEnttities) {
InvProductDetailEntity invProductDetailEntity = new InvProductDetailEntity();
BeanUtils.copyProperties(codeEntity, invProductDetailEntity);
invProductDetailEntity.setUpdateTime(new Date());
invProductDetailEntity.setPurchaseType(ConstantStatus.PRUCHASE_COMMON);
invProductDetailEntities.add(invProductDetailEntity);
}
BasicBusTypePreEntity basicBusTypePreEntity = basicBusTypePreService.findByOriginAction(orderEntity.getAction());
if (basicBusTypePreEntity != null) { //进行单据流转
genNewOrder(orderEntity, invProductDetailEntities);
} else { //生成库存结束
invProductDetailService.insertList(invProductDetailEntities);
}
}
//生成预验收库存
public void genPreInInv(String orderId) {
IoOrderEntity orderEntity = orderService.findByBillNo(orderId);
InvPreinOrderEntity invPreinOrderEntity = new InvPreinOrderEntity();
BeanUtils.copyProperties(orderEntity, invPreinOrderEntity);
invPreinOrderService.insert(invPreinOrderEntity);
List<IoCodeEntity> codeEnttities = codeService.findByOrderId(orderId);
List<InvPreinDetailEntity> invPreinDetailEntities = new ArrayList<>();
codeEnttities.forEach(codeEntity ->
{
InvPreinDetailEntity invPreinDetailEntity = new InvPreinDetailEntity();
BeanUtils.copyProperties(codeEntity, invPreinDetailEntity);
invPreinDetailEntities.add(invPreinDetailEntity);
});
invPreinDetailService.insertList(invPreinDetailEntities);
}
//单据流转
public void genNewOrder(IoOrderEntity orderEntity, List<InvProductDetailEntity> invProductDetailEntities) {
BasicBusTypePreEntity basicBusTypePreEntity = basicBusTypePreService.findByOriginAction(orderEntity.getAction());
List<IoCodeEntity> codeEnttities = codeService.findByOrderId(orderEntity.getBillNo());
if (basicBusTypePreEntity.getSupplementAll()) {//全量补单
invProductDetailService.insertList(invProductDetailEntities);
buildInOrder(basicBusTypePreEntity, codeEnttities, orderEntity);
} else { //缺量补单
List<IoCodeEntity> inList = new ArrayList<>();
for (IoCodeEntity warehouseEntity : codeEnttities) {
Integer invCount = getInvCount(warehouseEntity);
Integer count = warehouseEntity.getReCount();
if (invCount > 0) {//仓库已存在该产品
if (count > invCount) { //当前数量>结余数量,说明该产品是无序列号或者是多级包装
if (count > invCount) { //该产品实际数量大于结余数量,说明是多级包装,直接补
inList.add(warehouseEntity);
} else if (warehouseEntity.getSerialNo() == null) { //无序列号(多级包装无序列号的已在上一步被排除),补齐数量
int lea = count - invCount;
warehouseEntity.setCount(lea / (count)); //
inList.add(warehouseEntity);
}
}
} else { //结余数量《=0直接补
inList.add(warehouseEntity);
}
InvProductDetailEntity invProductDetailEntity = filterInvByCode(invProductDetailEntities, warehouseEntity.getCode());
invProductDetailService.insert(invProductDetailEntity);
}
buildInOrder(basicBusTypePreEntity, inList, orderEntity);
}
}
public InvProductDetailEntity filterInvByCode(List<InvProductDetailEntity> invProductDetailEntities, String
code) {
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
if (invProductDetailEntity.getCode().equals(code)) {
return invProductDetailEntity;
}
}
return null;
}
//生成单据
public void buildInOrder(BasicBusTypePreEntity bussinessChangeTypeEntity, List<IoCodeEntity> useInList, IoOrderEntity orderEntity) {
if (useInList.size() <= 0) {
return;
}
Map<String, List<IoCodeEntity>> filterSupMaps = new HashMap<>();
BasicBussinessTypeEntity targetBustypeEntity = basicBussinessTypeService.findByAction(bussinessChangeTypeEntity.getAction());
//过滤供应商
if (targetBustypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) {
for (IoCodeEntity warehouseEntity : useInList) {
if (warehouseEntity.getSupId() != null) {
if (filterSupMaps.get(warehouseEntity.getSupId()) == null) {
List<IoCodeEntity> temps = new ArrayList<>();
temps.add(warehouseEntity);
filterSupMaps.put(warehouseEntity.getSupId(), temps);
} else {
filterSupMaps.get(warehouseEntity.getSupId()).add(warehouseEntity);
}
}
}
} else {
filterSupMaps.put(bussinessChangeTypeEntity.getDefaultInvCode(), useInList);
}
//根据往来单位生成入库单
for (String corpName : filterSupMaps.keySet()) {
List<IoCodeEntity> temps;
temps = filterSupMaps.get(corpName);
IoOrderEntity outOrder = new IoOrderEntity();
BeanUtils.copyProperties(orderEntity, outOrder);
outOrder.setSupplementNo(null);//补单需置空
outOrder.setCreateTime(DateUtil.getBeforeDay(DateUtil.fromDate(orderEntity), bussinessChangeTypeEntity.getBeforeTime()));
outOrder.setAction(targetBustypeEntity.getAction());
outOrder.setMainAction(targetBustypeEntity.getMainAction());
outOrder.setFromType(ConstantStatus.FROM_CHANGE);
String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(targetBustypeEntity.getPrefix()), "yyyyMMdd"));
outOrder.setBillNo(orderNo);
if (targetBustypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) {
outOrder.setCustomerId(corpName);
outOrder.setFromCorp(corpName);
} else {
outOrder.setCustomerId(Constant.SYSTEM_CUSTOMER_ID);
outOrder.setFromInvCode(bussinessChangeTypeEntity.getDefaultInvCode());
}
outOrder.setCorpOrderId(CustomUtil.getId() + "x");
InvWarehouseEntity invWarehouseEntity = invWarehouseService.findByInvSubByCode(bussinessChangeTypeEntity.getInvCode());
outOrder.setInvCode(invWarehouseEntity.getCode());
outOrder.setDeptCode(invWarehouseEntity.getParentId());
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("additional_auto_submit");
if ("1".equals(systemParamConfigEntity.getParamValue())) {
outOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS);
} else {
outOrder.setStatus(ConstantStatus.ORDER_STATUS_ADDITIONAL);
}
//互填单号
orderEntity.setUllageSupNo(outOrder.getBillNo());
orderEntity.setUpdateTime(new Date());
orderService.update(orderEntity);
outOrder.setOriginUllageSupNo(orderEntity.getBillNo());
outOrder.setCreateUser(null);
outOrder.setReviewUser(null);
orderService.insertOrder(outOrder);
List<IoCodeTempEntity> codeTempEntities = new ArrayList<>();
for (IoCodeEntity warehouseEntity : temps) {
IoCodeTempEntity codeTempEntity = new IoCodeTempEntity();
BeanUtils.copyProperties(warehouseEntity, codeTempEntity);
codeTempEntity.setOrderId(outOrder.getBillNo());
codeTempEntity.setId(null);
codeTempEntity.setAction(outOrder.getAction());
codeTempEntity.setMainAction(outOrder.getMainAction());
codeTempEntities.add(codeTempEntity);
}
codeTempService.insertBatch(codeTempEntities);
}
}
//计算当前库存数量
public int getInvCount(IoCodeEntity codeEntity) {
List<InvProductDetailEntity> resultLists = invProductDetailService.selectByUnique(codeEntity.getRelId(), codeEntity.getBatchNo(), codeEntity.getSupId(), codeEntity.getDeptCode(), codeEntity.getInvCode());
int invCount = 0;
if (CollUtil.isNotEmpty(resultLists)) {
for (InvProductDetailEntity invProductDetailEntity : resultLists) {
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_OUT)) {
invCount = invCount - invProductDetailEntity.getCount();
} else {
invCount = invCount + invProductDetailEntity.getCount();
}
}
}
return invCount;
}
}

@ -0,0 +1,14 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import java.util.List;
public interface InvPreinDetailService {
public void insertList(List<InvPreinDetailEntity> invPreinDetailEntities);
List<InvPreinDetailEntity> findByCode(String code);
int deleteByOrderId(String orderId);
}

@ -1,5 +1,10 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvPreinOrderEntity;
public interface InvPreinOrderService {
public void insert(InvPreinOrderEntity invPreinOrderEntity);
int deleteByOrderId(String orderId);
}

@ -0,0 +1,15 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.entity.inv.InvProductEntity;
import java.util.List;
public interface InvProductDetailService {
int insert(InvProductDetailEntity invProductDetailEntity);
List<InvProductDetailEntity> selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode);
boolean insertList(List<InvProductDetailEntity> invProductDetailEntities);
}

@ -1,5 +1,18 @@
package com.glxp.api.service.inv;
import com.glxp.api.entity.inv.InvProductEntity;
import java.util.List;
public interface InvProductService {
int insert(InvProductEntity invProductEntity);
int update(InvProductEntity invProductEntity);
boolean updateBatch(List<InvProductEntity> invProductEntities);
InvProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode);
}

@ -0,0 +1,37 @@
package com.glxp.api.service.inv.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inv.InvPreinDetailDao;
import com.glxp.api.dao.inv.InvPreinOrderDao;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.service.inv.InvPreinDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class InvPreinDetailServiceImpl implements InvPreinDetailService {
@Resource
InvPreinDetailDao invPreinDetailDao;
@Override
public void insertList(List<InvPreinDetailEntity> invPreinDetailEntities) {
invPreinDetailDao.insertBatch(invPreinDetailEntities);
}
@Override
public List<InvPreinDetailEntity> findByCode(String code) {
return invPreinDetailDao.selectList(new QueryWrapper<InvPreinDetailEntity>().eq("code", code));
}
@Override
public int deleteByOrderId(String orderId) {
return invPreinDetailDao.delete(new QueryWrapper<InvPreinDetailEntity>().eq("orderIdFk", orderId));
}
}

@ -1,8 +1,28 @@
package com.glxp.api.service.inv.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inv.InvPreinOrderDao;
import com.glxp.api.entity.inv.InvPreinOrderEntity;
import com.glxp.api.service.inv.InvPreinOrderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@Service
@Transactional(rollbackFor = Exception.class)
public class InvPreinOrderServiceImpl implements InvPreinOrderService {
@Resource
InvPreinOrderDao invPreinOrderDao;
@Override
public void insert(InvPreinOrderEntity invPreinOrderEntity) {
invPreinOrderDao.insert(invPreinOrderEntity);
}
@Override
public int deleteByOrderId(String orderId) {
return invPreinOrderDao.delete(new QueryWrapper<InvPreinOrderEntity>().eq("orderId", orderId));
}
}

@ -0,0 +1,35 @@
package com.glxp.api.service.inv.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inv.InvProductDetailDao;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.entity.inv.InvProductEntity;
import com.glxp.api.service.inv.InvProductDetailService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class InvProductDetailServiceImpl implements InvProductDetailService {
@Resource
InvProductDetailDao invProductDetailDao;
@Override
public int insert(InvProductDetailEntity invProductDetailEntity) {
return invProductDetailDao.insert(invProductDetailEntity);
}
@Override
public List<InvProductDetailEntity> selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode) {
return invProductDetailDao.selectList(new QueryWrapper<InvProductDetailEntity>().eq("relId", relId).eq("batchNo", batchNo).eq("supId", supId).eq("deptCode", deptCode).eq("invCode", invCode));
}
@Override
public boolean insertList(List<InvProductDetailEntity> invProductDetailEntities) {
return invProductDetailDao.insertBatch(invProductDetailEntities);
}
}

@ -1,8 +1,40 @@
package com.glxp.api.service.inv.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inv.InvProductDao;
import com.glxp.api.entity.inv.InvProductEntity;
import com.glxp.api.service.inv.InvProductService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
@Service
@Transactional(rollbackFor = Exception.class)
public class InvProductServiceImpl implements InvProductService {
}
@Resource
InvProductDao invProductDao;
@Override
public int insert(InvProductEntity invProductEntity) {
return invProductDao.insert(invProductEntity);
}
@Override
public int update(InvProductEntity invProductEntity) {
return invProductDao.updateById(invProductEntity);
}
@Override
public boolean updateBatch(List<InvProductEntity> invProductEntities) {
return invProductDao.updateBatchById(invProductEntities);
}
@Override
public InvProductEntity selectByUnique(Long relId, String batchNo, String supId, String deptCode, String invCode) {
return invProductDao.selectOne(new QueryWrapper<InvProductEntity>().eq("relIdFk", relId).eq("batchNo", batchNo).eq("supId", supId).eq("deptCode", deptCode).eq("invCode", invCode));
}
}

@ -1,5 +1,6 @@
package com.glxp.api.util;
import com.glxp.api.entity.inout.IoOrderEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.FastDateFormat;
@ -544,6 +545,20 @@ public class DateUtil extends DateUtils {
return null;
}
public static Date getBeforeDay(Date actDate, int hour) {
try {
long time = actDate.getTime();
long move = hour * 1000 * 60 * 60;
time = time - move;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return new Date(time);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String formatExpireTime(String str) {
try {
Date date = DateUtil.parseDate(str, "yyyyMMdd");
@ -553,4 +568,15 @@ public class DateUtil extends DateUtils {
}
return str;
}
public static Date fromDate(IoOrderEntity orderEntity) {
Date time = null;
if (orderEntity.getAuditTime() != null) {
time = orderEntity.getAuditTime();
} else {
time = orderEntity.getCreateTime();
}
return time;
}
}

@ -4,9 +4,9 @@ server:
spring:
datasource:
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
jdbc-url: jdbc:p6spy:mysql://127.0.0.1:3306/udi_wms?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
jdbc-url: jdbc:p6spy:mysql://192.168.0.66:3364/udi_wms?allowMultiQueries=true&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
password: Glxp@6066
hikari:
connection-timeout: 60000
maximum-pool-size: 60

Loading…
Cancel
Save