Commit f351910f hc

add:备品仓单据获取和入库出库接口添加

1 个父辈 f405289c
正在显示 37 个修改的文件 包含 1180 行增加178 行删除
......@@ -218,6 +218,15 @@ public class DataInitManager {
addNewFunctionMenu(4, wip, "transferInventory", "转库", "transferInventory", "SemiFinishProducts/transferInventory/index", "transferInventory", functionMenuMap);
Menu spare = Menu.CreatePMenu("备件仓", 4, "spare", 2, "spare", null);
Menu spareReceipt = Menu.CreatePMenu("单据操作", 3, "receipt", 2, "spareReceipt", spare);
addNewFunctionMenu(1, spareReceipt, "receiptIn", "入库单", "receiptIn", "spareWarehouse/receipt/ReceiptIn", "receiptIn", functionMenuMap);
addNewFunctionMenu(2, spareReceipt, "ReceiptOut", "出库单", "ReceiptOut", "spareWarehouse/receipt/ReceiptOut", "ReceiptOut", functionMenuMap);
addNewFunctionMenu(3, spareReceipt, "ReceiptReturn", "退库单", "ReceiptReturn", "spareWarehouse/receipt/ReceiptReturn", "ReceiptReturn", functionMenuMap);
addNewFunctionMenu(1, spare, "putIn", "物料入库", "putIn", "spareWarehouse/putIn/index", "putIn", functionMenuMap);
addNewFunctionMenu(2, spare, "checkout", "物料出库", "checkout", "spareWarehouse/checkout/index", "checkout", functionMenuMap);
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null);
......
......@@ -30,4 +30,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> {
List<Barcode> findByQuery(Query query, Pageable pageable);
int countByQuery(Query query);
}
package com.neotel.smfcore.core.barcode.service.manager.impl;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
......@@ -19,6 +20,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
......@@ -212,6 +214,7 @@ public class BarcodeManagerImpl implements IBarcodeManager {
return barcodeDao.countByQuery(query);
}
protected boolean validateComponent(Barcode barcode) {
return componentManager.findOneByPN(barcode.getPartNumber()) != null;
}
......
......@@ -74,7 +74,7 @@ public class CodeResolve {
codeBeanFromRule.setError(null,null);
codeBeanFromRule.setCodeStr(barcode.getBarcode());
codeBeanFromRule.setBarcode(barcode);
// Component component = componentManager.findByPartNumber(barcode.getPartNumber());
// Component component = componentManager.findByPartNumberInSubCodeList(barcode.getPartNumber());
// codeBeanFromRule.setShowImg(component.getShowImg());
return codeBeanFromRule;
......
......@@ -206,12 +206,12 @@ public class WarehouseController {
String newCodeStr = "=" + station.getPlatsize() + "x" + station.getHeight() + "=" + barcodeStr;
CodeBean codeBean = codeResolve.resolveSingleCode(newCodeStr);
Barcode barcode = codeBean.getBarcode();
try {
smfApi.canPutInAfterResolve(barcode);
} catch (ValidateException e) {
e.printStackTrace();
return ResultBean.newErrorResult(-2, "", e.getMessage());
}
// try {
// smfApi.canPutInAfterResolve(barcode);
// } catch (ValidateException e) {
// e.printStackTrace();
// return ResultBean.newErrorResult(-2, "", e.getMessage());
// }
return ResultBean.newOkResult("");
}
......
......@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.api.listener.DefaultSmfApiListener;
import com.neotel.smfcore.core.inList.service.po.InList;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.LuxsanSpApiResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.*;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetReturnInventoryResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseResult;
......@@ -126,45 +127,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
try {
String url = GetSpareNoUrl + getQueryStr(request);
log.info("获取入库单号请求为:" + url);
//String resJsonStr = HttpHelper.sendGet(url);
String resJsonStr = "{\n" +
" \"msg\": \"操作成功\",\n" +
" \"code\": 200,\n" +
" \"data\": [\n" +
" {\n" +
" \"createBy\": \"76049701\",\n" +
" \"createTime\": \"2024-05-22 14:16:05\",\n" +
" \"spareNo\": \"CL2024052100041B\",\n" +
" \"whCode\": \"MLB-MFG-003\",\n" +
" \"status\": \"0\",\n" +
" \"deptId\": 102,\n" +
" \"detailList\": [\n" +
" {\n" +
" \"partno\": \"1950090020044V\",\n" +
" \"partname\": \"稀释剂|HYUAN|1578|500ml/瓶\",\n" +
" \"inQty\": 20\n" +
" }\n" +
" ],\n" +
" \"whDesc\": \"B2 4F MLB日常耗材\"\n" +
" },\n" +
" {\n" +
" \"createBy\": \"76049701\",\n" +
" \"createTime\": \"2024-05-22 14:16:05\",\n" +
" \"spareNo\": \"111111\",\n" +
" \"whCode\": \"MLB-MFG-003\",\n" +
" \"status\": \"0\",\n" +
" \"deptId\": 102,\n" +
" \"detailList\": [\n" +
" {\n" +
" \"partno\": \"1950090020044V\",\n" +
" \"partname\": \"稀释剂|HYUAN|1578|500ml/瓶\",\n" +
" \"inQty\": 20\n" +
" }\n" +
" ],\n" +
" \"whDesc\": \"B2 4F MLB日常耗材\"\n" +
" }\n" +
" ]\n" +
"}";
String resJsonStr = HttpHelper.sendGet(url);
log.info("获取入库单号返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
if (lizhenApiResult.getCode() != 200) {
......
package com.neotel.smfcore.custom.luxsan_sp.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 请求类,用于获取退库库存的请求参数
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GetReturnInventoryRequest {
/**
* 功能部门
......
package com.neotel.smfcore.custom.luxsan_sp.api.bean.request;
import lombok.Data;
@Data
public class GetReturnInventoryResult {
/**
* 功能部门
*/
private String functionDept;
/**
* 厂区id
*/
private String deptId;
}
package com.neotel.smfcore.custom.luxsan_sp.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GetUnclaimedRequest {
/**
......
package com.neotel.smfcore.custom.luxsan_sp.api.bean.result;
import com.neotel.smfcore.custom.luxsan_sp.bean.UnclaimedDetail;
import lombok.Data;
import java.util.Date;
......@@ -34,5 +35,5 @@ public class GetUnclaimedResult {
/**
* 明细列表,以列表形式返回
*/
private List<SpareApplyDetail> spareApplyDetailList;
private List<UnclaimedDetail> spareApplyDetail;
}
package com.neotel.smfcore.custom.luxsan_sp.bean;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class BaseNo extends BasePo {
private String no;
//料号明细
private List<SpareNoDetail> detailList;
//仓库代码
private String whCode;
//厂区id
private String deptId;
private Integer spareStatus = SpareNostatus.NEW_STATUS;
public boolean isExecuting() {
return spareStatus == SpareNostatus.EXECUTING_STATUS;
}
public void updateDetailList(SpareNoDetail spareNoDetail) {
if (detailList == null) {
detailList = new ArrayList<>();
}
if (detailList == null || detailList.isEmpty()) {
detailList.add(spareNoDetail);
} else {
//移除
detailList.removeIf(t -> t.getPartno().equals(spareNoDetail.getPartno()));
detailList.add(spareNoDetail);
}
}
}
package com.neotel.smfcore.custom.luxsan_sp.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import java.util.Date;
/**
* 退库单
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReturnInventoryNo extends BaseNo {
/**
* 创建时间
*/
private Date createTime;
/**
* 单据号
*/
private String orderNo;
/**
* 料号
*/
private String partno;
/**
* 品名
*/
private String partname;
/**
* 储位
*/
private String locationCode;
/**
* 功能部门
*/
private String functionDept;
/**
* 数量
*/
private Integer qty;
private Integer alyQty;
}
package com.neotel.smfcore.custom.luxsan_sp.bean;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class SpareNo extends BasePo {
public class SpareNo extends BaseNo {
private String createBy;
......@@ -18,39 +16,13 @@ public class SpareNo extends BasePo {
//单据号
private String spareNo;
//仓库代码
private String whCode;
//0表示待入库
private String status;
//厂区id
private String deptId;
//料号明细
private List<SpareNoDetail> detailList;
//仓库描述
private String whDesc;
private int spareNostatus;
public boolean isExecutIng(){
return spareNostatus == SpareNostatus.EXECUTING_STATUS;
}
public void updateDetailList(SpareNoDetail spareNoDetail) {
if (detailList == null) {
detailList = new ArrayList<>();
}
if (detailList == null || detailList.isEmpty()) {
detailList.add(spareNoDetail);
} else {
//移除
detailList.removeIf(t -> t.getPartno().equals(spareNoDetail.getPartno()));
detailList.add(spareNoDetail);
}
}
}
......@@ -12,6 +12,6 @@ public class SpareNoDetail {
private int inQty;
private int alrInQty; //已经放入数量
private int alrInQty = 0; //已经放入数量
}
package com.neotel.smfcore.custom.luxsan_sp.bean;
import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import lombok.Data;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class Unclaimed extends BasePo {
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 1表示待领取
*/
private String status;
private Integer unclaimedStatus = SpareNostatus.NEW_STATUS;
/**
* 单据号
*/
private String orderNo;
/**
* 功能部门
*/
private String functionDept;
/**
* 厂区id
*/
private Integer deptId;
/**
* 明细列表,以列表形式返回
*/
private List<UnclaimedDetail> detailList;
public boolean isExecuting() {
return unclaimedStatus == SpareNostatus.EXECUTING_STATUS;
}
public void updateDetailList(UnclaimedDetail unclaimedDetail) {
if (detailList == null) {
detailList = new ArrayList<>();
}
if (detailList == null || detailList.isEmpty()) {
detailList.add(unclaimedDetail);
} else {
//移除
detailList.removeIf(t -> t.getPartno().equals(unclaimedDetail.getPartno()));
detailList.add(unclaimedDetail);
}
}
}
package com.neotel.smfcore.custom.luxsan_sp.bean;
import io.swagger.models.auth.In;
import lombok.Data;
@Data
public class UnclaimedDetail {
/**
* 单据号
*/
private String orderNo;
/**
* 厂区id
*/
private Integer deptId;
/**
* 料号
*/
private String partno;
/**
* 料名,例如红色/PVC
*/
private String partname;
/**
* 申请数量
*/
private Integer applyQty;
/**
* 预计数量
*/
private Integer expectQty;
private Integer alrInQty = 0;
}
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import com.neotel.smfcore.custom.luxsan_sp.util.CodeUtil;
import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ApiOperation("备件仓 料箱入库")
import java.util.*;
@ApiOperation("备件仓 料箱出库")
@RestController
@RequestMapping("/spBoxCheckOut")
public class SpBoxCheckOutController {
@Autowired
private CodeResolve codeResolve;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IUnclaimedManager unclaimedManager;
@Autowired
private TaskService taskService;
@Autowired
private OrderNoCache orderNoCache;
//以料格为维度,一个料格
@ApiOperation("物料拿出料格")
@RequestMapping("/reelOutBox")
@AnonymousAccess
public synchronized ResultBean reelOutBox(@RequestBody Map<String, String> paramMap) {
String boxStr = paramMap.get("boxStr");
String codeStr = paramMap.get("codeStr");
String binCodeStr = paramMap.get("binCodeStr");
//解析料箱信息
Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
if (boxBarcode == null) {
return ResultBean.newErrorResult(-1, "", boxStr + "不是有效的条码");
}
//解析料格信息
Barcode binBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + binCodeStr);
if (binBarcode == null) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是有效的条码");
}
//1.判断料格信息与料箱信息是否匹配
if (!binBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", binCodeStr + "不是当前料箱:" + boxStr + "的隔口");
}
//2.解析条码信息
CodeBarcode codeBarcode = CodeUtil.getCodeBarcode(codeStr);
if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", codeStr + "不是有效的条码");
}
//判断有没有正在执行出库单
Unclaimed orderNo = orderNoCache.getExecutingOrderNo();
if (ObjectUtil.isAllEmpty(orderNo)) {
return ResultBean.newErrorResult(-1,"","没有找到正在执行的出库单");
}
String binPartNumber = binBarcode.getPartNumber();
String codePartNumber = codeBarcode.getPartNumber();
//判断是否已经完成了
boolean finish = true;
//判断当前出库的是否和出库单一样
if (orderNo != null) {
List<UnclaimedDetail> detailList = orderNo.getDetailList();
UnclaimedDetail unclaimedDetail = null;
for (UnclaimedDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(codePartNumber)) {
if (detail.getAlrInQty() + codeBarcode.getQty() <= detail.getApplyQty()) {
unclaimedDetail = detail;
break;
}
}
}
if (unclaimedDetail == null) {
return ResultBean.newErrorResult(-1,"",codePartNumber+"没有入出库需求,请检查是否存在或者不符合入出库数量");
}
//数量加1
unclaimedDetail.setAlrInQty(unclaimedDetail.getAlrInQty()+ codeBarcode.getQty());
orderNo.updateDetailList(unclaimedDetail);
for (UnclaimedDetail noDetail : orderNo.getDetailList()) {
if (noDetail.getApplyQty() < noDetail.getAlrInQty()){
finish = false;
}
}
if (finish){
orderNo.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
orderNoCache.addToMap(orderNo);
unclaimedManager.save(orderNo);
}
//4.开始放入料箱
binBarcode.setAmount(binBarcode.getAmount()-codeBarcode.getQty());
boxBarcode.updateSubCodes(binBarcode);
barcodeManager.save(boxBarcode);
if (!finish) {
return ResultBean.newOkResult("");
}
//5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){
return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
}
//6.生成出库任务
DataLog dataLog = new DataLog();
dataLog.setPartNumber(codeBarcode.getPartNumber());
dataLog.setOperator(SecurityUtils.getLoginUsername());
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(binBarcode.getBarcode());
dataLog.setType(OP.PUT_IN);
taskService.updateFinishedTask(dataLog);
pos.setBarcode(boxBarcode);
pos.setUsed(true);
storagePosManager.save(pos);
return ResultBean.newOkResult("");
}
}
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils;
......@@ -17,14 +18,12 @@ import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.CodeBarcode;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.CodeUtil;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.impl.ReturnManagerImpl;
import com.neotel.smfcore.custom.luxsan_sp.util.*;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -56,9 +55,15 @@ public class SpBoxPutInController {
private SpareNoCache spareNoCache;
@Autowired
private ReturnNoCache returnNoCache;
@Autowired
private ISpareNoManager spareNoManager;
@Autowired
private IReturnNoManager returnNoManager;
@Autowired
private TaskService taskService;
@ApiOperation("获取当前工位的料箱信息")
......@@ -130,11 +135,12 @@ public class SpBoxPutInController {
}
//判断有没有正在执行入库单
//TODO 等到做退库单的时候,再判断有没有正在执行的入库单
SpareNo spareNo = spareNoCache.getExecutIngSpareNo();
if (spareNo == null){
ReturnInventoryNo returnInventoryNo = returnNoCache.getExecutingOrderNo();
if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) {
return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
}
BaseNo baseNo = ObjectUtil.isEmpty(spareNo) ? returnInventoryNo : spareNo;
//3.判断与当前隔口的料号是否匹配
......@@ -152,11 +158,11 @@ public class SpBoxPutInController {
}
}
//判断是否已经完成了
boolean finish = true;
//判断当前入库的是否和入库单一样
//TODO 后续需要判断是否和退库单一样
if (spareNo != null) {
List<SpareNoDetail> detailList = spareNo.getDetailList();
if (baseNo != null) {
List<SpareNoDetail> detailList = baseNo.getDetailList();
SpareNoDetail spareNoDetail = null;
......@@ -175,40 +181,48 @@ public class SpBoxPutInController {
}
//先调用入库接口
SpareInHourseDetail detail = new SpareInHourseDetail();
detail.setInQty(codeBarcode.getQty());
detail.setPartno(codeBarcode.getPartNumber());
detail.setLocationCode(binBarcode.getBarcode());
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(spareNo.getDeptId(),spareNo.getSpareNo(),spareNo.getWhCode(), Arrays.asList(detail)));
if (baseNo.getClass().equals(SpareNo.class)) {
SpareInHourseDetail detail = new SpareInHourseDetail();
detail.setInQty(codeBarcode.getQty());
detail.setPartno(codeBarcode.getPartNumber());
detail.setLocationCode(binBarcode.getBarcode());
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), Arrays.asList(detail)));
}
//数量加1
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty());
spareNo.updateDetailList(spareNoDetail);
baseNo.updateDetailList(spareNoDetail);
//判断是否已经完成了
boolean finish = true;
for (SpareNoDetail noDetail : spareNo.getDetailList()) {
for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() < noDetail.getAlrInQty()){
finish = false;
}
}
if (finish){
spareNo.setSpareNostatus(SpareNostatus.CLOSE_STATUS);
baseNo.setSpareStatus(SpareNostatus.CLOSE_STATUS);
}
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
}else {
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
}
//4.开始放入料箱
binBarcode.setAmount(binBarcode.getAmount()+codeBarcode.getQty());
boxBarcode.updateSubCodes(binBarcode);
barcodeManager.save(boxBarcode);
// if (!finish) {
// return ResultBean.newOkResult("");
// }
//5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){
......
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetReturnInventoryRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetReturnInventoryResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.ReturnNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.ir.ReturnNode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/returnInventory")
public class SpReturnInventoryController {
@Autowired
private ReturnNoCache returnNoCache;
@Autowired
private SpareNoCache spareNoCache;
@Autowired
private IReturnNoManager returnNoManager;
@ApiOperation("获取正在执行退库单")
@RequestMapping("/getActiveReturnNo")
@AnonymousAccess
public ResultBean getActiveReturnNo() {
List<ReturnInventoryNo> results = new ArrayList<>();
results.add(returnNoCache.getExecutingOrderNo());
return ResultBean.newOkResult(results);
}
@ApiOperation("获取退库单")
@RequestMapping("/getAllReturnNo")
@AnonymousAccess
public ResultBean getAllReturnNo(String deptId, String functionDept) {
List<GetReturnInventoryResult> resultList = LuxsanSpApi.getReturnInventory(new GetReturnInventoryRequest(deptId, functionDept));
List<ReturnInventoryNo> returnInventoryNos = new ArrayList<>();
for (GetReturnInventoryResult result : resultList) {
ReturnInventoryNo returnInventoryNo = returnNoCache.getByOrderNo(result.getOrderNo());
if (returnInventoryNo == null) {
returnInventoryNo = returnNoCache.getOrderNoResultToReturnInventoryNo(result);
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
returnInventoryNos.add(returnInventoryNo);
}
return ResultBean.newOkResult(returnInventoryNos);
}
@ApiOperation("选中退库单")
@RequestMapping("/checkReturnNo")
@AnonymousAccess
public ResultBean checkReturnNo(String spareNoStr) {
//判断有没有正在执行的任务单
String no = spareNoCache.getExecutIngSpareNoStr();
String reNo = returnNoCache.getExecutingOrderNoStr();
if (!StringUtils.isAllEmpty(no, reNo)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的入库单:" + no);
}
ReturnInventoryNo returnInventoryNo = returnNoCache.getByOrderNo(spareNoStr);
if (returnInventoryNo == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的退库单信息");
}
returnInventoryNo.setSpareStatus(SpareNostatus.EXECUTING_STATUS);
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
return ResultBean.newOkResult("");
}
@ApiOperation("放弃退库单")
@RequestMapping("/abandonReturnNo")
@AnonymousAccess
public ResultBean abandonReturnNo(String spareNoStr) {
ReturnInventoryNo returnInventoryNo = returnNoCache.getByOrderNo(spareNoStr);
if (ObjectUtil.isAllEmpty(returnInventoryNo)) {
return ResultBean.newErrorResult(-1, "", "未找到对应的退库单信息");
}
if (!returnInventoryNo.isExecuting()) {
return ResultBean.newErrorResult(-1, "", spareNoStr + "不是正在执行中,不允许放弃");
}
returnInventoryNo.setSpareStatus(SpareNostatus.ABANDON_STATUS);
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
return ResultBean.newOkResult("");
}
}
package com.neotel.smfcore.custom.luxsan_sp.controller;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetSpareNoRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.ReturnNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
......@@ -30,6 +39,27 @@ public class SpSpareNoController {
@Autowired
private ISpareNoManager spareNoManager;
@Autowired
private ReturnNoCache returnNoCache;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private TaskService taskService;
@Autowired
private IStoragePosManager storagePosManager;
@ApiOperation("获取正在执行入库单")
@RequestMapping("/getActiveSpareNo")
@AnonymousAccess
public ResultBean getActiveSpareNo() {
List<SpareNo> results = new ArrayList<>();
results.add(spareNoCache.getExecutIngSpareNo());
return ResultBean.newOkResult(results);
}
@ApiOperation("获取入库单")
@RequestMapping("/getAllSpareNo")
......@@ -56,7 +86,8 @@ public class SpSpareNoController {
public ResultBean checkSpareNo(String spareNoStr) {
//判断有没有正在执行的任务单
String no = spareNoCache.getExecutIngSpareNoStr();
if (StringUtils.isNotEmpty(no)) {
String reNo = returnNoCache.getExecutingOrderNoStr();
if (!StringUtils.isAllEmpty(no, reNo)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的入库单:" + no);
}
......@@ -64,8 +95,7 @@ public class SpSpareNoController {
if (spareNo == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
}
spareNo.setSpareNostatus(SpareNostatus.EXECUTING_STATUS);
spareNo.setSpareStatus(SpareNostatus.EXECUTING_STATUS);
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
return ResultBean.newOkResult("");
......@@ -82,13 +112,15 @@ public class SpSpareNoController {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
}
if (!spareNo.isExecutIng()) {
if (!spareNo.isExecuting()) {
return ResultBean.newErrorResult(-1, "", spareNoStr + "不是正在执行中,不允许放弃");
}
spareNo.setSpareNostatus(SpareNostatus.ABANDON_STATUS);
spareNo.setSpareStatus(SpareNostatus.ABANDON_STATUS);
spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo);
return ResultBean.newOkResult("");
}
}
package com.neotel.smfcore.custom.luxsan_sp.controller;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetUnclaimedRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/unclaimed")
public class SpUnclaimedController {
@Autowired
private CodeResolve codeResolve;
@Autowired
private IStoragePosManager storagePosManager;
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private OrderNoCache orderNoCache;
@Autowired
private IUnclaimedManager unclaimedManager;
@Autowired
private TaskService taskService;
@ApiOperation("获取正在执行出库单")
@RequestMapping("/getActiveOrderNo")
@AnonymousAccess
public ResultBean getActiveOrderNo() {
List<Unclaimed> results = new ArrayList<>();
results.add(orderNoCache.getExecutingOrderNo());
return ResultBean.newOkResult(results);
}
@ApiOperation("获取出库单")
@RequestMapping("/getAllUnclaimed")
@AnonymousAccess
public ResultBean getAllUnclaimed(String deptId, String functionDept) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(deptId, functionDept));
List<Unclaimed> unclaimedList = new ArrayList<>();
for (GetUnclaimedResult result : resultList) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(result.getOrderNo());
if (unclaimed == null) {
unclaimed = orderNoCache.getOrderNoResultToUnclaimed(result);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
}
unclaimedList.add(unclaimed);
}
return ResultBean.newOkResult(unclaimedList);
}
@ApiOperation("选中出库单")
@RequestMapping("/checkOrderNo")
@AnonymousAccess
public ResultBean checkOrderNo(String orderNoStr) {
//判断有没有正在执行的任务单
String no = orderNoCache.getExecutingOrderNoStr();
if (StringUtils.isNotEmpty(no)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的出库单:" + no);
}
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr);
if (unclaimed == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息");
}
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
return ResultBean.newOkResult("");
}
@ApiOperation("放弃出库单")
@RequestMapping("/abandonOrderNo")
@AnonymousAccess
public ResultBean abandonOrderNo(String orderNoStr) {
Unclaimed unclaimed = orderNoCache.getByOrderNo(orderNoStr);
if (unclaimed == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的出库单信息");
}
if (!unclaimed.isExecuting()) {
return ResultBean.newErrorResult(-1, "", orderNoStr + "不是正在执行中,不允许放弃");
}
unclaimed.setUnclaimedStatus(SpareNostatus.ABANDON_STATUS);
orderNoCache.addToMap(unclaimed);
unclaimedManager.save(unclaimed);
return ResultBean.newOkResult("");
}
}
......@@ -9,4 +9,12 @@ public class SpareNostatus {
public static final int CLOSE_STATUS = 2;
public static final int ABANDON_STATUS = 3;
// 入库
public static final Integer TYPE_PUTIN = 1;
// 退库
public static final Integer TYPE_RETURN = 2;
// 出库
public static final Integer TYPE_CHECKOUT = 3;
}
package com.neotel.smfcore.custom.luxsan_sp.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface ReturnDao extends IBaseDao {
}
package com.neotel.smfcore.custom.luxsan_sp.service.dao;
import com.neotel.smfcore.common.base.IBaseDao;
public interface UnclaimedDao extends IBaseDao {
}
package com.neotel.smfcore.custom.luxsan_sp.service.dao.impl;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.ReturnDao;
import org.springframework.stereotype.Service;
@Service
public class ReturnDaoImpl extends AbstractBaseDao implements ReturnDao {
@Override
public Class getEntityClass() {
return ReturnInventoryNo.class;
}
}
package com.neotel.smfcore.custom.luxsan_sp.service.dao.impl;
import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.SpareNoDao;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.UnclaimedDao;
import org.springframework.stereotype.Service;
@Service
public class UnclaimedNoDaoImpl extends AbstractBaseDao implements UnclaimedDao {
@Override
public Class getEntityClass() {
return Unclaimed.class;
}
}
package com.neotel.smfcore.custom.luxsan_sp.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import java.util.List;
import java.util.Map;
public interface IReturnNoManager extends IBaseManager<ReturnInventoryNo> {
ReturnInventoryNo getByOrderNo(String returnNo);
List<ReturnInventoryNo> findAll();
}
......@@ -3,6 +3,11 @@ package com.neotel.smfcore.custom.luxsan_sp.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import java.util.List;
import java.util.Map;
public interface ISpareNoManager extends IBaseManager<SpareNo> {
SpareNo getBySpareNo(String spareNo);
List<SpareNo> findAll();
}
package com.neotel.smfcore.custom.luxsan_sp.service.manager;
import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import java.util.List;
public interface IUnclaimedManager extends IBaseManager<Unclaimed> {
Unclaimed getByOrderNo(String OrderNo);
List<Unclaimed> findAll();
}
package com.neotel.smfcore.custom.luxsan_sp.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.ReturnDao;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.UnclaimedDao;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Slf4j
@Service
public class ReturnManagerImpl implements IReturnNoManager {
@Autowired
private ReturnDao returnDao;
@Override
public List<ReturnInventoryNo> findAll() {
return returnDao.findAll();
}
@Override
public ReturnInventoryNo getByOrderNo(String orderNo) {
return returnDao.findOne(new Query(Criteria.where("orderNo").is(orderNo)));
}
@Override
public ReturnInventoryNo get(String id) {
return null;
}
@Override
public ReturnInventoryNo save(ReturnInventoryNo object) throws ValidateException {
return returnDao.save(object);
}
@Override
public void delete(ReturnInventoryNo object) throws ValidateException {
}
@Override
public PageData<ReturnInventoryNo> findByPage(Query query, Pageable pageable) {
return null;
}
@Override
public List<ReturnInventoryNo> findByQuery(Query query) {
return Collections.emptyList();
}
}
......@@ -12,6 +12,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Slf4j
......@@ -47,6 +48,11 @@ public class SpareNoManagerImpl implements ISpareNoManager {
}
@Override
public List<SpareNo> findAll() {
return spareNoDao.findAll();
}
@Override
public SpareNo getBySpareNo(String spareNo) {
return spareNoDao.findOne(new Query(Criteria.where("spareNo").is(spareNo)));
}
......
package com.neotel.smfcore.custom.luxsan_sp.service.manager.impl;
import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.service.dao.UnclaimedDao;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Slf4j
@Service
public class UnclaimedManagerImpl implements IUnclaimedManager {
@Autowired
private UnclaimedDao unclaimedDao;
@Override
public Unclaimed get(String id) {
return null;
}
@Override
public Unclaimed save(Unclaimed object) throws ValidateException {
return unclaimedDao.save(object);
}
@Override
public void delete(Unclaimed object) throws ValidateException {
}
@Override
public PageData<Unclaimed> findByPage(Query query, Pageable pageable) {
return null;
}
@Override
public List<Unclaimed> findByQuery(Query query) {
return Collections.emptyList();
}
@Override
public Unclaimed getByOrderNo(String orderNo) {
return unclaimedDao.findOne(new Query(Criteria.where("orderNo").is(orderNo)));
}
@Override
public List<Unclaimed> findAll() {
return unclaimedDao.findAll();
}
}
package com.neotel.smfcore.custom.luxsan_sp.util;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.Unclaimed;
import com.neotel.smfcore.custom.luxsan_sp.bean.UnclaimedDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@Service
public class OrderNoCache {
public OrderNoCache(ApplicationContext applicationContext) {
IUnclaimedManager unclaimedManager = applicationContext.getBean(IUnclaimedManager.class);
// 刷新缓存
unclaimedManager.findAll().forEach(
unclaimed -> cacheMap.put(unclaimed.getOrderNo(), unclaimed));
}
@Autowired
private IUnclaimedManager unclaimedManager;
Map<String, Unclaimed> cacheMap = new ConcurrentHashMap<>();
public void addToMap(Unclaimed unclaimed){
cacheMap.put(unclaimed.getOrderNo(),unclaimed);
}
public Unclaimed getByOrderNo(String orderNo) {
Unclaimed unclaimed = cacheMap.get(orderNo);
if (unclaimed == null){
unclaimed = unclaimedManager.getByOrderNo(orderNo);
if (unclaimed != null){
cacheMap.put(unclaimed.getOrderNo(), unclaimed);
}
}
return unclaimed;
}
public String getExecutingOrderNoStr(){
for (String orderNo : cacheMap.keySet()) {
Unclaimed unclaimed = cacheMap.get(orderNo);
if (unclaimed.getUnclaimedStatus() == SpareNostatus.EXECUTING_STATUS){
return orderNo;
}
}
return null;
}
public Unclaimed getExecutingOrderNo(){
for (String orderNo : cacheMap.keySet()) {
Unclaimed unclaimed = cacheMap.get(orderNo);
if (Integer.parseInt(unclaimed.getStatus()) == SpareNostatus.EXECUTING_STATUS){
return unclaimed;
}
}
return null;
}
public Unclaimed getOrderNoResultToUnclaimed(GetUnclaimedResult result) {
Unclaimed unclaimed = new Unclaimed();
BeanUtils.copyProperties(result, unclaimed);
unclaimed.setUnclaimedStatus(SpareNostatus.NEW_STATUS);
List<UnclaimedDetail> detailList = new ArrayList<>();
for (UnclaimedDetail detail : result.getSpareApplyDetail()) {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setApplyQty(detail.getApplyQty());
unclaimedDetail.setAlrInQty(0);
BeanUtils.copyProperties(detail, unclaimedDetail);
detailList.add(unclaimedDetail);
}
unclaimed.setDetailList(detailList);
return unclaimed;
}
public void updateCacheAndDB(String orderNo, Unclaimed unclaimed) {
cacheMap.put(orderNo, unclaimed);
unclaimedManager.save(unclaimed);
}
}
package com.neotel.smfcore.custom.luxsan_sp.util;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetReturnInventoryResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.ReturnInventoryNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IUnclaimedManager;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class ReturnNoCache {
public ReturnNoCache(ApplicationContext applicationContext) {
IReturnNoManager returnNoManager = applicationContext.getBean(IReturnNoManager.class);
// 刷新缓存
returnNoManager.findAll().forEach(
returnNo -> cacheMap.put(returnNo.getOrderNo(), returnNo));
}
@Autowired
private IReturnNoManager returnNoManager;
Map<String, ReturnInventoryNo> cacheMap = new ConcurrentHashMap<>();
public void addToMap(ReturnInventoryNo returnInventoryNo){
cacheMap.put(returnInventoryNo.getOrderNo(), returnInventoryNo);
}
public ReturnInventoryNo getByOrderNo(String orderNo) {
ReturnInventoryNo returnInventoryNo = cacheMap.get(orderNo);
if (returnInventoryNo == null){
returnInventoryNo = returnNoManager.getByOrderNo(orderNo);
if (returnInventoryNo != null){
cacheMap.put(returnInventoryNo.getOrderNo(), returnInventoryNo);
}
}
return returnInventoryNo;
}
public String getExecutingOrderNoStr(){
for (ReturnInventoryNo returnInventoryNo : cacheMap.values()) {
if (ObjectUtil.isNotNull(returnInventoryNo) && returnInventoryNo.isExecuting()) {
return returnInventoryNo.getOrderNo();
}
}
return null;
}
public ReturnInventoryNo getExecutingOrderNo(){
for (ReturnInventoryNo returnInventoryNo : cacheMap.values()) {
if (ObjectUtil.isNotNull(returnInventoryNo) && returnInventoryNo.isExecuting()) {
return returnInventoryNo;
}
}
return null;
}
public ReturnInventoryNo getOrderNoResultToReturnInventoryNo(GetReturnInventoryResult result) {
ReturnInventoryNo returnInventoryNo = new ReturnInventoryNo();
BeanUtils.copyProperties(result, returnInventoryNo);
returnInventoryNo.setNo(result.getOrderNo());
returnInventoryNo.setSpareStatus(SpareNostatus.NEW_STATUS);
List<SpareNoDetail> detailList = new ArrayList<>();
SpareNoDetail detail = new SpareNoDetail();
detail.setPartno(returnInventoryNo.getPartno());
detail.setPartname(returnInventoryNo.getPartname());
detail.setInQty(returnInventoryNo.getQty());
detail.setAlrInQty(0);
detailList.add(detail);
returnInventoryNo.setDetailList(detailList);
return returnInventoryNo;
}
public void updateCacheAndDB(String orderNo, ReturnInventoryNo returnInventoryNo) {
cacheMap.put(orderNo, returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
}
......@@ -8,16 +8,23 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.util.bean.BoxTaskDetail;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
@Slf4j
@Service
public class SpBoxUtil {
private static BoxTaskDetail boxTaskDetail;
public void setBoxTaskDetail(BoxTaskDetail boxTaskDetail) {
this.boxTaskDetail = boxTaskDetail;
}
private static IStoragePosManager storagePosManager;
......@@ -48,70 +55,51 @@ public class SpBoxUtil {
List<Barcode> subCodeList = barcode.getSubCodeList();
String boxStr = barcode.getBarcode();
List<Object> par1 = new ArrayList<>();
par1.add(1); //隔口号
par1.add(getAmount(subCodeList,boxStr+"-01")); //数量
par1.add(getPartNumber(subCodeList,boxStr+"-01")); //料号
List<Object> par2 = new ArrayList<>();
par2.add(2);
par2.add(getAmount(subCodeList,boxStr+"-02"));
par2.add(getPartNumber(subCodeList,boxStr+"-02"));
List<Object> par3 = new ArrayList<>();
par3.add(3);
par3.add(getAmount(subCodeList,boxStr+"-03"));
par3.add(getPartNumber(subCodeList,boxStr+"-03"));
List<Object> par4 = new ArrayList<>();
par4.add(4);
par4.add(getAmount(subCodeList,boxStr+"-04"));
par4.add(getPartNumber(subCodeList,boxStr+"-04"));
List<Object> par5 = new ArrayList<>();
par5.add(5);
par5.add(getAmount(subCodeList,boxStr+"-05"));
par5.add(getPartNumber(subCodeList,boxStr+"-05"));
List<Object> par6 = new ArrayList<>();
par6.add(6);
par6.add(getAmount(subCodeList,boxStr+"-06"));
par6.add(getPartNumber(subCodeList,boxStr+"-06"));
if (!boxTaskDetail.getBoxBarcode().equals(boxStr)) {
return null;
}
List<List<Object>> pars = new ArrayList<>();
for (int i = 1; i <= 6; i++) {
List<Object> par = new ArrayList<>();
par.add(i); //隔口号
par.add(getAmount(subCodeList,boxStr+"-0"+i)); //数量
par.add(getPartNumber(subCodeList,boxStr+"-0"+i)); //料号
pars.add(par);
}
if (boxStr.startsWith("CS")) {
if ("A".equals(suffix)) {
resultList.add(par2);
resultList.add(par4);
resultList.add(par6);
resultList.add(par1);
resultList.add(par3);
resultList.add(par5);
resultList.add(pars.get(2));
resultList.add(pars.get(4));
resultList.add(pars.get(6));
resultList.add(pars.get(1));
resultList.add(pars.get(3));
resultList.add(pars.get(5));
} else if ("B".equals(suffix)) {
resultList.add(par5);
resultList.add(par3);
resultList.add(par1);
resultList.add(par6);
resultList.add(par4);
resultList.add(par2);
resultList.add(pars.get(5));
resultList.add(pars.get(3));
resultList.add(pars.get(1));
resultList.add(pars.get(6));
resultList.add(pars.get(4));
resultList.add(pars.get(2));
}
} else if (boxStr.startsWith("CB")) {
if ("A".equals(suffix)) {
resultList.add(par2);
resultList.add(par4);
resultList.add(par1);
resultList.add(par3);
resultList.add(pars.get(2));
resultList.add(pars.get(4));
resultList.add(pars.get(1));
resultList.add(pars.get(3));
} else if ("B".equals(suffix)) {
resultList.add(par3);
resultList.add(par1);
resultList.add(par4);
resultList.add(par2);
resultList.add(pars.get(3));
resultList.add(pars.get(1));
resultList.add(pars.get(4));
resultList.add(pars.get(2));
}
} else if (boxStr.startsWith("CM")) {
if ("A".equals(suffix)) {
resultList.add(par1);
resultList.add(pars.get(1));
} else if ("B".equals(suffix)) {
resultList.add(par1);
resultList.add(pars.get(1));
}
}
return resultList;
......
......@@ -5,9 +5,11 @@ import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
......@@ -17,6 +19,13 @@ import java.util.Map;
@Service
public class SpareNoCache {
public SpareNoCache(ApplicationContext applicationContext) {
ISpareNoManager spareNoManager = applicationContext.getBean(ISpareNoManager.class);
// 刷新缓存
spareNoManager.findAll().forEach(
spareNo -> cacheMap.put(spareNo.getSpareNo(), spareNo));
}
@Autowired
private ISpareNoManager spareNoManager;
......@@ -42,7 +51,7 @@ public class SpareNoCache {
public String getExecutIngSpareNoStr(){
for (String spareNoStr : cacheMap.keySet()) {
SpareNo spareNo = cacheMap.get(spareNoStr);
if (spareNo.getSpareNostatus() == SpareNostatus.EXECUTING_STATUS){
if (spareNo.getSpareStatus() == SpareNostatus.EXECUTING_STATUS){
return spareNoStr;
}
}
......@@ -52,7 +61,7 @@ public class SpareNoCache {
public SpareNo getExecutIngSpareNo(){
for (String spareNoStr : cacheMap.keySet()) {
SpareNo spareNo = cacheMap.get(spareNoStr);
if (spareNo.getSpareNostatus() == SpareNostatus.EXECUTING_STATUS){
if (spareNo.getSpareStatus() == SpareNostatus.EXECUTING_STATUS){
return spareNo;
}
}
......@@ -63,6 +72,8 @@ public class SpareNoCache {
public SpareNo getSpareNoResultToSpareNo(GetSpareNoResult result) {
SpareNo spareNo = new SpareNo();
spareNo.setNo(result.getSpareNo());
spareNo.setCreateBy(result.getCreateBy());
spareNo.setCreateTime(result.getCreateTime());
spareNo.setSpareNo(result.getSpareNo());
......@@ -70,7 +81,7 @@ public class SpareNoCache {
spareNo.setStatus(result.getStatus());
spareNo.setDeptId(result.getDeptId());
spareNo.setWhDesc(result.getWhDesc());
spareNo.setSpareNostatus(SpareNostatus.NEW_STATUS);
spareNo.setSpareStatus(SpareNostatus.NEW_STATUS);
List<SpareNoDetail> detailList = new ArrayList<>();
......@@ -87,4 +98,9 @@ public class SpareNoCache {
return spareNo;
}
public void updateCacheAndDB(String spareNoStr, SpareNo spareNo) {
cacheMap.put(spareNoStr, spareNo);
spareNoManager.save(spareNo);
}
}
package com.neotel.smfcore.custom.luxsan_sp.util.bean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.OrderNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.ReturnNoCache;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import lombok.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BoxTaskDetail {
// 类型
private Integer type;
// 单号
private String orderNo;
// 箱号
private String boxBarcode;
// 具体到格口的任务内容
private List<BinDetail> binDetails;
@Data
public static class BinDetail {
private Integer binNum;
private String partNumber;
private Integer qty;
private Integer arlQty;
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!