Commit dd6fc38b LN

料箱修改格口功能。增加库存报表

1 个父辈 613792b0
......@@ -274,6 +274,7 @@ public class DataInitManager {
addNewFunctionMenu(81, pMenuReport,"materialShortageReport", "缺料", "materialShortageReport", "neolight/materialShortageReport/index", "mShortageReport",functionMenuMap);
addNewFunctionMenu(82,pMenuReport,"pkSearch","PK查询","pkSearch","neolight/pkSearch/index","findOut",functionMenuMap);
addNewFunctionMenu(83,pMenuReport,"sysInReport","盘点","sysInReport","neolight/sysInReport/index","mIDList",functionMenuMap);
addNewFunctionMenu(84, pMenuReport,"pnInventory", "库存报表", "pnInventory", "neolight/pnInventory/index", "inventory",functionMenuMap);
//内仓
......
......@@ -203,11 +203,29 @@ public class Barcode extends BasePo implements Serializable {
extraDataMap.put(key, value);
}
}
private int subListNum=0;
public int getSubListNum(){
UpdateSubNum();
return subListNum;
}
/**
* 料盒条码:料盒内所有物料条码
*/
private List<Barcode> subCodeList;
public void setSubCodeList(List<Barcode> subCodeList) {
this.subCodeList = subCodeList;
if (subCodeList == null) {
subListNum = 0;
} else {
subListNum = subCodeList.size();
}
}
/**
* 禁用标识
......@@ -373,6 +391,38 @@ public class Barcode extends BasePo implements Serializable {
private boolean isInventory = false;
/**
* 最大格口数量(默认CS=6,CM=4,CB=2)
*/
private int maxSubNum=0;
public int getMaxSubNum(){
if(maxSubNum<=0){
if (barcode.startsWith("CS")) {
maxSubNum= 6;
} else if (barcode.startsWith("CB")) {
maxSubNum= 4;
} else if (barcode.startsWith("CM")) {
maxSubNum= 1;
}
}
UpdateSubNum();
return maxSubNum;
}
public void setMaxSubNum(int maxSubNum) {
this.maxSubNum = maxSubNum;
UpdateSubNum();
}
private void UpdateSubNum(){
if (subCodeList == null) {
subListNum = 0;
}else{
if(subListNum!=subCodeList.size()){
subListNum=subCodeList.size();
}
}
}
//记录序列号
private int seq = 0;
......@@ -633,6 +683,7 @@ public class Barcode extends BasePo implements Serializable {
subCodeList.add(barcode);
}
}
subListNum=subCodeList.size();
}
public synchronized void removeFromSubCodes(Barcode subCode){
......@@ -657,5 +708,6 @@ public class Barcode extends BasePo implements Serializable {
subCodeList.add(subCode);
}
}
subListNum=subCodeList.size();
}
}
......@@ -534,6 +534,13 @@ public class DataCache {
private synchronized Map<String, InventoryItem> initInventory(String cid){
Storage storage = getStorage(cid);
Map<String, InventoryItem> storageInventoryMap = storagePosManager.getInventory(storage.getId());
List<String> keys=new ArrayList<>(storageInventoryMap.keySet());
for (String key :
keys) {
if(storageInventoryMap.get(key)==null){
storageInventoryMap.remove(key );
}
}
//未完成的 Task 也需要锁定
// List<InventoryItem> feederLockInventories = dataLogDao.getStorageLockCount(storage.getId());
......@@ -579,29 +586,30 @@ public class DataCache {
* 修改库存,出库为负,入库为正
*/
public int updateInventory(StoragePos pos, Barcode barcode){
Storage storage = getStorageById(pos.getStorageId());
String cid = storage.getCid();
String partNumber = barcode.getPartNumber();
int amount = 0;
String sizeStr = pos.getSizeStr();
if(pos.getBarcode() == null){
//出库
amount = - barcode.getAmount();
storage.emptyOnePos(pos);
removeUsedPosNameList(cid, pos.getPosName());
}else{
//入库
amount = barcode.getAmount();
storage.useOnePos(pos);
addUsedPosNameList(cid, pos.getPosName());
//入库单处理
if(ObjectUtil.isNotEmpty(storage.getInListName())){
inListCache.UpdateInList(storage.getInListName(),pos,barcode);
}
}
allStorage.put(cid, storage);
return updateInventoryAmount(cid,partNumber,amount);
// Storage storage = getStorageById(pos.getStorageId());
//
// String cid = storage.getCid();
// String partNumber = barcode.getPartNumber();
// int amount = 0;
// String sizeStr = pos.getSizeStr();
// if(pos.getBarcode() == null){
// //出库
// amount = - barcode.getAmount();
// storage.emptyOnePos(pos);
// removeUsedPosNameList(cid, pos.getPosName());
// }else{
// //入库
// amount = barcode.getAmount();
// storage.useOnePos(pos);
// addUsedPosNameList(cid, pos.getPosName());
// //入库单处理
// if(ObjectUtil.isNotEmpty(storage.getInListName())){
// inListCache.UpdateInList(storage.getInListName(),pos,barcode);
// }
// }
// allStorage.put(cid, storage);
// return updateInventoryAmount(cid,partNumber,amount);
return -1;
}
private void updateStorageInventory(String cid, InventoryItem inventoryItem){
......
package com.neotel.smfcore.core.report;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.report.bean.ChartItem;
import com.neotel.smfcore.core.report.rest.dto.InoutDataDto;
import com.neotel.smfcore.core.report.rest.dto.InventoryBoxDto;
import com.neotel.smfcore.core.report.rest.dto.InventoryGroupDto;
import com.neotel.smfcore.core.report.rest.mapstruct.ChartItemMapper;
import com.neotel.smfcore.core.report.rest.query.ReportQuery;
import com.neotel.smfcore.core.storage.bean.InventoryItem;
import com.neotel.smfcore.core.storage.bean.UsageItem;
import com.neotel.smfcore.core.storage.rest.dto.InventoryItemDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.InventoryItemMapper;
import com.neotel.smfcore.core.storage.rest.query.InventoryQueryCriteria;
import com.neotel.smfcore.core.storage.service.manager.IStorageManager;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
......@@ -24,14 +31,22 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@RestController
......@@ -184,4 +199,89 @@ public class ReportController {
sdf = new SimpleDateFormat(format);
return sdf.parse(dateStr);
}
@Autowired
private InventoryItemMapper inventoryItemMapper;
private List<InventoryItemDto> getInventory(InventoryQueryCriteria criteria, Pageable pageable){
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(criteria.getStorageIdList(),criteria.getBlurry());
List<InventoryItem> list = Lists.newArrayList(inventoryItemMap.values());
List<InventoryItemDto> dtoList = inventoryItemMapper.toDto(list);
List<InventoryItemDto> resultList = new ArrayList<>();
//过滤掉没有库存的
for (InventoryItemDto inventoryItemDto : dtoList) {
if(inventoryItemDto.getStockReel() > 0){
resultList.add(inventoryItemDto);
}
}
Comparator<InventoryItemDto> comparator = Comparator.comparing(InventoryItemDto::getPartNumber);
Sort.Order lockReelOrder = pageable.getSort().getOrderFor("lockReel");
if(lockReelOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockReel,Comparator.nullsFirst(Integer::compareTo));
if(lockReelOrder.isDescending()){
comparator = comparator.reversed();
}
}
Sort.Order stockCountOrder = pageable.getSort().getOrderFor("stockCount");
if(stockCountOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getStockCount,Comparator.nullsFirst(Integer::compareTo));
if(stockCountOrder.isDescending()){
comparator = comparator.reversed();
}
}
Sort.Order partNumberOrder = pageable.getSort().getOrderFor("partNumber");
if(partNumberOrder != null){
comparator = Comparator.comparing(InventoryItemDto::getPartNumber,Comparator.nullsFirst(String::compareTo));
if(partNumberOrder.isDescending()){
comparator = comparator.reversed();
}
}
resultList = resultList.stream().sorted(comparator).collect(Collectors.toList());
// System.out.println("================");
// for (InventoryItemDto dto : resultList) {
// System.out.println(dto.getPartNumber() + "---" + dto.getStockCount() + " --- " + dto.getStockReel());
// }
return resultList;
}
@ApiOperation("策略出库获取库存列表")
@GetMapping(value = "/pnInventory")
@PreAuthorize("@el.check('pnInventory')")
public ResponseEntity<List<InventoryItemDto>> inventory(InventoryQueryCriteria criteria, Pageable pageable, HttpServletRequest request) {
List<InventoryItemDto> dtoList = getInventory(criteria,pageable);
return new ResponseEntity<>(dtoList, HttpStatus.OK);
}
@ApiOperation("导出库存报表")
@GetMapping(value = "/pnInventory/download")
@PreAuthorize("@el.check('pnInventory')")
public void inventoryDownload(HttpServletResponse response, InventoryQueryCriteria criteria, Pageable pageable, Locale locale)throws IOException {
List<InventoryItemDto> list = getInventory(criteria, pageable);
String partNumberStr = MessageUtils.getText("smfcore.inventory.partNumber", locale, "物料编号");
String countStr = MessageUtils.getText("smfcore.inventory.count", locale, "数量");
String wareHouseCode = MessageUtils.getText("smfcore.inventory.wareHouseCode", locale, "库别");
String box = MessageUtils.getText("smfcore.inventory.box", locale, "料箱");
// String lockReelStr= MessageUtils.getText("smfcore.inventory.lockReel",locale,"锁定");
// String stockReelStr= MessageUtils.getText("smfcore.inventory.stockReel",locale,"库存");
String storageNameStr = MessageUtils.getText("smfcore.inventory.storageName", locale, "设备");
List<Map<String, Object>> maps = new ArrayList<>();
for (InventoryItemDto item : list) {
Map<String, Object> map = new LinkedHashMap<>();
map.put(partNumberStr, item.getPartNumber());
map.put(countStr, item.getStockCount());
map.put(wareHouseCode, "");
map.put(box, "");
// map.put(lockReelStr, item.getLockReel());
// map.put(stockReelStr, item.getStockReel());
map.put(storageNameStr, item.getStorageName());
maps.add(map);
}
FileUtil.downloadExcel(maps, response);
}
}
......@@ -696,7 +696,11 @@ public class StoragePosController {
data.add(pos.getBarcode().getLockName());
data.add(pos.getBarcode().getAmount());
data.add(putInTime);
data.add(dateFormat.format(pos.getBarcode().getPutInDate()));
if(pos.getBarcode().getPutInDate()==null){
data.add("");
}else{
data.add(dateFormat.format(pos.getBarcode().getPutInDate()));
}
dataList.add(data);
}
return dataList;
......
......@@ -38,4 +38,10 @@ public class InventoryItemDto implements Serializable {
private int plateNumber=1;
@ApiModelProperty("库别")
private String wareHouseCode;
@ApiModelProperty("品名")
private String partname;
}
......@@ -100,4 +100,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos findBoxPNInStorages(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType ) ;
StoragePos findEmptyBoxToPutIn(List<String> storageIdList, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType ,String boxType,int maxCount) ;
StoragePos findEmptyBoxToPut(List<String> storageIdList, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType );
}
......@@ -62,19 +62,19 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return getInventory(-1, storageId);
}
private List<InventoryItem> inventory(int type,String... storageIds){
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
if(type != -1){
c = c.and("barcode.type").is(type);
}
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(c),
Aggregation.group("barcode.partNumber").sum("barcode.amount").as("stockCount").count().as("stockReel"),
Aggregation.project("stockCount", "stockReel").and("partNumber").previousOperation()
);
AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
return results.getMappedResults();
}
// private List<InventoryItem> inventory(int type,String... storageIds){
// Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
// if(type != -1){
// c = c.and("barcode.type").is(type);
// }
// Aggregation agg = Aggregation.newAggregation(
// Aggregation.match(c),
// Aggregation.group("barcode.partNumber").sum("barcode.amount").as("stockCount").count().as("stockReel"),
// Aggregation.project("stockCount", "stockReel").and("partNumber").previousOperation()
// );
// AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
// return results.getMappedResults();
// }
private List<InventoryItem> lockInventory(int type,String... storageIds){
//被锁定的仓位
......@@ -957,4 +957,48 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
return pos;
}
@Override
public StoragePos findEmptyBoxToPut(List<String> storageIdList, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType ) {
Criteria c = Criteria.where("id").nin(excludePosIds);
c = c.and("enabled").is(true);//可用
c.and("used").is(true);
c.and("barcode").exists(true);//已使用有料箱
c.and("barcode.maxSubNum").gt(0);//最大格口大于0
c.and("barcode.status").is(BARCODE_STATUS.IN_STORE);
c.and("barcode.subListNum").lt("barcode.maxSubNum"); // 添加判断条件
if (storageIdList != null) {
c = c.and("storageId").in(storageIdList);
}
Sort sort = Sort.by(Sort.Direction.ASC, "barcode.subCodeList.createDate", "barcode.subCodeList.amount"/*,"canCheckOutTime", "barcode.usedCount"*/);
Query q = new Query(c);
q.with(sort);
StoragePos pos = storagePosDao.findOne(q);
if (pos == null) {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + ",未找到空料格 ");
} else {
log.info("使用" + checkOutType + " 策略出库 partNumber=" + ",找到PN【" + pos.getPosName() + "】 ");
}
return pos;
}
private List<InventoryItem> inventory(int type,String... storageIds){
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
if(type != -1){
c = c.and("barcode.type").is(type);
}
// c.and("barcode.status").is(BARCODE_STATUS.IN_STORE);
c=c.and("barcode.subCodeList").exists(true);
Aggregation agg = Aggregation.newAggregation(
Aggregation.match(c),
Aggregation.unwind("barcode.subCodeList"),
Aggregation.group("barcode.subCodeList.partNumber").sum("barcode.subCodeList.amount").as("stockCount").count().as("stockReel"),
Aggregation.project("stockCount", "stockReel").and("partNumber").previousOperation()
);
AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
return results.getMappedResults();
}
}
......@@ -53,10 +53,10 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public static List<GetReturnInventoryResult> getReturnInventory(GetReturnInventoryRequest request) {
String url = null;
try {
// 记录请求日志
log.info("备品仓退库查询接口请求为: " + JSON.toJSONString(request));
// 构造请求URL,附加查询参数
url = GetReturnInventory + getQueryStr(request);
// 记录请求日志
log.info("备品仓退库查询接口请求为: " + url);
// 发送GET请求并获取JSON格式的响应字符串
String resJsonStr = HttpHelper.sendGet(url);
log.info("备品仓退库查询接口返回为:" + resJsonStr);
......@@ -88,8 +88,8 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public static List<GetUnclaimedResult> getUnclaimedDetails(GetUnclaimedRequest request) {
String url = null;
try {
log.info("预约待领取接口请求为:" + JSON.toJSONString(request));
url = GetUnclaimedUrl + getQueryStr(request);
log.info("预约待领取接口请求为:" + url);
String resJsonStr = HttpHelper.sendGet(url);
log.info("预约待领取接口请求返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
......@@ -113,7 +113,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public static void spareInHourse(SpareInHourseRequest request) {
try {
log.info("备品仓入库接口请求:" + JSON.toJSONString(request));
log.info("备品仓入库接口请求url:"+SpareInHourseUrl+",参数:" + JSON.toJSONString(request));
String resJsonStr = HttpHelper.postJson(SpareInHourseUrl, request);
log.info("备品仓入库接口返回:" + resJsonStr);
LuxsanSpApiResult lizhenApiResult = JSONObject.parseObject(resJsonStr, LuxsanSpApiResult.class);
......@@ -133,7 +133,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
String url = null;
try {
url = GetSpareNoUrl + getQueryStr(request);
log.info("获取入库单号请求为:" + request);
log.info("获取入库单号请求为:" + url);
String resJsonStr = HttpHelper.sendGet(url);
// String resJsonStr = HttpHelper.sendGet(url);
log.info("获取入库单号返回:" + resJsonStr);
......
......@@ -11,6 +11,7 @@ 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.device.util.DataCache;
import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
......@@ -18,6 +19,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
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.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
......@@ -77,6 +79,8 @@ public class SpBoxCheckOutController {
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
@Autowired
private DataCache dataCache;
......@@ -119,7 +123,7 @@ public class SpBoxCheckOutController {
int binCodeNum = Integer.parseInt(gekouCodeStr.split("-")[1]);
//判断格口数量是否超出
int count = SpBoxUtil.GetBoxSubCount(boxBarcode.getBarcode());
int count =boxBarcode.getMaxSubNum();
if (binCodeNum > count) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
}
......@@ -203,6 +207,11 @@ public class SpBoxCheckOutController {
barcodeManager.save(gekouBarcode);
barcodeManager.save(boxBarcode);
//更新库存
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.updateInventoryAmount(storage.getCid(),codeBarcode.getPartNumber(), -codeBarcode.getQty());
Map<String,String> res=new HashMap<>();
res.put("PN",codeBarcode.getPartNumber());
res.put("InPutNum",codeBarcode.getQty()+"");
......
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;
......@@ -7,6 +8,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.util.DataCache;
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.dao.impl.DataLogDaoImpl;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
......@@ -50,10 +52,13 @@ public class SpBoxPutInController {
}
String currentRfid = station.getCurrentRfid();
log.info("getStationInfo工位上"+currentRfid);
// if(ObjectUtil.isEmpty(currentRfid)){
// currentRfid="CS1789B";
// }
// log.info("getStationInfo工位上"+currentRfid);
// currentRfid = "C0700377A";
if (StringUtils.isEmpty(currentRfid)){
return ResultBean.newErrorResult(-1,"","当前工位上currentRfid为空");
return ResultBean.newErrorResult(-1,"","当前工位上currentRfid为空",new String[]{},false);
}
Barcode barcode = codeResolve.resolveOneValideBarcode("=2x2=" + currentRfid);
......@@ -70,6 +75,7 @@ public class SpBoxPutInController {
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("currentBox",currentBox);
resultMap.put("boxInfo",boxInfo);
resultMap.put("subListNum",barcode.getSubListNum());
return ResultBean.newOkResult(resultMap);
}
......@@ -80,7 +86,53 @@ public class SpBoxPutInController {
@RequestMapping("/reelToBox")
@AnonymousAccess
public ResultBean reelToBox(@RequestBody Map<String, String> paramMap) throws Exception {
return ResultBean.newOkResult(ISpBoxPutInManager.reelToBox(paramMap));
try{
return ResultBean.newOkResult(ISpBoxPutInManager.reelToBox(paramMap));
} catch (Exception exception){
return ResultBean.newErrorResult(-1,"",exception.getMessage());
}
}
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IStoragePosManager storagePosManager;
@ApiOperation("更改料箱格口数量")
@RequestMapping("/updateSubCount")
@AnonymousAccess
public ResultBean updateSubCount(@RequestBody Map<String, String> paramMap) throws Exception {
String boxStr = paramMap.get("boxStr").trim();
Integer subNum = Integer.parseInt(paramMap.get("subNum").trim());
//解析料箱信息
Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
if (boxBarcode == null) {
return ResultBean.newErrorResult(-1, "", "不是有效的料箱条码");
}
//判断料箱是否有料
if (boxBarcode.getSubCodeList() != null && boxBarcode.getSubCodeList().size() > 0) {
return ResultBean.newErrorResult(-1, "", "料箱不为空,无法修改格口数量");
}
if (subNum <= 0 && subNum > 10) {
return ResultBean.newErrorResult(-1, "", "请输入正确的格口数量(1-10)");
}
boxBarcode.setMaxSubNum(subNum);
barcodeManager.save(boxBarcode);
//更改库位中的条码
StoragePos pos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if(pos!=null){
pos.setBarcode(boxBarcode);
storagePosManager.save(pos);
}
return ResultBean.newOkResult("OK");
}
}
......@@ -78,8 +78,8 @@ public class SpUnclaimedController {
@RequestMapping("/getAllUnclaimed")
@AnonymousAccess
public ResultBean getAllUnclaimed(String no) {
// List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<GetUnclaimedResult> resultList = new ArrayList<>();
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
// List<GetUnclaimedResult> resultList = new ArrayList<>();
List<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll();
List<LiteOrder> onlyOneAllLiteOrderFromDB = new ArrayList<>();
Map<String, List<LiteOrder>> collect = allLiteOrderFromDB.stream().collect(Collectors.groupingBy(LiteOrder::getOrderNo));
......
......@@ -9,7 +9,9 @@ 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.device.util.DataCache;
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.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
......@@ -58,6 +60,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
@Autowired
private TaskService taskService;
@Autowired
private DataCache dataCache;
@Override
@Transactional(rollbackFor = Exception.class)
public synchronized Map<String, String> reelToBox(Map<String, String> paramMap) throws Exception {
......@@ -94,7 +99,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
int binCodeNum = Integer.parseInt(gekouCodeStr.split("-")[1]);
//判断格口数量是否超出
int count = SpBoxUtil.GetBoxSubCount(boxBarcode.getBarcode());
int count = boxBarcode.getMaxSubNum();
if (binCodeNum > count) {
// throw new Exception(boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
}
......@@ -225,6 +230,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
storagePosManager.save(pos);
barcodeManager.save(gekouBarcode);
barcodeManager.save(boxBarcode);
//更新库存
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.updateInventoryAmount(storage.getCid(),codeBarcode.getPartNumber(), codeBarcode.getQty());
Map<String,String> res=new HashMap<>();
res.put("PN",codeBarcode.getPartNumber());
......
......@@ -131,7 +131,8 @@ public class SpBoxUtil {
if (ObjectUtil.isEmpty(activeDetails)) {
}
for (int i = 1; i <= 6; i++) {
int max=barcode.getMaxSubNum();
for (int i = 1; i <= max; i++) {
List<Object> par = new ArrayList<>();
String materialBarcode = boxStr + "-0" + i;
String partNumber = getPartNumber(subCodeList, materialBarcode);
......@@ -161,8 +162,31 @@ public class SpBoxUtil {
pars.add(par);
}
if (boxStr.startsWith("CS")) {
if(barcode.getMaxSubNum()>0) {
if ("A".equals(suffix)) {
List<List<Object>> oList = new ArrayList<>();
for (int i=0;i<max;i++){
if(i%2==0){
oList.add(pars.get(i));
}else{
resultList.add(pars.get(i));
}
}
resultList.addAll(oList);
} else if ("B".equals(suffix)) {
List<List<Object>> oList = new ArrayList<>();
for(int i=max-1;i>=0;i--){
if(i%2==0){
resultList.add(pars.get(i));
}else{
oList.add(pars.get(i));
}
}
resultList.addAll(oList);
}
}
else if (boxStr.startsWith("CS")) {
if ("A".equals(suffix)) {
resultList.add(pars.get(1));
resultList.add(pars.get(3));
......
......@@ -232,7 +232,7 @@ public class SpareNoCache {
StoragePos emptyPos = null;
for (StoragePos exPos :
needOutPos.values()) {
int subCount = SpBoxUtil.GetBoxSubCount(exPos.getBarcode().getBarcode());
int subCount = exPos.getBarcode().getMaxSubNum();
if (exPos.getBarcode().getSubCodeList().size() < subCount) {
emptyPos = exPos;
break;
......@@ -256,13 +256,18 @@ public class SpareNoCache {
Collection<String> excludePosIds = taskService.excludePosIds();
//寻找一个空格口
List<String> boxTypes = new ArrayList<>();
boxTypes.add("");
boxTypes.add("CS");
boxTypes.add("CB");
boxTypes.add("CM");
for (String type :
boxTypes) {
int count = SpBoxUtil.GetBoxSubCount(type);
emptyPos = storagePosManager.findEmptyBoxToPutIn(storageIdList, excludePosIds, dataCache.getCheckOutType(), type, count);
if(type==""){
emptyPos = storagePosManager.findEmptyBoxToPut(storageIdList, excludePosIds, dataCache.getCheckOutType());
}else{
int count = SpBoxUtil.GetBoxSubCount(type);
emptyPos = storagePosManager.findEmptyBoxToPutIn(storageIdList, excludePosIds, dataCache.getCheckOutType(), type, count);
}
emptyBox = emptyPos.getBarcode();
if (emptyPos != null) {
newPn.setBarcode(emptyBox.getBarcode() + "-" + (emptyBox.getSubCodeList() == null ? 1 : emptyBox.getSubCodeList().size()));
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!