Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit dd6fc38b
由
LN
编写于
2024-08-01 17:23:41 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
料箱修改格口功能。增加库存报表
1 个父辈
613792b0
隐藏空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
370 行增加
和
55 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/report/ReportController.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/rest/dto/InventoryItemDto.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/api/LuxsanSpApi.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxPutInController.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpUnclaimedController.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/service/manager/impl/SpBoxPutInManagerImpl.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/util/SpBoxUtil.java
src/main/java/com/neotel/smfcore/custom/luxsan_sp/util/SpareNoCache.java
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
dd6fc38
...
@@ -274,6 +274,7 @@ public class DataInitManager {
...
@@ -274,6 +274,7 @@ public class DataInitManager {
addNewFunctionMenu
(
81
,
pMenuReport
,
"materialShortageReport"
,
"缺料"
,
"materialShortageReport"
,
"neolight/materialShortageReport/index"
,
"mShortageReport"
,
functionMenuMap
);
addNewFunctionMenu
(
81
,
pMenuReport
,
"materialShortageReport"
,
"缺料"
,
"materialShortageReport"
,
"neolight/materialShortageReport/index"
,
"mShortageReport"
,
functionMenuMap
);
addNewFunctionMenu
(
82
,
pMenuReport
,
"pkSearch"
,
"PK查询"
,
"pkSearch"
,
"neolight/pkSearch/index"
,
"findOut"
,
functionMenuMap
);
addNewFunctionMenu
(
82
,
pMenuReport
,
"pkSearch"
,
"PK查询"
,
"pkSearch"
,
"neolight/pkSearch/index"
,
"findOut"
,
functionMenuMap
);
addNewFunctionMenu
(
83
,
pMenuReport
,
"sysInReport"
,
"盘点"
,
"sysInReport"
,
"neolight/sysInReport/index"
,
"mIDList"
,
functionMenuMap
);
addNewFunctionMenu
(
83
,
pMenuReport
,
"sysInReport"
,
"盘点"
,
"sysInReport"
,
"neolight/sysInReport/index"
,
"mIDList"
,
functionMenuMap
);
addNewFunctionMenu
(
84
,
pMenuReport
,
"pnInventory"
,
"库存报表"
,
"pnInventory"
,
"neolight/pnInventory/index"
,
"inventory"
,
functionMenuMap
);
//内仓
//内仓
...
...
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
dd6fc38
...
@@ -203,11 +203,29 @@ public class Barcode extends BasePo implements Serializable {
...
@@ -203,11 +203,29 @@ public class Barcode extends BasePo implements Serializable {
extraDataMap
.
put
(
key
,
value
);
extraDataMap
.
put
(
key
,
value
);
}
}
}
}
private
int
subListNum
=
0
;
public
int
getSubListNum
(){
UpdateSubNum
();
return
subListNum
;
}
/**
/**
* 料盒条码:料盒内所有物料条码
* 料盒条码:料盒内所有物料条码
*/
*/
private
List
<
Barcode
>
subCodeList
;
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 {
...
@@ -373,6 +391,38 @@ public class Barcode extends BasePo implements Serializable {
private
boolean
isInventory
=
false
;
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
;
private
int
seq
=
0
;
...
@@ -633,6 +683,7 @@ public class Barcode extends BasePo implements Serializable {
...
@@ -633,6 +683,7 @@ public class Barcode extends BasePo implements Serializable {
subCodeList
.
add
(
barcode
);
subCodeList
.
add
(
barcode
);
}
}
}
}
subListNum
=
subCodeList
.
size
();
}
}
public
synchronized
void
removeFromSubCodes
(
Barcode
subCode
){
public
synchronized
void
removeFromSubCodes
(
Barcode
subCode
){
...
@@ -657,5 +708,6 @@ public class Barcode extends BasePo implements Serializable {
...
@@ -657,5 +708,6 @@ public class Barcode extends BasePo implements Serializable {
subCodeList
.
add
(
subCode
);
subCodeList
.
add
(
subCode
);
}
}
}
}
subListNum
=
subCodeList
.
size
();
}
}
}
}
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
dd6fc38
...
@@ -534,6 +534,13 @@ public class DataCache {
...
@@ -534,6 +534,13 @@ public class DataCache {
private
synchronized
Map
<
String
,
InventoryItem
>
initInventory
(
String
cid
){
private
synchronized
Map
<
String
,
InventoryItem
>
initInventory
(
String
cid
){
Storage
storage
=
getStorage
(
cid
);
Storage
storage
=
getStorage
(
cid
);
Map
<
String
,
InventoryItem
>
storageInventoryMap
=
storagePosManager
.
getInventory
(
storage
.
getId
());
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 也需要锁定
//未完成的 Task 也需要锁定
// List<InventoryItem> feederLockInventories = dataLogDao.getStorageLockCount(storage.getId());
// List<InventoryItem> feederLockInventories = dataLogDao.getStorageLockCount(storage.getId());
...
@@ -579,29 +586,30 @@ public class DataCache {
...
@@ -579,29 +586,30 @@ public class DataCache {
* 修改库存,出库为负,入库为正
* 修改库存,出库为负,入库为正
*/
*/
public
int
updateInventory
(
StoragePos
pos
,
Barcode
barcode
){
public
int
updateInventory
(
StoragePos
pos
,
Barcode
barcode
){
Storage
storage
=
getStorageById
(
pos
.
getStorageId
());
// Storage storage = getStorageById(pos.getStorageId());
//
String
cid
=
storage
.
getCid
();
// String cid = storage.getCid();
String
partNumber
=
barcode
.
getPartNumber
();
// String partNumber = barcode.getPartNumber();
int
amount
=
0
;
// int amount = 0;
String
sizeStr
=
pos
.
getSizeStr
();
// String sizeStr = pos.getSizeStr();
if
(
pos
.
getBarcode
()
==
null
){
// if(pos.getBarcode() == null){
//出库
// //出库
amount
=
-
barcode
.
getAmount
();
// amount = - barcode.getAmount();
storage
.
emptyOnePos
(
pos
);
// storage.emptyOnePos(pos);
removeUsedPosNameList
(
cid
,
pos
.
getPosName
());
// removeUsedPosNameList(cid, pos.getPosName());
}
else
{
// }else{
//入库
// //入库
amount
=
barcode
.
getAmount
();
// amount = barcode.getAmount();
storage
.
useOnePos
(
pos
);
// storage.useOnePos(pos);
addUsedPosNameList
(
cid
,
pos
.
getPosName
());
// addUsedPosNameList(cid, pos.getPosName());
//入库单处理
// //入库单处理
if
(
ObjectUtil
.
isNotEmpty
(
storage
.
getInListName
())){
// if(ObjectUtil.isNotEmpty(storage.getInListName())){
inListCache
.
UpdateInList
(
storage
.
getInListName
(),
pos
,
barcode
);
// inListCache.UpdateInList(storage.getInListName(),pos,barcode);
}
// }
}
// }
allStorage
.
put
(
cid
,
storage
);
// allStorage.put(cid, storage);
return
updateInventoryAmount
(
cid
,
partNumber
,
amount
);
// return updateInventoryAmount(cid,partNumber,amount);
return
-
1
;
}
}
private
void
updateStorageInventory
(
String
cid
,
InventoryItem
inventoryItem
){
private
void
updateStorageInventory
(
String
cid
,
InventoryItem
inventoryItem
){
...
...
src/main/java/com/neotel/smfcore/core/report/ReportController.java
查看文件 @
dd6fc38
package
com
.
neotel
.
smfcore
.
core
.
report
;
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.DateUtil
;
import
com.neotel.smfcore.common.utils.FileUtil
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.util.DataCache
;
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.bean.ChartItem
;
import
com.neotel.smfcore.core.report.rest.dto.InoutDataDto
;
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.InventoryBoxDto
;
import
com.neotel.smfcore.core.report.rest.dto.InventoryGroupDto
;
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.mapstruct.ChartItemMapper
;
import
com.neotel.smfcore.core.report.rest.query.ReportQuery
;
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.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.manager.IStorageManager
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
...
@@ -24,14 +31,22 @@ import io.swagger.annotations.ApiOperation;
...
@@ -24,14 +31,22 @@ import io.swagger.annotations.ApiOperation;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
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.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.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
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
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.text.ParseException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.*
;
import
java.util.stream.Collectors
;
@Slf4j
@Slf4j
@RestController
@RestController
...
@@ -184,4 +199,89 @@ public class ReportController {
...
@@ -184,4 +199,89 @@ public class ReportController {
sdf
=
new
SimpleDateFormat
(
format
);
sdf
=
new
SimpleDateFormat
(
format
);
return
sdf
.
parse
(
dateStr
);
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
);
}
}
}
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
dd6fc38
...
@@ -696,7 +696,11 @@ public class StoragePosController {
...
@@ -696,7 +696,11 @@ public class StoragePosController {
data
.
add
(
pos
.
getBarcode
().
getLockName
());
data
.
add
(
pos
.
getBarcode
().
getLockName
());
data
.
add
(
pos
.
getBarcode
().
getAmount
());
data
.
add
(
pos
.
getBarcode
().
getAmount
());
data
.
add
(
putInTime
);
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
);
dataList
.
add
(
data
);
}
}
return
dataList
;
return
dataList
;
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/dto/InventoryItemDto.java
查看文件 @
dd6fc38
...
@@ -38,4 +38,10 @@ public class InventoryItemDto implements Serializable {
...
@@ -38,4 +38,10 @@ public class InventoryItemDto implements Serializable {
private
int
plateNumber
=
1
;
private
int
plateNumber
=
1
;
@ApiModelProperty
(
"库别"
)
private
String
wareHouseCode
;
@ApiModelProperty
(
"品名"
)
private
String
partname
;
}
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/IStoragePosManager.java
查看文件 @
dd6fc38
...
@@ -100,4 +100,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
...
@@ -100,4 +100,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos
findBoxPNInStorages
(
List
<
String
>
storageIdList
,
String
pn
,
Collection
<
String
>
excludePosIds
,
CHECKOUT_TYPE
checkOutType
)
;
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
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
);
}
}
src/main/java/com/neotel/smfcore/core/storage/service/manager/impl/StoragePosManagerImpl.java
查看文件 @
dd6fc38
...
@@ -62,19 +62,19 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -62,19 +62,19 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return
getInventory
(-
1
,
storageId
);
return
getInventory
(-
1
,
storageId
);
}
}
private
List
<
InventoryItem
>
inventory
(
int
type
,
String
...
storageIds
){
//
private List<InventoryItem> inventory(int type,String... storageIds){
Criteria
c
=
Criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"storageId"
).
in
(
storageIds
);
//
Criteria c = Criteria.where("barcode").exists(true).and("storageId").in(storageIds);
if
(
type
!=
-
1
){
//
if(type != -1){
c
=
c
.
and
(
"barcode.type"
).
is
(
type
);
//
c = c.and("barcode.type").is(type);
}
//
}
Aggregation
agg
=
Aggregation
.
newAggregation
(
//
Aggregation agg = Aggregation.newAggregation(
Aggregation
.
match
(
c
),
//
Aggregation.match(c),
Aggregation
.
group
(
"barcode.partNumber"
).
sum
(
"barcode.amount"
).
as
(
"stockCount"
).
count
().
as
(
"stockReel"
),
//
Aggregation.group("barcode.partNumber").sum("barcode.amount").as("stockCount").count().as("stockReel"),
Aggregation
.
project
(
"stockCount"
,
"stockReel"
).
and
(
"partNumber"
).
previousOperation
()
//
Aggregation.project("stockCount", "stockReel").and("partNumber").previousOperation()
);
//
);
AggregationResults
<
InventoryItem
>
results
=
storagePosDao
.
getMongoTemplate
().
aggregate
(
agg
,
StoragePos
.
class
,
InventoryItem
.
class
);
//
AggregationResults<InventoryItem> results = storagePosDao.getMongoTemplate().aggregate(agg, StoragePos.class, InventoryItem.class);
return
results
.
getMappedResults
();
//
return results.getMappedResults();
}
//
}
private
List
<
InventoryItem
>
lockInventory
(
int
type
,
String
...
storageIds
){
private
List
<
InventoryItem
>
lockInventory
(
int
type
,
String
...
storageIds
){
//被锁定的仓位
//被锁定的仓位
...
@@ -957,4 +957,48 @@ public class StoragePosManagerImpl implements IStoragePosManager {
...
@@ -957,4 +957,48 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
}
return
pos
;
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
();
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan_sp/api/LuxsanSpApi.java
查看文件 @
dd6fc38
...
@@ -53,10 +53,10 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
...
@@ -53,10 +53,10 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public
static
List
<
GetReturnInventoryResult
>
getReturnInventory
(
GetReturnInventoryRequest
request
)
{
public
static
List
<
GetReturnInventoryResult
>
getReturnInventory
(
GetReturnInventoryRequest
request
)
{
String
url
=
null
;
String
url
=
null
;
try
{
try
{
// 记录请求日志
log
.
info
(
"备品仓退库查询接口请求为: "
+
JSON
.
toJSONString
(
request
));
// 构造请求URL,附加查询参数
// 构造请求URL,附加查询参数
url
=
GetReturnInventory
+
getQueryStr
(
request
);
url
=
GetReturnInventory
+
getQueryStr
(
request
);
// 记录请求日志
log
.
info
(
"备品仓退库查询接口请求为: "
+
url
);
// 发送GET请求并获取JSON格式的响应字符串
// 发送GET请求并获取JSON格式的响应字符串
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
log
.
info
(
"备品仓退库查询接口返回为:"
+
resJsonStr
);
log
.
info
(
"备品仓退库查询接口返回为:"
+
resJsonStr
);
...
@@ -88,8 +88,8 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
...
@@ -88,8 +88,8 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public
static
List
<
GetUnclaimedResult
>
getUnclaimedDetails
(
GetUnclaimedRequest
request
)
{
public
static
List
<
GetUnclaimedResult
>
getUnclaimedDetails
(
GetUnclaimedRequest
request
)
{
String
url
=
null
;
String
url
=
null
;
try
{
try
{
log
.
info
(
"预约待领取接口请求为:"
+
JSON
.
toJSONString
(
request
));
url
=
GetUnclaimedUrl
+
getQueryStr
(
request
);
url
=
GetUnclaimedUrl
+
getQueryStr
(
request
);
log
.
info
(
"预约待领取接口请求为:"
+
url
);
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
log
.
info
(
"预约待领取接口请求返回:"
+
resJsonStr
);
log
.
info
(
"预约待领取接口请求返回:"
+
resJsonStr
);
LuxsanSpApiResult
lizhenApiResult
=
JSONObject
.
parseObject
(
resJsonStr
,
LuxsanSpApiResult
.
class
);
LuxsanSpApiResult
lizhenApiResult
=
JSONObject
.
parseObject
(
resJsonStr
,
LuxsanSpApiResult
.
class
);
...
@@ -113,7 +113,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
...
@@ -113,7 +113,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
public
static
void
spareInHourse
(
SpareInHourseRequest
request
)
{
public
static
void
spareInHourse
(
SpareInHourseRequest
request
)
{
try
{
try
{
log
.
info
(
"备品仓入库接口请求
为
:"
+
JSON
.
toJSONString
(
request
));
log
.
info
(
"备品仓入库接口请求
url:"
+
SpareInHourseUrl
+
",参数
:"
+
JSON
.
toJSONString
(
request
));
String
resJsonStr
=
HttpHelper
.
postJson
(
SpareInHourseUrl
,
request
);
String
resJsonStr
=
HttpHelper
.
postJson
(
SpareInHourseUrl
,
request
);
log
.
info
(
"备品仓入库接口返回:"
+
resJsonStr
);
log
.
info
(
"备品仓入库接口返回:"
+
resJsonStr
);
LuxsanSpApiResult
lizhenApiResult
=
JSONObject
.
parseObject
(
resJsonStr
,
LuxsanSpApiResult
.
class
);
LuxsanSpApiResult
lizhenApiResult
=
JSONObject
.
parseObject
(
resJsonStr
,
LuxsanSpApiResult
.
class
);
...
@@ -133,7 +133,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
...
@@ -133,7 +133,7 @@ public class LuxsanSpApi extends DefaultSmfApiListener {
String
url
=
null
;
String
url
=
null
;
try
{
try
{
url
=
GetSpareNoUrl
+
getQueryStr
(
request
);
url
=
GetSpareNoUrl
+
getQueryStr
(
request
);
log
.
info
(
"获取入库单号请求为:"
+
request
);
log
.
info
(
"获取入库单号请求为:"
+
url
);
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
String
resJsonStr
=
HttpHelper
.
sendGet
(
url
);
// String resJsonStr = HttpHelper.sendGet(url);
// String resJsonStr = HttpHelper.sendGet(url);
log
.
info
(
"获取入库单号返回:"
+
resJsonStr
);
log
.
info
(
"获取入库单号返回:"
+
resJsonStr
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxCheckOutController.java
查看文件 @
dd6fc38
...
@@ -11,6 +11,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -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.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
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.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
...
@@ -18,6 +19,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
...
@@ -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.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
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.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.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
...
@@ -77,6 +79,8 @@ public class SpBoxCheckOutController {
...
@@ -77,6 +79,8 @@ public class SpBoxCheckOutController {
@Autowired
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
private
ILiteOrderItemManager
liteOrderItemManager
;
@Autowired
private
DataCache
dataCache
;
...
@@ -119,7 +123,7 @@ public class SpBoxCheckOutController {
...
@@ -119,7 +123,7 @@ public class SpBoxCheckOutController {
int
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
int
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
//判断格口数量是否超出
//判断格口数量是否超出
int
count
=
SpBoxUtil
.
GetBoxSubCount
(
boxBarcode
.
getBarcode
()
);
int
count
=
boxBarcode
.
getMaxSubNum
(
);
if
(
binCodeNum
>
count
)
{
if
(
binCodeNum
>
count
)
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxBarcode
.
getBarcode
()
+
"最多格口数"
+
count
+
",请扫描正确的格口码"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
boxBarcode
.
getBarcode
()
+
"最多格口数"
+
count
+
",请扫描正确的格口码"
);
}
}
...
@@ -203,6 +207,11 @@ public class SpBoxCheckOutController {
...
@@ -203,6 +207,11 @@ public class SpBoxCheckOutController {
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
boxBarcode
);
barcodeManager
.
save
(
boxBarcode
);
//更新库存
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
updateInventoryAmount
(
storage
.
getCid
(),
codeBarcode
.
getPartNumber
(),
-
codeBarcode
.
getQty
());
Map
<
String
,
String
>
res
=
new
HashMap
<>();
Map
<
String
,
String
>
res
=
new
HashMap
<>();
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
res
.
put
(
"InPutNum"
,
codeBarcode
.
getQty
()+
""
);
res
.
put
(
"InPutNum"
,
codeBarcode
.
getQty
()+
""
);
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpBoxPutInController.java
查看文件 @
dd6fc38
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.manager.IBarcodeManager
;
...
@@ -7,6 +8,7 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -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.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
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.service.dao.impl.DataLogDaoImpl
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.agvBox.bean.Station
;
import
com.neotel.smfcore.custom.lizhen.agvBox.bean.Station
;
...
@@ -50,10 +52,13 @@ public class SpBoxPutInController {
...
@@ -50,10 +52,13 @@ public class SpBoxPutInController {
}
}
String
currentRfid
=
station
.
getCurrentRfid
();
String
currentRfid
=
station
.
getCurrentRfid
();
log
.
info
(
"getStationInfo工位上"
+
currentRfid
);
// if(ObjectUtil.isEmpty(currentRfid)){
// currentRfid="CS1789B";
// }
// log.info("getStationInfo工位上"+currentRfid);
// currentRfid = "C0700377A";
// currentRfid = "C0700377A";
if
(
StringUtils
.
isEmpty
(
currentRfid
)){
if
(
StringUtils
.
isEmpty
(
currentRfid
)){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"当前工位上currentRfid为空"
);
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"当前工位上currentRfid为空"
,
new
String
[]{},
false
);
}
}
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
currentRfid
);
Barcode
barcode
=
codeResolve
.
resolveOneValideBarcode
(
"=2x2="
+
currentRfid
);
...
@@ -70,6 +75,7 @@ public class SpBoxPutInController {
...
@@ -70,6 +75,7 @@ public class SpBoxPutInController {
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"currentBox"
,
currentBox
);
resultMap
.
put
(
"currentBox"
,
currentBox
);
resultMap
.
put
(
"boxInfo"
,
boxInfo
);
resultMap
.
put
(
"boxInfo"
,
boxInfo
);
resultMap
.
put
(
"subListNum"
,
barcode
.
getSubListNum
());
return
ResultBean
.
newOkResult
(
resultMap
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
}
...
@@ -80,7 +86,53 @@ public class SpBoxPutInController {
...
@@ -80,7 +86,53 @@ public class SpBoxPutInController {
@RequestMapping
(
"/reelToBox"
)
@RequestMapping
(
"/reelToBox"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
reelToBox
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
throws
Exception
{
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"
);
}
}
}
src/main/java/com/neotel/smfcore/custom/luxsan_sp/controller/SpUnclaimedController.java
查看文件 @
dd6fc38
...
@@ -78,8 +78,8 @@ public class SpUnclaimedController {
...
@@ -78,8 +78,8 @@ public class SpUnclaimedController {
@RequestMapping
(
"/getAllUnclaimed"
)
@RequestMapping
(
"/getAllUnclaimed"
)
@AnonymousAccess
@AnonymousAccess
public
ResultBean
getAllUnclaimed
(
String
no
)
{
public
ResultBean
getAllUnclaimed
(
String
no
)
{
//
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List
<
GetUnclaimedResult
>
resultList
=
LuxsanSpApi
.
getUnclaimedDetails
(
new
GetUnclaimedRequest
(
SpareNostatus
.
FORMAL_DEPT_ID
,
SpareNostatus
.
FUNCTION_DEPT
));
List
<
GetUnclaimedResult
>
resultList
=
new
ArrayList
<>();
//
List<GetUnclaimedResult> resultList = new ArrayList<>();
List
<
LiteOrder
>
allLiteOrderFromDB
=
liteOrderManager
.
findAll
();
List
<
LiteOrder
>
allLiteOrderFromDB
=
liteOrderManager
.
findAll
();
List
<
LiteOrder
>
onlyOneAllLiteOrderFromDB
=
new
ArrayList
<>();
List
<
LiteOrder
>
onlyOneAllLiteOrderFromDB
=
new
ArrayList
<>();
Map
<
String
,
List
<
LiteOrder
>>
collect
=
allLiteOrderFromDB
.
stream
().
collect
(
Collectors
.
groupingBy
(
LiteOrder:
:
getOrderNo
));
Map
<
String
,
List
<
LiteOrder
>>
collect
=
allLiteOrderFromDB
.
stream
().
collect
(
Collectors
.
groupingBy
(
LiteOrder:
:
getOrderNo
));
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/service/manager/impl/SpBoxPutInManagerImpl.java
查看文件 @
dd6fc38
...
@@ -9,7 +9,9 @@ import com.neotel.smfcore.core.barcode.service.po.Barcode;
...
@@ -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.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
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.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.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
...
@@ -58,6 +60,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
...
@@ -58,6 +60,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
@Autowired
@Autowired
private
TaskService
taskService
;
private
TaskService
taskService
;
@Autowired
private
DataCache
dataCache
;
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
synchronized
Map
<
String
,
String
>
reelToBox
(
Map
<
String
,
String
>
paramMap
)
throws
Exception
{
public
synchronized
Map
<
String
,
String
>
reelToBox
(
Map
<
String
,
String
>
paramMap
)
throws
Exception
{
...
@@ -94,7 +99,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
...
@@ -94,7 +99,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
int
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
int
binCodeNum
=
Integer
.
parseInt
(
gekouCodeStr
.
split
(
"-"
)[
1
]);
//判断格口数量是否超出
//判断格口数量是否超出
int
count
=
SpBoxUtil
.
GetBoxSubCount
(
boxBarcode
.
getBarcode
()
);
int
count
=
boxBarcode
.
getMaxSubNum
(
);
if
(
binCodeNum
>
count
)
{
if
(
binCodeNum
>
count
)
{
// throw new Exception(boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
// throw new Exception(boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
}
}
...
@@ -225,6 +230,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
...
@@ -225,6 +230,9 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
storagePosManager
.
save
(
pos
);
storagePosManager
.
save
(
pos
);
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
gekouBarcode
);
barcodeManager
.
save
(
boxBarcode
);
barcodeManager
.
save
(
boxBarcode
);
//更新库存
Storage
storage
=
dataCache
.
getStorageById
(
pos
.
getStorageId
());
dataCache
.
updateInventoryAmount
(
storage
.
getCid
(),
codeBarcode
.
getPartNumber
(),
codeBarcode
.
getQty
());
Map
<
String
,
String
>
res
=
new
HashMap
<>();
Map
<
String
,
String
>
res
=
new
HashMap
<>();
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
res
.
put
(
"PN"
,
codeBarcode
.
getPartNumber
());
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/util/SpBoxUtil.java
查看文件 @
dd6fc38
...
@@ -131,7 +131,8 @@ public class SpBoxUtil {
...
@@ -131,7 +131,8 @@ public class SpBoxUtil {
if
(
ObjectUtil
.
isEmpty
(
activeDetails
))
{
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
<>();
List
<
Object
>
par
=
new
ArrayList
<>();
String
materialBarcode
=
boxStr
+
"-0"
+
i
;
String
materialBarcode
=
boxStr
+
"-0"
+
i
;
String
partNumber
=
getPartNumber
(
subCodeList
,
materialBarcode
);
String
partNumber
=
getPartNumber
(
subCodeList
,
materialBarcode
);
...
@@ -161,8 +162,31 @@ public class SpBoxUtil {
...
@@ -161,8 +162,31 @@ public class SpBoxUtil {
pars
.
add
(
par
);
pars
.
add
(
par
);
}
}
if
(
barcode
.
getMaxSubNum
()>
0
)
{
if
(
boxStr
.
startsWith
(
"CS"
))
{
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
))
{
if
(
"A"
.
equals
(
suffix
))
{
resultList
.
add
(
pars
.
get
(
1
));
resultList
.
add
(
pars
.
get
(
1
));
resultList
.
add
(
pars
.
get
(
3
));
resultList
.
add
(
pars
.
get
(
3
));
...
...
src/main/java/com/neotel/smfcore/custom/luxsan_sp/util/SpareNoCache.java
查看文件 @
dd6fc38
...
@@ -232,7 +232,7 @@ public class SpareNoCache {
...
@@ -232,7 +232,7 @@ public class SpareNoCache {
StoragePos
emptyPos
=
null
;
StoragePos
emptyPos
=
null
;
for
(
StoragePos
exPos
:
for
(
StoragePos
exPos
:
needOutPos
.
values
())
{
needOutPos
.
values
())
{
int
subCount
=
SpBoxUtil
.
GetBoxSubCount
(
exPos
.
getBarcode
().
getBarcode
()
);
int
subCount
=
exPos
.
getBarcode
().
getMaxSubNum
(
);
if
(
exPos
.
getBarcode
().
getSubCodeList
().
size
()
<
subCount
)
{
if
(
exPos
.
getBarcode
().
getSubCodeList
().
size
()
<
subCount
)
{
emptyPos
=
exPos
;
emptyPos
=
exPos
;
break
;
break
;
...
@@ -256,13 +256,18 @@ public class SpareNoCache {
...
@@ -256,13 +256,18 @@ public class SpareNoCache {
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
Collection
<
String
>
excludePosIds
=
taskService
.
excludePosIds
();
//寻找一个空格口
//寻找一个空格口
List
<
String
>
boxTypes
=
new
ArrayList
<>();
List
<
String
>
boxTypes
=
new
ArrayList
<>();
boxTypes
.
add
(
""
);
boxTypes
.
add
(
"CS"
);
boxTypes
.
add
(
"CS"
);
boxTypes
.
add
(
"CB"
);
boxTypes
.
add
(
"CB"
);
boxTypes
.
add
(
"CM"
);
boxTypes
.
add
(
"CM"
);
for
(
String
type
:
for
(
String
type
:
boxTypes
)
{
boxTypes
)
{
int
count
=
SpBoxUtil
.
GetBoxSubCount
(
type
);
if
(
type
==
""
){
emptyPos
=
storagePosManager
.
findEmptyBoxToPutIn
(
storageIdList
,
excludePosIds
,
dataCache
.
getCheckOutType
(),
type
,
count
);
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
();
emptyBox
=
emptyPos
.
getBarcode
();
if
(
emptyPos
!=
null
)
{
if
(
emptyPos
!=
null
)
{
newPn
.
setBarcode
(
emptyBox
.
getBarcode
()
+
"-"
+
(
emptyBox
.
getSubCodeList
()
==
null
?
1
:
emptyBox
.
getSubCodeList
().
size
()));
newPn
.
setBarcode
(
emptyBox
.
getBarcode
()
+
"-"
+
(
emptyBox
.
getSubCodeList
()
==
null
?
1
:
emptyBox
.
getSubCodeList
().
size
()));
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论