多个供应商绑定,多个产品关联绑定,预验收库存校验,普通库存校验

master
anthonywj 2 years ago
parent 03c5f5c16f
commit 37a54d3ef9

@ -16,6 +16,8 @@ import com.glxp.api.entity.basic.BasicCorpEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.inv.InvPreinDetailEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.http.SpsDirectClient;
import com.glxp.api.req.basic.CompanyProductRelevanceRequest;
@ -30,6 +32,8 @@ import com.glxp.api.res.inout.AddCodeResult;
import com.glxp.api.service.auth.InvWarehouseService;
import com.glxp.api.service.basic.*;
import com.glxp.api.service.inout.*;
import com.glxp.api.service.inv.InvPreinDetailService;
import com.glxp.api.service.inv.InvProductDetailService;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.DateUtil;
@ -80,6 +84,10 @@ public class IoCodeTempController extends BaseController {
InvWarehouseService invWarehouseService;
@Resource
IoCheckInoutService ioCheckInoutService;
@Resource
InvPreinDetailService invPreinDetailService;
@Resource
InvProductDetailService invProductDetailService;
//手持端扫码单据上传调用接口
@AuthRuleAnnotation("")
@ -414,70 +422,46 @@ public class IoCodeTempController extends BaseController {
}
}
//校验预验收是否已存在 todo
//校验预验收是否已存在
if (bussinessTypeEntity.isPreIn()) {
if (StrUtil.isNotEmpty(udiEntity.getSerialNo())) {
// List<InvProductDetailEntity> invProductDetailEntities = invPreInProductDetailService.findByOriginCode(code);
// if (CollUtil.isNotEmpty(invProductDetailEntities)) {
// return ResultVOUtils.error(500, "条码已存在!");
// }
List<InvPreinDetailEntity> invProductDetailEntities = invPreinDetailService.findByCode(code);
if (CollUtil.isNotEmpty(invProductDetailEntities)) {
return ResultVOUtils.error(500, "预验收库存已存在此UDI码,请检查后重试!");
}
}
}
//校验预验收库存是否已存在
if (addOrderRequest.isPreCheck()) {
// InvProductDetailEntity invProductDetailEntity = invPreInProductDetailService.statInvPreInDetail(code);
// if (invProductDetailEntity == null) {
// return ResultVOUtils.error(500, "预验收库存未存在此产品!");
// } else {
//
//
// if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo())
// && !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) {
// return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!");
//
// }
//
//
// if (StrUtil.isNotEmpty(orderId)) {//非首次添加
// if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
// WarehouseQueryRequest warehouseQueryRequest = new WarehouseQueryRequest();
// warehouseQueryRequest.setOrderId(orderId);
// warehouseQueryRequest.setCode(code);
// List<WarehouseEntity> codeEnttitys = codesTempService.findByOrderIdAndCode(warehouseQueryRequest);
// if (CollUtil.isNotEmpty(codeEnttitys)) {
// WarehouseEntity codeEnttity = codeEnttitys.get(0);
// if (invProductDetailEntity.getCount() < (codeEnttity.getCount() + 1)) {
// return ResultVOUtils.error(500, "超出预验收库存数量");
// }
// }
// } else {
// if (invProductDetailEntity.getCount() < 1) {
// return ResultVOUtils.error(500, "超出预验收库存数量");
// }
// }
// }
// }
} else //校验库存是否存在
if (addOrderRequest.isVailInv()) {
// if (bussinessTypeEntity.isAdvanceType()) {
// int count = invPreProductDetailService.vailStockCount(code);
// if (count < 0) {
// return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
// }
// } else {
// int count = invProductDetailService.vailStockCount(code, addOrderRequest.getLocStorageCode(), addOrderRequest.getInvWarehouseCode(), null);
// if (count <= 0) {
// return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
// } else if (StrUtil.isNotBlank(addOrderRequest.getOrderId())) {
// //查询此单据已扫描的条码数量
// WarehouseEntity warehouse = codesTempService.findByUnique(addOrderRequest.getOrderId(), addOrderRequest.getCode());
// if (null != warehouse && warehouse.getCount() >= count) {
// return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
// }
// }
// }
InvPreinDetailEntity invProductDetailEntity = invPreinDetailService.findOneByCode(code);
if (invProductDetailEntity == null) {
return ResultVOUtils.error(500, "预验收库存未存在此产品!");
} else {
if (StrUtil.isNotEmpty(invProductDetailEntity.getBatchNo()) && StrUtil.isNotEmpty(addOrderRequest.getBatchNo())
&& !invProductDetailEntity.getBatchNo().equals(addOrderRequest.getBatchNo())) {
return ResultVOUtils.error(500, "当前批次号与预验收录入批次号不匹配!");
}
if (StrUtil.isNotEmpty(orderId)) {//非首次添加
if (StrUtil.isEmpty(udiEntity.getSerialNo())) {//该单据已有该产品
IoCodeTempEntity codeTempEntity = codeTempService.findByUnique(orderId, code);
if (codeTempEntity != null) {
if (invProductDetailEntity.getCount() < (codeTempEntity.getCount() + 1)) {
return ResultVOUtils.error(500, "超出预验收库存数量");
}
}
} else {
if (invProductDetailEntity.getCount() < 1) {
return ResultVOUtils.error(500, "超出预验收库存数量");
}
}
}
}
}
//校验库存是否存在
if (addOrderRequest.getFromCorp() == null) {
@ -515,6 +499,12 @@ public class IoCodeTempController extends BaseController {
exitLocalEntity.setCount(exitLocalEntity.getCount() + 1);
exitLocalEntity.setReCount(exitLocalEntity.getCount() * udiCalCountUtil.getActCount(udiRelevanceResponses.get(0)));
BaseResponse invRes = checkInv(bussinessTypeEntity, exitLocalEntity);
if (invRes != null) {
return invRes;
}
if (StringUtils.isBlank(exitLocalEntity.getSerialNo())) {
if (bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.isCheckWebNew()) {
String errMsg = ioCheckInoutService.checkCode(exitLocalEntity);
@ -602,6 +592,12 @@ public class IoCodeTempController extends BaseController {
BaseResponse baseResponse = checkRelId(codeEnttity, unitFk);
BaseResponse invRes = checkInv(bussinessTypeEntity, exitLocalEntity);
if (invRes != null) {
return invRes;
}
if (bussinessTypeEntity.isCheckEnable() && bussinessTypeEntity.isCheckWebNew()) {
String errMsg = ioCheckInoutService.checkCode(codeEnttity);
if (errMsg != null) {
@ -659,15 +655,20 @@ public class IoCodeTempController extends BaseController {
//校验供应商是否配送此产品
public BaseResponse checkCorp(IoCodeTempEntity codeEnttity, BasicBussinessTypeEntity bussinessTypeEntity, String unitFk) {
CompanyProductRelevanceRequest companyProductRelevanceRequest = new CompanyProductRelevanceRequest();
UdiEntity udiEntity = FilterUdiUtils.getUdi(codeEnttity.getCode());
companyProductRelevanceRequest.setNameCode(udiEntity.getUdi());
if (bussinessTypeEntity.getCorpType() == ConstantStatus.CORP_TYPE_OUT) {
CompanyProductRelevanceRequest companyProductRelevanceRequest = new CompanyProductRelevanceRequest();
companyProductRelevanceRequest.setUnitFk(unitFk);
UdiEntity udiEntity = FilterUdiUtils.getUdi(codeEnttity.getCode());
companyProductRelevanceRequest.setNameCode(udiEntity.getUdi());
List<UdiRlSupResponse> datas = udiRlSupService.filterUdiGp(companyProductRelevanceRequest);
if (datas.size() <= 0) {
return ResultVOUtils.error(500, "当前供应商不存在此配送产品!");
}
} else {
List<UdiRlSupResponse> datas = udiRlSupService.filterUdiGp(companyProductRelevanceRequest);
if (datas.size() <= 0) {
return ResultVOUtils.error(500, "此产品无指定供应商,请检查后添加!");
}
}
return null;
}
@ -762,6 +763,29 @@ public class IoCodeTempController extends BaseController {
return null;
}
public BaseResponse checkInv(BasicBussinessTypeEntity bussinessTypeEntity, IoCodeTempEntity codeTempEntity) {
if (bussinessTypeEntity.isVailInv()) {
if (bussinessTypeEntity.isAdvanceType()) {
// int count = invPreProductDetailService.vailStockCount(code); //todo 寄售
// if (count < 0) {
// return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
// }
} else {
int count = invProductDetailService.vailStockCount(codeTempEntity.getRelId(), codeTempEntity.getDeptCode(), codeTempEntity.getInvCode(), null);
if (count <= 0) {
return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
} else {
//查询此单据已扫描的条码数量
if (codeTempEntity.getReCount() >= count) {
return ResultVOUtils.error(500, "当前库存不足不允许0库存出库");
}
}
}
}
return null;
}
@AuthRuleAnnotation("")
@GetMapping("admin/warehouse/inout/findErrorByOrderId")

@ -1,5 +1,6 @@
package com.glxp.api.controller.inout;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
@ -98,20 +99,35 @@ public class IoOrderController {
}
@Resource
IoAddInoutService ioAddInoutService;
//单据提交
@AuthRuleAnnotation("")
@GetMapping("warehouse/inout/submitOrderWeb")
public BaseResponse submitOrderWeb(AddOrderRequest addOrderRequest) {
@PostMapping("warehouse/inout/submitOrderWeb")
public BaseResponse submitOrderWeb(@RequestBody AddOrderRequest addOrderRequest) {
//校验单据是否已完成
List<IoOrderDetailBizEntity> orderDetailBizEntities = orderDetailBizService.findByOrderId(addOrderRequest.getBillNo());
List<IoOrderDetailCodeEntity> orderDetailCodeEntities = orderDetailCodeService.findByOrderId(addOrderRequest.getBillNo());
String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities);
if (StrUtil.isNotEmpty(errMsg)) {
return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交");
if (CollUtil.isEmpty(orderDetailCodeEntities)) {
return ResultVOUtils.error(500, "单据还未扫码");
}
saveOrderWeb(addOrderRequest);
checkInoutService.check(addOrderRequest.getBillNo());
if (CollUtil.isNotEmpty(orderDetailBizEntities)) {
String errMsg = checkInoutService.bizOrderCheck(orderDetailBizEntities, orderDetailCodeEntities);
if (StrUtil.isNotEmpty(errMsg)) {
return ResultVOUtils.error(500, "单据未校验完成,请检查后重新提交!");
}
saveOrderWeb(addOrderRequest);
checkInoutService.check(addOrderRequest.getBillNo());
} else {
IoOrderEntity orderEntity = orderService.findByBillNo(addOrderRequest.getBillNo());
ioAddInoutService.dealProcess(orderEntity);
}
return ResultVOUtils.success("提交成功!");
}

@ -84,6 +84,18 @@ public class IoOrderReviewController extends BaseController {
}
@AuthRuleAnnotation("")
@PostMapping("/udiwms/stock/order/acceptClear")
public BaseResponse acceptClear(@RequestBody AcceptOrderResponse acceptOrderEntity) {
String billNo = acceptOrderEntity.getBillNo();
redisUtil.del(ConstantStatus.REDIS_BILLNO + billNo);
redisUtil.del(ConstantStatus.REDIS_BILLNO_CODES + billNo);
List<IoOrderDetailBizEntity> stockOrderDetailEntities = orderDetailBizService.findByOrderId(billNo);
acceptOrderEntity.setOrderDetailEntities(stockOrderDetailEntities);
return ResultVOUtils.success(acceptOrderEntity);
}
public BaseResponse updateReview(IoOrderEntity orderEntity) {
AuthAdmin authAdmin = getUser();
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);

@ -18,18 +18,15 @@ import com.glxp.api.entity.inout.IoOrderDetailCodeEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.req.basic.CompanyProductRelevanceRequest;
import com.glxp.api.req.basic.FilterCompanyProductRelevanceRequest;
import com.glxp.api.req.inout.FilterOrderRequest;
import com.glxp.api.req.inout.PdaCodeEntity;
import com.glxp.api.req.inout.PostOrderRequest;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.service.basic.BasicCorpService;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.basic.UdiRlSupService;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
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;
@ -210,15 +207,6 @@ public class IoAddInoutService {
}
if (CollUtil.isNotEmpty(insertList)) {
//临时表转正式表
List<IoCodeEntity> ioCodeEntities = new ArrayList<>();
for (IoCodeTempEntity codeTempEntity : insertList) {
IoCodeEntity codeEntity = new IoCodeEntity();
BeanUtils.copyProperties(codeTempEntity, codeEntity);
ioCodeEntities.add(codeEntity);
}
codeService.insertBatch(ioCodeEntities);
//生成扫码单据详情
if (!orderDetailCodeService.isExit(orderEntity.getBillNo())) {
for (IoCodeTempEntity codeTempEntity : insertList) {
@ -226,7 +214,6 @@ public class IoAddInoutService {
}
}
codeTempService.deleteByBillNo(orderEntity.getBillNo());
//进行单据校验
ioCheckInoutService.check(orderEntity.getBillNo());
}

@ -6,9 +6,11 @@ import java.util.List;
public interface InvPreinDetailService {
public void insertList(List<InvPreinDetailEntity> invPreinDetailEntities);
void insertList(List<InvPreinDetailEntity> invPreinDetailEntities);
List<InvPreinDetailEntity> findByCode(String code);
InvPreinDetailEntity findOneByCode(String code);
int deleteByOrderId(String orderId);
}

@ -32,4 +32,9 @@ public interface InvProductDetailService {
* @param response
*/
void setOrderInfo(InvProductDetailResponse response);
int vailStockCount(Long relId, String invStorageCode, String invWarehouseCode, String invSpaceCode);
}

@ -1,5 +1,6 @@
package com.glxp.api.service.inv.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.glxp.api.dao.inv.InvPreinDetailDao;
import com.glxp.api.dao.inv.InvPreinOrderDao;
@ -28,6 +29,15 @@ public class InvPreinDetailServiceImpl implements InvPreinDetailService {
return invPreinDetailDao.selectList(new QueryWrapper<InvPreinDetailEntity>().eq("code", code));
}
@Override
public InvPreinDetailEntity findOneByCode(String code) {
List<InvPreinDetailEntity> invPreinDetailEntities = invPreinDetailDao.selectList(new QueryWrapper<InvPreinDetailEntity>().eq("code", code).last("limit 1"));
if (CollUtil.isNotEmpty(invPreinDetailEntities)) {
return invPreinDetailEntities.get(0);
}
return null;
}
@Override
public int deleteByOrderId(String orderId) {
return invPreinDetailDao.delete(new QueryWrapper<InvPreinDetailEntity>().eq("orderIdFk", orderId));

@ -1,6 +1,7 @@
package com.glxp.api.service.inv.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.glxp.api.constant.ConstantType;
@ -8,12 +9,14 @@ import com.glxp.api.dao.basic.BasicBussinessTypeDao;
import com.glxp.api.dao.inout.IoOrderDao;
import com.glxp.api.dao.inv.InvProductDetailDao;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import com.glxp.api.res.inv.InvProductDetailResponse;
import com.glxp.api.service.inv.InvProductDetailService;
import com.glxp.api.util.DateUtil;
import com.glxp.api.util.udi.FilterUdiUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -91,4 +94,25 @@ public class InvProductDetailServiceImpl implements InvProductDetailService {
IoOrderEntity order = orderDao.selectOne(new QueryWrapper<IoOrderEntity>().select("createTime").eq("billNo", response.getOrderId()));
response.setOrderTime(DateUtil.toDateStr(order.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
}
@Override
public int vailStockCount(Long relId, String deptCode, String invCode, String invSpaceCode) {
if (relId == null) {
return 0;
}
List<InvProductDetailEntity> datas =
invProductDetailDao.selectList(new QueryWrapper<InvProductDetailEntity>().eq("relIdFk", relId).eq("deptCode", deptCode).eq("invCode", invCode).eq("invSpaceCode", invSpaceCode));
int count = 0;
if (CollUtil.isNotEmpty(datas)) {
for (InvProductDetailEntity invProductDetailEntity : datas) {
if (invProductDetailEntity.getMainAction().equals(ConstantType.TYPE_PUT))
count = count + invProductDetailEntity.getCount();
else {
count = count - invProductDetailEntity.getCount();
}
}
}
return count;
}
}

Loading…
Cancel
Save