Commit f351910f hc

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

1 个父辈 f405289c
正在显示 37 个修改的文件 包含 1174 行增加172 行删除
...@@ -218,6 +218,15 @@ public class DataInitManager { ...@@ -218,6 +218,15 @@ public class DataInitManager {
addNewFunctionMenu(4, wip, "transferInventory", "转库", "transferInventory", "SemiFinishProducts/transferInventory/index", "transferInventory", functionMenuMap); 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设置 //MSD管理:MSD库存.MSD追溯性.MSD设置
Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null); Menu msd = Menu.CreatePMenu("MSD管理", 2, "msd", 2, "MSD",null);
......
...@@ -30,4 +30,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> { ...@@ -30,4 +30,5 @@ public interface IBarcodeManager extends IBaseManager<Barcode> {
List<Barcode> findByQuery(Query query, Pageable pageable); List<Barcode> findByQuery(Query query, Pageable pageable);
int countByQuery(Query query); int countByQuery(Query query);
} }
package com.neotel.smfcore.core.barcode.service.manager.impl; package com.neotel.smfcore.core.barcode.service.manager.impl;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.PageData; import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
...@@ -19,6 +20,7 @@ import org.springframework.data.mongodb.core.query.Criteria; ...@@ -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.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
...@@ -212,6 +214,7 @@ public class BarcodeManagerImpl implements IBarcodeManager { ...@@ -212,6 +214,7 @@ public class BarcodeManagerImpl implements IBarcodeManager {
return barcodeDao.countByQuery(query); return barcodeDao.countByQuery(query);
} }
protected boolean validateComponent(Barcode barcode) { protected boolean validateComponent(Barcode barcode) {
return componentManager.findOneByPN(barcode.getPartNumber()) != null; return componentManager.findOneByPN(barcode.getPartNumber()) != null;
} }
......
...@@ -74,7 +74,7 @@ public class CodeResolve { ...@@ -74,7 +74,7 @@ public class CodeResolve {
codeBeanFromRule.setError(null,null); codeBeanFromRule.setError(null,null);
codeBeanFromRule.setCodeStr(barcode.getBarcode()); codeBeanFromRule.setCodeStr(barcode.getBarcode());
codeBeanFromRule.setBarcode(barcode); codeBeanFromRule.setBarcode(barcode);
// Component component = componentManager.findByPartNumber(barcode.getPartNumber()); // Component component = componentManager.findByPartNumberInSubCodeList(barcode.getPartNumber());
// codeBeanFromRule.setShowImg(component.getShowImg()); // codeBeanFromRule.setShowImg(component.getShowImg());
return codeBeanFromRule; return codeBeanFromRule;
......
...@@ -206,12 +206,12 @@ public class WarehouseController { ...@@ -206,12 +206,12 @@ public class WarehouseController {
String newCodeStr = "=" + station.getPlatsize() + "x" + station.getHeight() + "=" + barcodeStr; String newCodeStr = "=" + station.getPlatsize() + "x" + station.getHeight() + "=" + barcodeStr;
CodeBean codeBean = codeResolve.resolveSingleCode(newCodeStr); CodeBean codeBean = codeResolve.resolveSingleCode(newCodeStr);
Barcode barcode = codeBean.getBarcode(); Barcode barcode = codeBean.getBarcode();
try { // try {
smfApi.canPutInAfterResolve(barcode); // smfApi.canPutInAfterResolve(barcode);
} catch (ValidateException e) { // } catch (ValidateException e) {
e.printStackTrace(); // e.printStackTrace();
return ResultBean.newErrorResult(-2, "", e.getMessage()); // return ResultBean.newErrorResult(-2, "", e.getMessage());
} // }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
......
...@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.api.listener.DefaultSmfApiListener; ...@@ -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.core.inList.service.po.InList;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.LuxsanSpApiResult; 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.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.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult; import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetUnclaimedResult;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseResult; import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseResult;
...@@ -126,45 +127,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener { ...@@ -126,45 +127,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
try { try {
String url = GetSpareNoUrl + getQueryStr(request); String url = GetSpareNoUrl + getQueryStr(request);
log.info("获取入库单号请求为:" + url); log.info("获取入库单号请求为:" + url);
//String resJsonStr = HttpHelper.sendGet(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" +
"}";
log.info("获取入库单号返回:" + resJsonStr); log.info("获取入库单号返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class); LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
if (lizhenApiResult.getCode() != 200) { if (lizhenApiResult.getCode() != 200) {
......
package com.neotel.smfcore.custom.luxsan_sp.api.bean.request; package com.neotel.smfcore.custom.luxsan_sp.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* 请求类,用于获取退库库存的请求参数 * 请求类,用于获取退库库存的请求参数
*/ */
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
public class GetReturnInventoryRequest { 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; package com.neotel.smfcore.custom.luxsan_sp.api.bean.request;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@NoArgsConstructor
@AllArgsConstructor
public class GetUnclaimedRequest { public class GetUnclaimedRequest {
/** /**
......
package com.neotel.smfcore.custom.luxsan_sp.api.bean.result; package com.neotel.smfcore.custom.luxsan_sp.api.bean.result;
import com.neotel.smfcore.custom.luxsan_sp.bean.UnclaimedDetail;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
...@@ -34,5 +35,5 @@ public class GetUnclaimedResult { ...@@ -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; 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 com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import lombok.Data; import lombok.Data;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Data @Data
public class SpareNo extends BasePo { public class SpareNo extends BaseNo {
private String createBy; private String createBy;
...@@ -18,39 +16,13 @@ public class SpareNo extends BasePo { ...@@ -18,39 +16,13 @@ public class SpareNo extends BasePo {
//单据号 //单据号
private String spareNo; private String spareNo;
//仓库代码
private String whCode;
//0表示待入库 //0表示待入库
private String status; private String status;
//厂区id
private String deptId;
//料号明细
private List<SpareNoDetail> detailList;
//仓库描述 //仓库描述
private String whDesc; 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 { ...@@ -12,6 +12,6 @@ public class SpareNoDetail {
private int inQty; 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; 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 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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ApiOperation("备件仓 料箱入库") import java.util.*;
@ApiOperation("备件仓 料箱出库")
@RestController @RestController
@RequestMapping("/spBoxCheckOut") @RequestMapping("/spBoxCheckOut")
public class SpBoxCheckOutController { 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; 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.bean.ResultBean;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
...@@ -17,14 +18,12 @@ import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil; ...@@ -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.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest; 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.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.CodeBarcode; import com.neotel.smfcore.custom.luxsan_sp.bean.*;
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.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.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.util.CodeUtil; import com.neotel.smfcore.custom.luxsan_sp.service.manager.impl.ReturnManagerImpl;
import com.neotel.smfcore.custom.luxsan_sp.util.SpBoxUtil; import com.neotel.smfcore.custom.luxsan_sp.util.*;
import com.neotel.smfcore.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -56,9 +55,15 @@ public class SpBoxPutInController { ...@@ -56,9 +55,15 @@ public class SpBoxPutInController {
private SpareNoCache spareNoCache; private SpareNoCache spareNoCache;
@Autowired @Autowired
private ReturnNoCache returnNoCache;
@Autowired
private ISpareNoManager spareNoManager; private ISpareNoManager spareNoManager;
@Autowired @Autowired
private IReturnNoManager returnNoManager;
@Autowired
private TaskService taskService; private TaskService taskService;
@ApiOperation("获取当前工位的料箱信息") @ApiOperation("获取当前工位的料箱信息")
...@@ -130,11 +135,12 @@ public class SpBoxPutInController { ...@@ -130,11 +135,12 @@ public class SpBoxPutInController {
} }
//判断有没有正在执行入库单 //判断有没有正在执行入库单
//TODO 等到做退库单的时候,再判断有没有正在执行的入库单
SpareNo spareNo = spareNoCache.getExecutIngSpareNo(); SpareNo spareNo = spareNoCache.getExecutIngSpareNo();
if (spareNo == null){ ReturnInventoryNo returnInventoryNo = returnNoCache.getExecutingOrderNo();
if (ObjectUtil.isAllEmpty(spareNo, returnInventoryNo)) {
return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单"); return ResultBean.newErrorResult(-1,"","没有找到正在执行的入库单或者退库单");
} }
BaseNo baseNo = ObjectUtil.isEmpty(spareNo) ? returnInventoryNo : spareNo;
//3.判断与当前隔口的料号是否匹配 //3.判断与当前隔口的料号是否匹配
...@@ -152,11 +158,11 @@ public class SpBoxPutInController { ...@@ -152,11 +158,11 @@ public class SpBoxPutInController {
} }
} }
//判断是否已经完成了
boolean finish = true;
//判断当前入库的是否和入库单一样 //判断当前入库的是否和入库单一样
//TODO 后续需要判断是否和退库单一样 if (baseNo != null) {
if (spareNo != null) { List<SpareNoDetail> detailList = baseNo.getDetailList();
List<SpareNoDetail> detailList = spareNo.getDetailList();
SpareNoDetail spareNoDetail = null; SpareNoDetail spareNoDetail = null;
...@@ -175,32 +181,37 @@ public class SpBoxPutInController { ...@@ -175,32 +181,37 @@ public class SpBoxPutInController {
} }
//先调用入库接口 //先调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
SpareInHourseDetail detail = new SpareInHourseDetail(); SpareInHourseDetail detail = new SpareInHourseDetail();
detail.setInQty(codeBarcode.getQty()); detail.setInQty(codeBarcode.getQty());
detail.setPartno(codeBarcode.getPartNumber()); detail.setPartno(codeBarcode.getPartNumber());
detail.setLocationCode(binBarcode.getBarcode()); detail.setLocationCode(binBarcode.getBarcode());
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(spareNo.getDeptId(),spareNo.getSpareNo(),spareNo.getWhCode(), Arrays.asList(detail))); LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(),baseNo.getNo(),baseNo.getWhCode(), Arrays.asList(detail)));
}
//数量加1 //数量加1
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty()); spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty()+ codeBarcode.getQty());
spareNo.updateDetailList(spareNoDetail); baseNo.updateDetailList(spareNoDetail);
//判断是否已经完成了
boolean finish = true; for (SpareNoDetail noDetail : baseNo.getDetailList()) {
for (SpareNoDetail noDetail : spareNo.getDetailList()) {
if (noDetail.getInQty() < noDetail.getAlrInQty()){ if (noDetail.getInQty() < noDetail.getAlrInQty()){
finish = false; finish = false;
} }
} }
if (finish){ if (finish){
spareNo.setSpareNostatus(SpareNostatus.CLOSE_STATUS); baseNo.setSpareStatus(SpareNostatus.CLOSE_STATUS);
} }
if (baseNo.getClass().equals(SpareNo.class)) {
spareNoCache.addToMap(spareNo); spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo); spareNoManager.save(spareNo);
}else {
returnNoCache.addToMap(returnInventoryNo);
returnNoManager.save(returnInventoryNo);
}
} }
//4.开始放入料箱 //4.开始放入料箱
...@@ -209,6 +220,9 @@ public class SpBoxPutInController { ...@@ -209,6 +220,9 @@ public class SpBoxPutInController {
barcodeManager.save(boxBarcode); barcodeManager.save(boxBarcode);
// if (!finish) {
// return ResultBean.newOkResult("");
// }
//5.寻找空库位 //5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode); StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){ if (pos == null){
......
package com.neotel.smfcore.custom.luxsan_sp.controller; 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/returnInventory") @RequestMapping("/returnInventory")
public class SpReturnInventoryController { 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; 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.bean.ResultBean;
import com.neotel.smfcore.common.utils.StringUtils; 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.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetSpareNoRequest; 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.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.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.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager; 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.custom.luxsan_sp.util.SpareNoCache;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -30,6 +39,27 @@ public class SpSpareNoController { ...@@ -30,6 +39,27 @@ public class SpSpareNoController {
@Autowired @Autowired
private ISpareNoManager spareNoManager; 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("获取入库单") @ApiOperation("获取入库单")
@RequestMapping("/getAllSpareNo") @RequestMapping("/getAllSpareNo")
...@@ -56,7 +86,8 @@ public class SpSpareNoController { ...@@ -56,7 +86,8 @@ public class SpSpareNoController {
public ResultBean checkSpareNo(String spareNoStr) { public ResultBean checkSpareNo(String spareNoStr) {
//判断有没有正在执行的任务单 //判断有没有正在执行的任务单
String no = spareNoCache.getExecutIngSpareNoStr(); String no = spareNoCache.getExecutIngSpareNoStr();
if (StringUtils.isNotEmpty(no)) { String reNo = returnNoCache.getExecutingOrderNoStr();
if (!StringUtils.isAllEmpty(no, reNo)) {
return ResultBean.newErrorResult(-1, "", "有正在执行的入库单:" + no); return ResultBean.newErrorResult(-1, "", "有正在执行的入库单:" + no);
} }
...@@ -64,8 +95,7 @@ public class SpSpareNoController { ...@@ -64,8 +95,7 @@ public class SpSpareNoController {
if (spareNo == null) { if (spareNo == null) {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息"); return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
} }
spareNo.setSpareStatus(SpareNostatus.EXECUTING_STATUS);
spareNo.setSpareNostatus(SpareNostatus.EXECUTING_STATUS);
spareNoCache.addToMap(spareNo); spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo); spareNoManager.save(spareNo);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
...@@ -82,13 +112,15 @@ public class SpSpareNoController { ...@@ -82,13 +112,15 @@ public class SpSpareNoController {
return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息"); return ResultBean.newErrorResult(-1, "", "未找到对应的入库单信息");
} }
if (!spareNo.isExecutIng()) { if (!spareNo.isExecuting()) {
return ResultBean.newErrorResult(-1, "", spareNoStr + "不是正在执行中,不允许放弃"); return ResultBean.newErrorResult(-1, "", spareNoStr + "不是正在执行中,不允许放弃");
} }
spareNo.setSpareNostatus(SpareNostatus.ABANDON_STATUS); spareNo.setSpareStatus(SpareNostatus.ABANDON_STATUS);
spareNoCache.addToMap(spareNo); spareNoCache.addToMap(spareNo);
spareNoManager.save(spareNo); spareNoManager.save(spareNo);
return ResultBean.newOkResult(""); 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 { ...@@ -9,4 +9,12 @@ public class SpareNostatus {
public static final int CLOSE_STATUS = 2; public static final int CLOSE_STATUS = 2;
public static final int ABANDON_STATUS = 3; 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; ...@@ -3,6 +3,11 @@ package com.neotel.smfcore.custom.luxsan_sp.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo; import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import java.util.List;
import java.util.Map;
public interface ISpareNoManager extends IBaseManager<SpareNo> { public interface ISpareNoManager extends IBaseManager<SpareNo> {
SpareNo getBySpareNo(String 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; ...@@ -12,6 +12,7 @@ import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
...@@ -47,6 +48,11 @@ public class SpareNoManagerImpl implements ISpareNoManager { ...@@ -47,6 +48,11 @@ public class SpareNoManagerImpl implements ISpareNoManager {
} }
@Override @Override
public List<SpareNo> findAll() {
return spareNoDao.findAll();
}
@Override
public SpareNo getBySpareNo(String spareNo) { public SpareNo getBySpareNo(String spareNo) {
return spareNoDao.findOne(new Query(Criteria.where("spareNo").is(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; ...@@ -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.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.util.bean.BoxTaskDetail;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function;
@Slf4j @Slf4j
@Service @Service
public class SpBoxUtil { public class SpBoxUtil {
private static BoxTaskDetail boxTaskDetail;
public void setBoxTaskDetail(BoxTaskDetail boxTaskDetail) {
this.boxTaskDetail = boxTaskDetail;
}
private static IStoragePosManager storagePosManager; private static IStoragePosManager storagePosManager;
...@@ -48,70 +55,51 @@ public class SpBoxUtil { ...@@ -48,70 +55,51 @@ public class SpBoxUtil {
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
String boxStr = barcode.getBarcode(); String boxStr = barcode.getBarcode();
if (!boxTaskDetail.getBoxBarcode().equals(boxStr)) {
List<Object> par1 = new ArrayList<>(); return null;
par1.add(1); //隔口号 }
par1.add(getAmount(subCodeList,boxStr+"-01")); //数量 List<List<Object>> pars = new ArrayList<>();
par1.add(getPartNumber(subCodeList,boxStr+"-01")); //料号 for (int i = 1; i <= 6; i++) {
List<Object> par = new ArrayList<>();
List<Object> par2 = new ArrayList<>(); par.add(i); //隔口号
par2.add(2); par.add(getAmount(subCodeList,boxStr+"-0"+i)); //数量
par2.add(getAmount(subCodeList,boxStr+"-02")); par.add(getPartNumber(subCodeList,boxStr+"-0"+i)); //料号
par2.add(getPartNumber(subCodeList,boxStr+"-02")); pars.add(par);
}
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 (boxStr.startsWith("CS")) { if (boxStr.startsWith("CS")) {
if ("A".equals(suffix)) { if ("A".equals(suffix)) {
resultList.add(par2); resultList.add(pars.get(2));
resultList.add(par4); resultList.add(pars.get(4));
resultList.add(par6); resultList.add(pars.get(6));
resultList.add(par1); resultList.add(pars.get(1));
resultList.add(par3); resultList.add(pars.get(3));
resultList.add(par5); resultList.add(pars.get(5));
} else if ("B".equals(suffix)) { } else if ("B".equals(suffix)) {
resultList.add(par5); resultList.add(pars.get(5));
resultList.add(par3); resultList.add(pars.get(3));
resultList.add(par1); resultList.add(pars.get(1));
resultList.add(par6); resultList.add(pars.get(6));
resultList.add(par4); resultList.add(pars.get(4));
resultList.add(par2); resultList.add(pars.get(2));
} }
} else if (boxStr.startsWith("CB")) { } else if (boxStr.startsWith("CB")) {
if ("A".equals(suffix)) { if ("A".equals(suffix)) {
resultList.add(par2); resultList.add(pars.get(2));
resultList.add(par4); resultList.add(pars.get(4));
resultList.add(par1); resultList.add(pars.get(1));
resultList.add(par3); resultList.add(pars.get(3));
} else if ("B".equals(suffix)) { } else if ("B".equals(suffix)) {
resultList.add(par3); resultList.add(pars.get(3));
resultList.add(par1); resultList.add(pars.get(1));
resultList.add(par4); resultList.add(pars.get(4));
resultList.add(par2); resultList.add(pars.get(2));
} }
} else if (boxStr.startsWith("CM")) { } else if (boxStr.startsWith("CM")) {
if ("A".equals(suffix)) { if ("A".equals(suffix)) {
resultList.add(par1); resultList.add(pars.get(1));
} else if ("B".equals(suffix)) { } else if ("B".equals(suffix)) {
resultList.add(par1); resultList.add(pars.get(1));
} }
} }
return resultList; return resultList;
......
...@@ -5,9 +5,11 @@ import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult; ...@@ -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.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNoDetail; 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.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.service.manager.ISpareNoManager;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap; import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -17,6 +19,13 @@ import java.util.Map; ...@@ -17,6 +19,13 @@ import java.util.Map;
@Service @Service
public class SpareNoCache { public class SpareNoCache {
public SpareNoCache(ApplicationContext applicationContext) {
ISpareNoManager spareNoManager = applicationContext.getBean(ISpareNoManager.class);
// 刷新缓存
spareNoManager.findAll().forEach(
spareNo -> cacheMap.put(spareNo.getSpareNo(), spareNo));
}
@Autowired @Autowired
private ISpareNoManager spareNoManager; private ISpareNoManager spareNoManager;
...@@ -42,7 +51,7 @@ public class SpareNoCache { ...@@ -42,7 +51,7 @@ public class SpareNoCache {
public String getExecutIngSpareNoStr(){ public String getExecutIngSpareNoStr(){
for (String spareNoStr : cacheMap.keySet()) { for (String spareNoStr : cacheMap.keySet()) {
SpareNo spareNo = cacheMap.get(spareNoStr); SpareNo spareNo = cacheMap.get(spareNoStr);
if (spareNo.getSpareNostatus() == SpareNostatus.EXECUTING_STATUS){ if (spareNo.getSpareStatus() == SpareNostatus.EXECUTING_STATUS){
return spareNoStr; return spareNoStr;
} }
} }
...@@ -52,7 +61,7 @@ public class SpareNoCache { ...@@ -52,7 +61,7 @@ public class SpareNoCache {
public SpareNo getExecutIngSpareNo(){ public SpareNo getExecutIngSpareNo(){
for (String spareNoStr : cacheMap.keySet()) { for (String spareNoStr : cacheMap.keySet()) {
SpareNo spareNo = cacheMap.get(spareNoStr); SpareNo spareNo = cacheMap.get(spareNoStr);
if (spareNo.getSpareNostatus() == SpareNostatus.EXECUTING_STATUS){ if (spareNo.getSpareStatus() == SpareNostatus.EXECUTING_STATUS){
return spareNo; return spareNo;
} }
} }
...@@ -63,6 +72,8 @@ public class SpareNoCache { ...@@ -63,6 +72,8 @@ public class SpareNoCache {
public SpareNo getSpareNoResultToSpareNo(GetSpareNoResult result) { public SpareNo getSpareNoResultToSpareNo(GetSpareNoResult result) {
SpareNo spareNo = new SpareNo(); SpareNo spareNo = new SpareNo();
spareNo.setNo(result.getSpareNo());
spareNo.setCreateBy(result.getCreateBy()); spareNo.setCreateBy(result.getCreateBy());
spareNo.setCreateTime(result.getCreateTime()); spareNo.setCreateTime(result.getCreateTime());
spareNo.setSpareNo(result.getSpareNo()); spareNo.setSpareNo(result.getSpareNo());
...@@ -70,7 +81,7 @@ public class SpareNoCache { ...@@ -70,7 +81,7 @@ public class SpareNoCache {
spareNo.setStatus(result.getStatus()); spareNo.setStatus(result.getStatus());
spareNo.setDeptId(result.getDeptId()); spareNo.setDeptId(result.getDeptId());
spareNo.setWhDesc(result.getWhDesc()); spareNo.setWhDesc(result.getWhDesc());
spareNo.setSpareNostatus(SpareNostatus.NEW_STATUS); spareNo.setSpareStatus(SpareNostatus.NEW_STATUS);
List<SpareNoDetail> detailList = new ArrayList<>(); List<SpareNoDetail> detailList = new ArrayList<>();
...@@ -87,4 +98,9 @@ public class SpareNoCache { ...@@ -87,4 +98,9 @@ public class SpareNoCache {
return spareNo; 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!