手持终端流向查询,库存查询 ,验收等

master
anthonywj 2 years ago
parent 45c5a209c2
commit 96d811e8da

@ -168,6 +168,7 @@ public class ConstantStatus {
public static final int FROM_CHANGE = 6; //单据流转
public static final int FROM_UDISP = 7; //供应商平台
public static final int FROM_PEACE_CHANGE = 8; //平衡补单
public static final int FROM_REVIEW = 9; //单据验收直接补单
public static final int FROM_COPY = 10; //单据复制
public static final int FROM_COUNT = 11; //盘点单据转单
public static final int FROM_PLAN = 12; //申购计划转单

@ -1,5 +1,6 @@
package com.glxp.api.controller.inout;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
@ -11,17 +12,24 @@ import com.glxp.api.constant.Constant;
import com.glxp.api.constant.ConstantStatus;
import com.glxp.api.controller.BaseController;
import com.glxp.api.entity.auth.AuthAdmin;
import com.glxp.api.entity.basic.BasicBussinessTypeEntity;
import com.glxp.api.entity.basic.EntrustReceEntity;
import com.glxp.api.entity.inout.IoCodeEntity;
import com.glxp.api.entity.inout.IoOrderDetailBizEntity;
import com.glxp.api.entity.inout.IoOrderDetailCodeEntity;
import com.glxp.api.entity.inout.IoOrderEntity;
import com.glxp.api.entity.inout.*;
import com.glxp.api.entity.system.SystemParamConfigEntity;
import com.glxp.api.req.inout.FilterOrderDetailResultRequest;
import com.glxp.api.req.inout.ReviewFinishRequest;
import com.glxp.api.req.inout.UpdateExportStatusRequest;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.res.inout.AcceptOrderResponse;
import com.glxp.api.res.inout.IoOrderDetailResultResponse;
import com.glxp.api.service.auth.AuthAdminService;
import com.glxp.api.service.basic.EntrustReceService;
import com.glxp.api.service.basic.IBasicBussinessTypeService;
import com.glxp.api.service.inout.*;
import com.glxp.api.service.system.SystemParamConfigService;
import com.glxp.api.util.CustomUtil;
import com.glxp.api.util.GennerOrderUtils;
import com.glxp.api.util.OrderNoTypeBean;
import com.glxp.api.util.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
@ -31,6 +39,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
@ -87,11 +96,13 @@ public class IoOrderReviewController extends BaseController {
if (orderEntity == null) {
return ResultVOUtils.error(500, "未找到该业务单据");
}
return updateReview(orderEntity);
return updateReview(getUser(), orderEntity);
}
@Resource
IoCodeService codeService;
@Resource
IoCodeTempService codeTempService;
//前端扫码验收
@AuthRuleAnnotation("")
@ -151,6 +162,110 @@ public class IoOrderReviewController extends BaseController {
}
@Resource
AuthAdminService authAdminService;
@Resource
EntrustReceService entrustReceService;
//手持终端验收完成后,更新订单状态
@AuthRuleAnnotation("")
@PostMapping("/spms/inout/order/check/updateStatus")
public BaseResponse updateStatus(@RequestBody UpdateExportStatusRequest updateExportStatusRequest,
BindingResult bindingResult) {
AuthAdmin authAdmin = null;
if (StrUtil.isNotEmpty(updateExportStatusRequest.getWmsUserId())) {
authAdmin = authAdminService.findById(Long.parseLong(updateExportStatusRequest.getWmsUserId()));
} else
authAdmin = getUser();
IoOrderEntity orderEntity = orderService.findByBillNo(updateExportStatusRequest.getOrderId());
if (orderEntity.getStatus() == ConstantStatus.ORDER_STATUS_AUDITED) {
return ResultVOUtils.error(500, "单据已验收!");
}
if (updateExportStatusRequest.isEntrust() && updateExportStatusRequest.getEntrustId() != null) {
EntrustReceEntity entrustReceEntity = entrustReceService.findById(updateExportStatusRequest.getEntrustId());
if (entrustReceEntity == null) {
return ResultVOUtils.error(500, "无验收权限!");
} else {
if (orderEntity.getFromType().intValue() != ConstantStatus.FROM_CHANGE && orderEntity.getFromType().intValue() != ConstantStatus.FROM_PEACE_CHANGE) {
if (StrUtil.isNotEmpty(entrustReceEntity.getEntrustAction())) {
transferOrder(orderEntity, entrustReceEntity);
}
}
if (!entrustReceEntity.getFinishRece()) {
redisUtil.del(ConstantStatus.REDIS_BILLNO + orderEntity.getBillNo());
redisUtil.del(ConstantStatus.REDIS_BILLNO_CODES + orderEntity.getBillNo());
return ResultVOUtils.success("验收成功!");
} else
return updateReview(authAdmin, orderEntity);
}
} else
return updateReview(authAdmin, orderEntity);
}
@Resource
IBasicBussinessTypeService basicBussinessTypeService;
@Resource
GennerOrderUtils gennerOrderUtils;
@Resource
SystemParamConfigService systemParamConfigService;
public void transferOrder(IoOrderEntity orderEntity, EntrustReceEntity entrustReceEntity) {
List<IoCodeEntity> warehouseEntities = codeService.findByOrderId(orderEntity.getBillNo());
BasicBussinessTypeEntity bussinessTypeEntity = basicBussinessTypeService.findByAction(entrustReceEntity.getEntrustAction());
IoOrderEntity supplementOrder = new IoOrderEntity();
BeanUtil.copyProperties(orderEntity, supplementOrder);
//生成补单单号
String orderNo = gennerOrderUtils.createScOrderNo(new OrderNoTypeBean(Constant.SCAN_ORDER + StrUtil.trimToEmpty(bussinessTypeEntity.getPrefix()), "yyyyMMdd"));
String supplementOrderNo = orderNo;
supplementOrder.setOriginUllageSupNo(orderEntity.getBillNo());
supplementOrder.setBillNo(supplementOrderNo);
SystemParamConfigEntity systemParamConfigEntity = systemParamConfigService.selectByParamKey("additional_auto_submit");
if ("1".equals(systemParamConfigEntity.getParamValue())) {
supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); //设置状态为补录单据
} else {
supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_ADDITIONAL); //设置状态为补录单据
}
supplementOrder.setStatus(ConstantStatus.ORDER_STATUS_PROCESS); //设置导出状态为未导出
supplementOrder.setCorpOrderId(CustomUtil.getId() + "x");
//修改往来单位及当前库存号
supplementOrder.setFromDeptCode(orderEntity.getDeptCode());
supplementOrder.setFromInvCode(orderEntity.getInvCode());
supplementOrder.setDeptCode(entrustReceEntity.getEntrustDept());
supplementOrder.setInvCode(entrustReceEntity.getEntrustInv());
supplementOrder.setFromType(ConstantStatus.FROM_REVIEW);
supplementOrder.setMainAction(bussinessTypeEntity.getMainAction());
supplementOrder.setAction(bussinessTypeEntity.getAction());
//复制码表
List<IoCodeTempEntity> supplementCodes = new ArrayList<>();
warehouseEntities.forEach(
code -> {
IoCodeTempEntity supplementCode = new IoCodeTempEntity();
BeanUtil.copyProperties(code, supplementCode);
supplementCode.setInvCode(supplementOrder.getInvCode());
supplementCode.setDeptCode(supplementOrder.getDeptCode());
supplementCode.setOrderId(supplementOrderNo);
//查询补单设置
supplementCode.setAction(bussinessTypeEntity.getSupplementOrderType());
supplementCode.setMainAction(bussinessTypeEntity.getMainAction());
supplementCode.setId(null);
supplementCodes.add(supplementCode);
}
);
//更新数据
orderService.insertOrder(supplementOrder);
orderEntity.setUllageSupNo(supplementOrder.getBillNo());
orderService.update(orderEntity);
codeTempService.insertBatch(supplementCodes);
}
public int checkCodeExit(String code, List<IoCodeEntity> codesList) {
if (StrUtil.isNotEmpty(code)) {
code = code.replace("\r\n", "");
@ -215,8 +330,7 @@ public class IoOrderReviewController extends BaseController {
}
public BaseResponse updateReview(IoOrderEntity orderEntity) {
AuthAdmin authAdmin = getUser();
public BaseResponse updateReview(AuthAdmin authAdmin, IoOrderEntity orderEntity) {
orderEntity.setStatus(ConstantStatus.ORDER_STATUS_AUDITED);
orderEntity.setReviewUser(authAdmin.getId() + "");
orderEntity.setUpdateTime(new Date());
@ -230,5 +344,4 @@ public class IoOrderReviewController extends BaseController {
}
}

@ -0,0 +1,135 @@
package com.glxp.api.controller.inv;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageInfo;
import com.glxp.api.annotation.AuthRuleAnnotation;
import com.glxp.api.common.res.BaseResponse;
import com.glxp.api.common.util.ResultVOUtils;
import com.glxp.api.entity.basic.UdiEntity;
import com.glxp.api.entity.basic.UdiProductEntity;
import com.glxp.api.entity.inv.InvProductDetailEntity;
import com.glxp.api.req.basic.FilterUdiInfoRequest;
import com.glxp.api.req.basic.FilterUdiRelRequest;
import com.glxp.api.req.inout.FilterOrderRequest;
import com.glxp.api.req.inv.FilterCodeTraceRequest;
import com.glxp.api.req.inv.FilterInvProductDetailRequest;
import com.glxp.api.res.PageSimpleResponse;
import com.glxp.api.res.basic.UdiRelevanceResponse;
import com.glxp.api.res.inout.IoOrderResponse;
import com.glxp.api.res.inv.UdiTraceResponse;
import com.glxp.api.service.basic.UdiProductService;
import com.glxp.api.service.basic.UdiRelevanceService;
import com.glxp.api.service.inout.IoOrderService;
import com.glxp.api.service.inv.InvProductDetailService;
import com.glxp.api.util.DateUtil;
import com.glxp.api.util.udi.FilterUdiUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
public class UdiTraceController {
@Resource
UdiRelevanceService udiRelevanceService;
@Resource
UdiProductService udiProductService;
@Resource
InvProductDetailService invProductDetailService;
@Resource
IoOrderService orderService;
@AuthRuleAnnotation("")
@GetMapping("udiwarehouse/trace/filter")
public BaseResponse list(FilterCodeTraceRequest filterCodeTraceRequest) {
if (StrUtil.isEmpty(filterCodeTraceRequest.getCode())) {
return ResultVOUtils.error(500, "UDI码不能为空");
}
UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeTraceRequest.getCode());
if (udiEntity == null) {
return ResultVOUtils.error(500, "无效条码");
}
UdiRelevanceResponse udiInfoBean = udiRelevanceService.selectByNameCode(udiEntity.getUdi());
if (udiInfoBean == null) {
return ResultVOUtils.error(500, "耗材字典不存在此产品!");
}
List<UdiProductEntity> udiInfoEntities = udiProductService.findByUuids(udiInfoBean.getUuid());
FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest();
if (udiInfoEntities != null && udiInfoEntities.size() > 1) {
filterInvProductDetailRequest.setRelId(udiInfoBean.getId() + "");
filterInvProductDetailRequest.setBatchNo(udiEntity.getBatchNo());
} else {
filterInvProductDetailRequest.setCode(filterCodeTraceRequest.getCode());
}
filterInvProductDetailRequest.setSupId(filterCodeTraceRequest.getSupId());
List<InvProductDetailEntity> invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest);
if (invProductDetailEntities.size() > 0) {
Map<String, String> filterMap = new HashMap<>();
for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) {
filterMap.put(invProductDetailEntity.getOrderId(), invProductDetailEntity.getOrderId());
}
List<String> orderIds = new ArrayList<>();
for (String key : filterMap.keySet()) {
orderIds.add(key);
}
FilterOrderRequest filterOrderRequest = new FilterOrderRequest();
filterOrderRequest.setOrderIds(orderIds);
List<IoOrderResponse> orderEntities = orderService.filterList(filterOrderRequest);
FilterUdiRelRequest filterUdiInfoRequest = new FilterUdiRelRequest();
filterUdiInfoRequest.setNameCode(udiEntity.getUdi());
List<UdiRelevanceResponse> udiRelevanceResponses = udiRelevanceService.filterUdiGp(filterUdiInfoRequest);
UdiRelevanceResponse udiRelevance = null;
if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0) {
udiRelevance = udiRelevanceResponses.get(0);
}
UdiRelevanceResponse finalUdiRelevance = udiRelevance;
List<UdiTraceResponse> udiTraceResponseList = orderEntities.stream().map(item ->
{
UdiTraceResponse udiTraceResponse = new UdiTraceResponse();
udiTraceResponse.setOrderId(item.getBillNo());
udiTraceResponse.setBillTypeName(item.getBillTypeName());
udiTraceResponse.setFromCorp(item.getFromName());
udiTraceResponse.setActDate(DateUtil.formatDate(item.getCreateTime()));
if (finalUdiRelevance != null) {
udiTraceResponse.setYlqxzcrbarmc(finalUdiRelevance.getYlqxzcrbarmc());
udiTraceResponse.setCpmctymc(finalUdiRelevance.getCpmctymc());
udiTraceResponse.setGgxh(finalUdiRelevance.getGgxh());
InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0);
udiTraceResponse.setBatchNo(invProductDetailEntity.getBatchNo());
udiTraceResponse.setProduceDate(invProductDetailEntity.getProduceDate());
udiTraceResponse.setExpireDate(invProductDetailEntity.getExpireDate());
udiTraceResponse.setCount(invProductDetailEntity.getCount());
}
return udiTraceResponse;
}).collect(Collectors.toList());
PageInfo<UdiTraceResponse> pageInfo;
pageInfo = new PageInfo<>(udiTraceResponseList);
PageSimpleResponse<UdiTraceResponse> pageSimpleResponse = new PageSimpleResponse<>();
pageSimpleResponse.setTotal(pageInfo.getTotal());
pageSimpleResponse.setList(udiTraceResponseList);
return ResultVOUtils.success(pageSimpleResponse);
} else {
return ResultVOUtils.error(500, "未查询到数据!");
}
}
}

@ -141,4 +141,7 @@ public class FilterOrderRequest extends ListPageRequest {
*/
private List<Integer> dealStatuses;
private List<String> orderIds;
}

@ -0,0 +1,16 @@
package com.glxp.api.req.inout;
import lombok.Data;
@Data
public class UpdateExportStatusRequest {
private String orderId;
private Integer exportStatus;
private Integer checkStatus;
private String stockOrderId;
private Integer entrustId;
private boolean entrust;
private String wmsUserId;
private String wmsUserName;
}

@ -0,0 +1,9 @@
package com.glxp.api.req.inv;
import lombok.Data;
@Data
public class FilterCodeTraceRequest {
private String code;
private String supId;
}

@ -0,0 +1,22 @@
package com.glxp.api.res.inv;
import lombok.Data;
@Data
public class UdiTraceResponse {
private String orderId;
private String actDate;
private String mainAction;
private String action;
private String actionName;
private String fromCorp;
private Integer count;
private String cpmctymc;
private String ylqxzcrbarmc;
private String ggxh;
private String batchNo;
private String produceDate;
private String expireDate;
private String billTypeName;
}

@ -31,6 +31,7 @@ public interface IoOrderService {
int deleteByBillNo(String billNo);
/**
*
*

@ -59,6 +59,12 @@
#{item}
</foreach>
</if>
<if test="orderIds != null and orderIds.size() != 0">
AND io.billNo in
<foreach collection="orderIds" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="status != null">
AND status = #{status}
</if>

Loading…
Cancel
Save