1483 发货管理-PDA-装箱菜单下逻辑修改,扫码记录可删除,数量可编辑
This commit is contained in:
parent
5bcf86c22f
commit
1d086bd2cc
|
|
@ -5,7 +5,6 @@ import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.ttzero.excel.annotation.ExcelColumn;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -76,4 +75,9 @@ public class BomMaterialDTO {
|
||||||
*/
|
*/
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private List<BomMaterialDTO> children;
|
private List<BomMaterialDTO> children;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物料单位
|
||||||
|
*/
|
||||||
|
private String materialUnit;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,6 @@ public class MaterialCodeItemAddQO {
|
||||||
@NotNull
|
@NotNull
|
||||||
private BigDecimal num;
|
private BigDecimal num;
|
||||||
|
|
||||||
/**
|
|
||||||
* 实发数量
|
|
||||||
*/
|
|
||||||
@NotNull
|
|
||||||
private BigDecimal actualNum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单位
|
* 单位
|
||||||
*/
|
*/
|
||||||
|
|
@ -62,15 +56,4 @@ public class MaterialCodeItemAddQO {
|
||||||
*/
|
*/
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private String productionOrderNumber;
|
private String productionOrderNumber;
|
||||||
|
|
||||||
/**
|
|
||||||
* 箱号
|
|
||||||
*/
|
|
||||||
@NotBlank
|
|
||||||
private String boxNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 最小包装量
|
|
||||||
*/
|
|
||||||
private BigDecimal minPackagingNum;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,6 @@ public class MaterialCodeItemUpdateQO {
|
||||||
@NotNull
|
@NotNull
|
||||||
private BigDecimal num;
|
private BigDecimal num;
|
||||||
|
|
||||||
/**
|
|
||||||
* 实发数量
|
|
||||||
*/
|
|
||||||
@NotNull
|
|
||||||
private BigDecimal actualNum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 单位
|
* 单位
|
||||||
*/
|
*/
|
||||||
|
|
@ -54,14 +48,4 @@ public class MaterialCodeItemUpdateQO {
|
||||||
@NotBlank
|
@NotBlank
|
||||||
private String productionOrderNumber;
|
private String productionOrderNumber;
|
||||||
|
|
||||||
/**
|
|
||||||
* 箱号
|
|
||||||
*/
|
|
||||||
@NotBlank
|
|
||||||
private String boxNo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 最小包装量
|
|
||||||
*/
|
|
||||||
private BigDecimal minPackagingNum;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.nflg.wms.common.pojo.qo;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ShipmentPackingMaterialInfoQO {
|
||||||
|
@NotNull
|
||||||
|
private Long materialQRId;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private BigDecimal actualNum;
|
||||||
|
}
|
||||||
|
|
@ -19,5 +19,5 @@ public class ShipmentPackingQO {
|
||||||
* 物料二维码ID列表
|
* 物料二维码ID列表
|
||||||
*/
|
*/
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private List<Long> materialQRIds;
|
private List<ShipmentPackingMaterialInfoQO> materialInfos;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.nflg.wms.common.pojo.qo;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ShipmentUnPackingMaterialInfoQO {
|
||||||
|
@NotNull
|
||||||
|
private Long materialQRId;
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private BigDecimal actualNum;
|
||||||
|
}
|
||||||
|
|
@ -15,9 +15,9 @@ public class ShipmentUnpackingQO {
|
||||||
private Long packagingCodeId;
|
private Long packagingCodeId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 要添加的物料二维码ID列表
|
* 要添加的物料信息列表
|
||||||
*/
|
*/
|
||||||
private List<Long> materialQRIdsForAdd;
|
private List<ShipmentUnPackingMaterialInfoQO> materialInfosForAdd;
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 要删除的物料二维码ID列表
|
// * 要删除的物料二维码ID列表
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,6 @@ public class ShipmentMaterialCodeItemVO {
|
||||||
*/
|
*/
|
||||||
private String boxNo;
|
private String boxNo;
|
||||||
|
|
||||||
/**
|
|
||||||
* 最小包装量
|
|
||||||
*/
|
|
||||||
private BigDecimal minPackagingNum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态,0:未装箱;1:已装箱;5:已安装
|
* 状态,0:未装箱;1:已装箱;5:已安装
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ public class ShipmentMaterialCodeQRVO {
|
||||||
|
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 序号
|
* 序号
|
||||||
*/
|
*/
|
||||||
|
|
@ -90,4 +92,9 @@ public class ShipmentMaterialCodeQRVO {
|
||||||
*/
|
*/
|
||||||
private String orderDate;
|
private String orderDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 剩余数量
|
||||||
|
*/
|
||||||
|
private BigDecimal leftNum;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import lombok.experimental.Accessors;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
|
|
@ -79,26 +80,11 @@ public class WmsShipmentMaterialCodeItem implements Serializable {
|
||||||
*/
|
*/
|
||||||
private String boxNo;
|
private String boxNo;
|
||||||
|
|
||||||
/**
|
|
||||||
* 最小包装量
|
|
||||||
*/
|
|
||||||
private BigDecimal minPackagingNum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态,0:未装箱;1:装箱中;2:已装箱;
|
* 状态,0:未装箱;1:装箱中;2:已装箱;
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
/**
|
|
||||||
* 打包箱数量
|
|
||||||
*/
|
|
||||||
private Integer packingNum;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 剩余打包箱数量
|
|
||||||
*/
|
|
||||||
private Integer packingLeft;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人
|
* 创建人
|
||||||
*/
|
*/
|
||||||
|
|
@ -123,6 +109,18 @@ public class WmsShipmentMaterialCodeItem implements Serializable {
|
||||||
private String key;
|
private String key;
|
||||||
|
|
||||||
public String getKey() {
|
public String getKey() {
|
||||||
return this.materialNo + "|" + this.productionOrderNumber + "|" + this.boxNo;
|
return this.materialNo + "|" + this.productionOrderNumber + "|" + this.parentMaterialDescribe;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
WmsShipmentMaterialCodeItem that = (WmsShipmentMaterialCodeItem) o;
|
||||||
|
return Objects.equals(materialCodeId, that.materialCodeId) && Objects.equals(materialNo, that.materialNo) && Objects.equals(parentMaterialDescribe, that.parentMaterialDescribe) && Objects.equals(productionOrderNumber, that.productionOrderNumber);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(materialCodeId, materialNo, parentMaterialDescribe, productionOrderNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,6 @@ public interface WmsShipmentMaterialCodeItemMapper extends BaseMapper<WmsShipmen
|
||||||
|
|
||||||
List<ShipmentMaterialCodeItemVO> getByCodeId(Long codeId);
|
List<ShipmentMaterialCodeItemVO> getByCodeId(Long codeId);
|
||||||
|
|
||||||
void updatePackingNum(Set<Long> ids);
|
|
||||||
|
|
||||||
List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos);
|
List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos);
|
||||||
|
|
||||||
List<MaterialItemPrintVO> getListByItemIds(List<Long> ids);
|
List<MaterialItemPrintVO> getListByItemIds(List<Long> ids);
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,13 @@
|
||||||
package com.nflg.wms.repository.service;
|
package com.nflg.wms.repository.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO;
|
import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem;
|
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -20,9 +22,11 @@ public interface IWmsShipmentMaterialCodeItemService extends IService<WmsShipmen
|
||||||
|
|
||||||
List<ShipmentMaterialCodeItemVO> getByCodeId(Long codeId);
|
List<ShipmentMaterialCodeItemVO> getByCodeId(Long codeId);
|
||||||
|
|
||||||
void updatePackingNum(Set<Long> ids);
|
|
||||||
|
|
||||||
List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos);
|
List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos);
|
||||||
|
|
||||||
List<MaterialItemPrintVO> getListByItemIds(List<Long> ids);
|
List<MaterialItemPrintVO> getListByItemIds(List<Long> ids);
|
||||||
|
|
||||||
|
void updateStatusAndBoxNoAndActualNum(List<WmsShipmentMaterialCodeItem> items, Integer status, String boxNo, BigDecimal actualNum, Map<Long, BigDecimal> id2ActualNumMap);
|
||||||
|
|
||||||
|
List<WmsShipmentMaterialCodeItem> getSameMaterialItems(Long materialCodeId, String materialNo, String parentMaterialDescribe, String productionOrderNumber);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
package com.nflg.wms.repository.service.impl;
|
package com.nflg.wms.repository.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
||||||
|
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem;
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr;
|
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr;
|
||||||
import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemQrMapper;
|
import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemQrMapper;
|
||||||
import com.nflg.wms.repository.mapper.dto.GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO;
|
import com.nflg.wms.repository.mapper.dto.GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO;
|
||||||
import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemQrService;
|
import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemQrService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
|
@ -22,6 +26,9 @@ import java.util.Set;
|
||||||
@Service
|
@Service
|
||||||
public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl<WmsShipmentMaterialCodeItemQrMapper, WmsShipmentMaterialCodeItemQr> implements IWmsShipmentMaterialCodeItemQrService {
|
public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl<WmsShipmentMaterialCodeItemQrMapper, WmsShipmentMaterialCodeItemQr> implements IWmsShipmentMaterialCodeItemQrService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IWmsShipmentMaterialCodeItemService wmsShipmentMaterialCodeItemService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO params) {
|
public String getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(GetQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatusParamsDTO params) {
|
||||||
return baseMapper.getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(params);
|
return baseMapper.getQRCodeByMaterialNoAndDeviceNoAndProductionOrderNumberAndStatus(params);
|
||||||
|
|
@ -29,7 +36,13 @@ public class WmsShipmentMaterialCodeItemQrServiceImpl extends ServiceImpl<WmsShi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ShipmentMaterialCodeQRVO getInfoByQRCode(String code) {
|
public ShipmentMaterialCodeQRVO getInfoByQRCode(String code) {
|
||||||
return baseMapper.getInfoByQRCode(code);
|
ShipmentMaterialCodeQRVO info = baseMapper.getInfoByQRCode(code);
|
||||||
|
WmsShipmentMaterialCodeItem item = wmsShipmentMaterialCodeItemService.getById(info.getItemId());
|
||||||
|
List<WmsShipmentMaterialCodeItem> sameMaterialItems =
|
||||||
|
wmsShipmentMaterialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber());
|
||||||
|
BigDecimal totalActualNum = sameMaterialItems.stream().map(WmsShipmentMaterialCodeItem::getActualNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
info.setLeftNum(item.getNum().subtract(totalActualNum));
|
||||||
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,19 @@
|
||||||
package com.nflg.wms.repository.service.impl;
|
package com.nflg.wms.repository.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO;
|
import com.nflg.wms.common.pojo.vo.MaterialItemPrintVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
||||||
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem;
|
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItem;
|
||||||
import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemMapper;
|
import com.nflg.wms.repository.mapper.WmsShipmentMaterialCodeItemMapper;
|
||||||
import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemService;
|
import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -27,11 +32,6 @@ public class WmsShipmentMaterialCodeItemServiceImpl extends ServiceImpl<WmsShipm
|
||||||
return baseMapper.getByCodeId(codeId);
|
return baseMapper.getByCodeId(codeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updatePackingNum(Set<Long> ids) {
|
|
||||||
baseMapper.updatePackingNum(ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos) {
|
public List<MaterialItemPrintVO> getListByMaterialNos(Set<String> materialNos) {
|
||||||
return baseMapper.getListByMaterialNos(materialNos);
|
return baseMapper.getListByMaterialNos(materialNos);
|
||||||
|
|
@ -41,4 +41,27 @@ public class WmsShipmentMaterialCodeItemServiceImpl extends ServiceImpl<WmsShipm
|
||||||
public List<MaterialItemPrintVO> getListByItemIds(List<Long> ids) {
|
public List<MaterialItemPrintVO> getListByItemIds(List<Long> ids) {
|
||||||
return baseMapper.getListByItemIds(ids);
|
return baseMapper.getListByItemIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateStatusAndBoxNoAndActualNum(List<WmsShipmentMaterialCodeItem> items, Integer status, String boxNo, BigDecimal actualNum, Map<Long, BigDecimal> id2ActualNumMap) {
|
||||||
|
for (WmsShipmentMaterialCodeItem item : items) {
|
||||||
|
item.setStatus(status);
|
||||||
|
item.setBoxNo(boxNo);
|
||||||
|
item.setActualNum(actualNum != null ? actualNum : id2ActualNumMap.get(item.getId()));
|
||||||
|
item.setUpdateBy(UserUtil.getUserName());
|
||||||
|
item.setUpdateTime(LocalDateTime.now());
|
||||||
|
}
|
||||||
|
this.updateBatchById(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WmsShipmentMaterialCodeItem> getSameMaterialItems(Long materialCodeId, String materialNo, String parentMaterialDescribe, String productionOrderNumber) {
|
||||||
|
return lambdaQuery()
|
||||||
|
.eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, materialCodeId)
|
||||||
|
.eq(WmsShipmentMaterialCodeItem::getMaterialNo, materialNo)
|
||||||
|
.eq(WmsShipmentMaterialCodeItem::getParentMaterialDescribe, parentMaterialDescribe)
|
||||||
|
.eq(WmsShipmentMaterialCodeItem::getProductionOrderNumber, productionOrderNumber)
|
||||||
|
.list();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,26 +6,6 @@
|
||||||
select * from wms_shipment_material_code_item where material_code_id = #{codeId}
|
select * from wms_shipment_material_code_item where material_code_id = #{codeId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<update id="updatePackingNum">
|
|
||||||
WITH updated_data AS (
|
|
||||||
SELECT
|
|
||||||
"id",
|
|
||||||
packing_num,
|
|
||||||
(packing_num - (SELECT COUNT(1) FROM wms_shipment_material_code_item_qr WHERE item_id =
|
|
||||||
wms_shipment_material_code_item."id" AND status = 1)) as new_packing_left
|
|
||||||
FROM wms_shipment_material_code_item
|
|
||||||
)
|
|
||||||
UPDATE wms_shipment_material_code_item t
|
|
||||||
SET
|
|
||||||
packing_left = u.new_packing_left,
|
|
||||||
status = CASE WHEN u.new_packing_left = 0 THEN 2 WHEN u.new_packing_left=u.packing_num THEN 0 ELSE 1 END
|
|
||||||
FROM updated_data u
|
|
||||||
WHERE t."id" = u."id" and t."id" IN
|
|
||||||
<foreach item="id" collection="ids" separator="," open="(" close=")">
|
|
||||||
#{id}
|
|
||||||
</foreach>
|
|
||||||
</update>
|
|
||||||
|
|
||||||
<select id="getListByMaterialNos" resultType="com.nflg.wms.common.pojo.vo.MaterialItemPrintVO">
|
<select id="getListByMaterialNos" resultType="com.nflg.wms.common.pojo.vo.MaterialItemPrintVO">
|
||||||
SELECT it.id, it.material_no, it.material_describe, it.num, it.actual_num, it.unit,
|
SELECT it.id, it.material_no, it.material_describe, it.num, it.actual_num, it.unit,
|
||||||
it.project_type, it.production_order_number, it.box_no,
|
it.project_type, it.production_order_number, it.box_no,
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getInfoByQRCode" resultType="com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO">
|
<select id="getInfoByQRCode" resultType="com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO">
|
||||||
SELECT qr.id,qr.no,it.material_no,it.material_describe,qr.num,it.unit,qr.status,mc.device_no,mc.customer_name
|
SELECT qr.id,qr.item_id,qr.no,it.material_no,it.material_describe,qr.num,it.unit,qr.status,mc.device_no,mc.customer_name
|
||||||
FROM wms_shipment_material_code_item_qr qr
|
FROM wms_shipment_material_code_item_qr qr
|
||||||
INNER JOIN wms_shipment_material_code_item it ON qr.item_id=it."id"
|
INNER JOIN wms_shipment_material_code_item it ON qr.item_id=it."id"
|
||||||
INNER JOIN wms_shipment_material_code mc ON mc."id"=it.material_code_id
|
INNER JOIN wms_shipment_material_code mc ON mc."id"=it.material_code_id
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<select id="getPackList" resultType="com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO">
|
<select id="getPackList" resultType="com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO">
|
||||||
SELECT ROW_NUMBER() OVER () AS "index",it."id",qr.no,cit.material_no,cit.material_describe,cit.num
|
SELECT ROW_NUMBER() OVER () AS "index",it."id",qr.no,cit.material_no,cit.material_describe,cit.num
|
||||||
,qr.num as actualNum,cit.unit,d.device_no,d.customer_name
|
,cit.actual_num as actualNum,cit.unit,d.device_no,d.customer_name
|
||||||
FROM wms_shipment_packaging_code_item it
|
FROM wms_shipment_packaging_code_item it
|
||||||
INNER JOIN wms_shipment_material_code_item_qr qr ON it.material_code_item_qr_id=qr."id"
|
INNER JOIN wms_shipment_material_code_item_qr qr ON it.material_code_item_qr_id=qr."id"
|
||||||
INNER JOIN wms_shipment_material_code_item cit ON qr.item_id=cit."id"
|
INNER JOIN wms_shipment_material_code_item cit ON qr.item_id=cit."id"
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@ import com.nflg.wms.common.pojo.vo.MaterialPdfVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
||||||
import com.nflg.wms.common.util.EecExcelUtil;
|
import com.nflg.wms.common.util.EecExcelUtil;
|
||||||
import com.nflg.wms.common.util.NumberUtil;
|
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.*;
|
import com.nflg.wms.repository.entity.*;
|
||||||
|
|
@ -187,7 +186,7 @@ public class MaterialCodeController extends BaseController {
|
||||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("物料清单导入模板.xlsx", StandardCharsets.UTF_8));
|
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("物料清单导入模板.xlsx", StandardCharsets.UTF_8));
|
||||||
new Workbook()
|
new Workbook()
|
||||||
.addSheet(new TemplateSheet(new ClassPathResource("template/物料码打印导出模板.xlsx").getInputStream())
|
.addSheet(new TemplateSheet(new ClassPathResource("template/物料码打印导入模板.xlsx").getInputStream())
|
||||||
).writeTo(response.getOutputStream());
|
).writeTo(response.getOutputStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,34 +251,31 @@ public class MaterialCodeController extends BaseController {
|
||||||
item.setMaterialNo(row.getString(1));
|
item.setMaterialNo(row.getString(1));
|
||||||
item.setMaterialDescribe(row.getString(2));
|
item.setMaterialDescribe(row.getString(2));
|
||||||
item.setNum(row.getDecimal(3));
|
item.setNum(row.getDecimal(3));
|
||||||
item.setActualNum(row.getDecimal(4));
|
item.setActualNum(BigDecimal.ZERO);
|
||||||
item.setMinPackagingNum(item.getActualNum());
|
item.setUnit(row.getString(4));
|
||||||
item.setUnit(row.getString(5));
|
item.setProjectType(row.getString(5));
|
||||||
item.setProjectType(row.getString(6));
|
item.setParentMaterialDescribe(row.getString(6));
|
||||||
item.setParentMaterialDescribe(row.getString(7));
|
item.setProductionOrderNumber(row.getString(7));
|
||||||
item.setProductionOrderNumber(row.getString(8));
|
|
||||||
item.setBoxNo(row.getString(9));
|
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
item.setCreateTime(LocalDateTime.now());
|
item.setCreateTime(LocalDateTime.now());
|
||||||
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
|
||||||
item.setPackingLeft(item.getPackingNum());
|
|
||||||
items.add(item);
|
items.add(item);
|
||||||
qrs.add(new WmsShipmentMaterialCodeItemQr()
|
qrs.add(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setItemId(item.getId())
|
.setItemId(item.getId())
|
||||||
.setNo(KeyUtil.nextFCode())
|
.setNo(KeyUtil.nextFCode())
|
||||||
.setNum(item.getMinPackagingNum())
|
.setNum(item.getNum())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// Set<String> repeats = items.stream().collect(Collectors.groupingBy(WmsShipmentMaterialCodeItem::getKey))
|
Set<String> repeats = items.stream().collect(Collectors.groupingBy(WmsShipmentMaterialCodeItem::getKey))
|
||||||
// .values()
|
.values()
|
||||||
// .stream().filter(list -> list.size() > 1)
|
.stream().filter(list -> list.size() > 1)
|
||||||
// .map(list -> list.get(0).getMaterialNo())
|
.map(list -> list.get(0).getMaterialNo())
|
||||||
// .collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
// VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats))
|
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats))
|
||||||
// .throwMessage("以下物料重复:" + StrUtil.join(",", repeats));
|
.throwMessage("以下物料重复:" + StrUtil.join(",", repeats));
|
||||||
materialCodeService.save(materialCode);
|
materialCodeService.save(materialCode);
|
||||||
materialCodeItemService.saveBatch(items);
|
materialCodeItemService.saveBatch(items);
|
||||||
materialCodeItemQrService.saveBatch(qrs);
|
materialCodeItemQrService.saveBatch(qrs);
|
||||||
|
|
@ -293,38 +289,21 @@ public class MaterialCodeController extends BaseController {
|
||||||
@Transactional
|
@Transactional
|
||||||
@PostMapping("item/add")
|
@PostMapping("item/add")
|
||||||
public ApiResult<Void> addItem(@Valid @RequestBody MaterialCodeItemAddQO qo) {
|
public ApiResult<Void> addItem(@Valid @RequestBody MaterialCodeItemAddQO qo) {
|
||||||
VUtil.trueThrowBusinessError(materialCodeItemService.lambdaQuery()
|
List<WmsShipmentMaterialCodeItem> sameMaterialItems =
|
||||||
.eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, qo.getMaterialCodeId())
|
materialCodeItemService.getSameMaterialItems(qo.getMaterialCodeId(), qo.getMaterialNo(), qo.getParentMaterialDescribe(), qo.getProductionOrderNumber());
|
||||||
.eq(WmsShipmentMaterialCodeItem::getProductionOrderNumber, qo.getProductionOrderNumber())
|
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(sameMaterialItems)).throwMessage("物料已存在");
|
||||||
.eq(WmsShipmentMaterialCodeItem::getMaterialNo, qo.getMaterialNo())
|
|
||||||
.exists()).throwMessage("物料已存在");
|
|
||||||
WmsShipmentMaterialCodeItem item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo);
|
WmsShipmentMaterialCodeItem item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo);
|
||||||
if (Objects.isNull(qo.getMinPackagingNum())) {
|
|
||||||
item.setMinPackagingNum(qo.getNum());
|
|
||||||
} else {
|
|
||||||
VUtil.trueThrowBusinessError(qo.getMinPackagingNum().compareTo(qo.getNum()) > 0)
|
|
||||||
.throwMessage("最小包装数量不能大于数量");
|
|
||||||
item.setMinPackagingNum(qo.getMinPackagingNum());
|
|
||||||
}
|
|
||||||
item.setId(IdUtil.getSnowflakeNextId());
|
item.setId(IdUtil.getSnowflakeNextId());
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
item.setCreateTime(LocalDateTime.now());
|
item.setCreateTime(LocalDateTime.now());
|
||||||
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
item.setActualNum(BigDecimal.ZERO);
|
||||||
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
||||||
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
.setItemId(item.getId())
|
||||||
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
.setNo(KeyUtil.nextFCode())
|
||||||
item.setPackingLeft(item.getPackingNum());
|
.setNum(item.getNum())
|
||||||
// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
|
.setCreateBy(UserUtil.getUserName())
|
||||||
for (int i = 1; i <= item.getPackingNum(); i++) {
|
.setCreateTime(LocalDateTime.now())
|
||||||
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
);
|
||||||
.setItemId(item.getId())
|
|
||||||
.setNo(KeyUtil.nextFCode())
|
|
||||||
// .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
|
|
||||||
.setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i))
|
|
||||||
.setCreateBy(UserUtil.getUserName())
|
|
||||||
.setCreateTime(LocalDateTime.now())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
materialCodeItemService.save(item);
|
materialCodeItemService.save(item);
|
||||||
materialCodeService.lambdaUpdate()
|
materialCodeService.lambdaUpdate()
|
||||||
.set(WmsShipmentMaterialCode::getStatus, 1)
|
.set(WmsShipmentMaterialCode::getStatus, 1)
|
||||||
|
|
@ -342,37 +321,26 @@ public class MaterialCodeController extends BaseController {
|
||||||
public ApiResult<Void> updateItem(@Valid @RequestBody MaterialCodeItemUpdateQO qo) {
|
public ApiResult<Void> updateItem(@Valid @RequestBody MaterialCodeItemUpdateQO qo) {
|
||||||
WmsShipmentMaterialCodeItem item = materialCodeItemService.getById(qo.getId());
|
WmsShipmentMaterialCodeItem item = materialCodeItemService.getById(qo.getId());
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("清单明细不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("清单明细不存在");
|
||||||
if (Objects.isNull(qo.getMinPackagingNum())) {
|
|
||||||
qo.setMinPackagingNum(qo.getNum());
|
|
||||||
} else {
|
|
||||||
VUtil.trueThrowBusinessError(qo.getMinPackagingNum().compareTo(qo.getNum()) > 0)
|
|
||||||
.throwMessage("最小包装数量不能大于数量");
|
|
||||||
qo.setMinPackagingNum(qo.getNum());
|
|
||||||
}
|
|
||||||
VUtil.trueThrowBusinessError(item.getStatus() > 0)
|
VUtil.trueThrowBusinessError(item.getStatus() > 0)
|
||||||
.throwMessage("已装箱,不能修改");
|
.throwMessage("已装箱,不能修改");
|
||||||
|
|
||||||
|
|
||||||
|
List<WmsShipmentMaterialCodeItem> sameMaterialItems =
|
||||||
|
materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber());
|
||||||
|
VUtil.trueThrowBusinessError(sameMaterialItems.size() > 1)
|
||||||
|
.throwMessage("存在多行物料编码、生产订单号、上级物料描述三个字段相同的情况,不允许修改");
|
||||||
|
|
||||||
item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo);
|
item = Convert.convert(WmsShipmentMaterialCodeItem.class, qo);
|
||||||
|
|
||||||
item.setUpdateBy(UserUtil.getUserName());
|
item.setUpdateBy(UserUtil.getUserName());
|
||||||
item.setUpdateTime(LocalDateTime.now());
|
item.setUpdateTime(LocalDateTime.now());
|
||||||
materialCodeItemService.updateById(item);
|
materialCodeItemService.updateById(item);
|
||||||
materialCodeItemQrService.lambdaUpdate()
|
materialCodeItemQrService.lambdaUpdate()
|
||||||
|
.set(WmsShipmentMaterialCodeItemQr::getNum, item.getNum())
|
||||||
|
.set(WmsShipmentMaterialCodeItemQr::getUpdateBy, UserUtil.getUserName())
|
||||||
|
.set(WmsShipmentMaterialCodeItemQr::getUpdateTime, LocalDateTime.now())
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
||||||
.remove();
|
.update();
|
||||||
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
|
||||||
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
|
||||||
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
|
||||||
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
|
||||||
item.setPackingLeft(item.getPackingNum());
|
|
||||||
// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
|
|
||||||
for (int i = 1; i <= item.getPackingNum(); i++) {
|
|
||||||
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
|
||||||
.setItemId(item.getId())
|
|
||||||
.setNo(KeyUtil.nextFCode())
|
|
||||||
.setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i))
|
|
||||||
.setCreateBy(UserUtil.getUserName())
|
|
||||||
.setCreateTime(LocalDateTime.now())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -390,6 +358,9 @@ public class MaterialCodeController extends BaseController {
|
||||||
.stream()
|
.stream()
|
||||||
.map(WmsShipmentMaterialCodeItem::getId)
|
.map(WmsShipmentMaterialCodeItem::getId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
VUtil.trueThrowBusinessError(deleteIds.size() < ids.size()).throwMessage("已装箱的不可删除");
|
||||||
|
|
||||||
if (CollectionUtil.isNotEmpty(deleteIds)) {
|
if (CollectionUtil.isNotEmpty(deleteIds)) {
|
||||||
materialCodeItemService.lambdaUpdate()
|
materialCodeItemService.lambdaUpdate()
|
||||||
.in(WmsShipmentMaterialCodeItem::getId, deleteIds)
|
.in(WmsShipmentMaterialCodeItem::getId, deleteIds)
|
||||||
|
|
@ -412,8 +383,7 @@ public class MaterialCodeController extends BaseController {
|
||||||
public ApiResult<Void> importItemFromExcel(@RequestParam Long materialCodeId, @RequestParam Boolean cover, @RequestParam("file") MultipartFile file) throws IOException {
|
public ApiResult<Void> importItemFromExcel(@RequestParam Long materialCodeId, @RequestParam Boolean cover, @RequestParam("file") MultipartFile file) throws IOException {
|
||||||
WmsShipmentMaterialCode materialCode = materialCodeService.getById(materialCodeId);
|
WmsShipmentMaterialCode materialCode = materialCodeService.getById(materialCodeId);
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(materialCode)).throwMessage("清单不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(materialCode)).throwMessage("清单不存在");
|
||||||
List<WmsShipmentMaterialCodeItem> dbItems = materialCodeItemService.lambdaQuery()
|
List<WmsShipmentMaterialCodeItem> allDbItems = materialCodeItemService.lambdaQuery()
|
||||||
.select(WmsShipmentMaterialCodeItem::getId, WmsShipmentMaterialCodeItem::getMaterialNo, WmsShipmentMaterialCodeItem::getStatus)
|
|
||||||
.eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, materialCodeId)
|
.eq(WmsShipmentMaterialCodeItem::getMaterialCodeId, materialCodeId)
|
||||||
.list();
|
.list();
|
||||||
List<WmsShipmentMaterialCodeItemQr> qrsForAdd = new ArrayList<>();
|
List<WmsShipmentMaterialCodeItemQr> qrsForAdd = new ArrayList<>();
|
||||||
|
|
@ -422,6 +392,7 @@ public class MaterialCodeController extends BaseController {
|
||||||
List<WmsShipmentMaterialCodeItem> itemsForAdd = new ArrayList<>();
|
List<WmsShipmentMaterialCodeItem> itemsForAdd = new ArrayList<>();
|
||||||
List<WmsShipmentMaterialCodeItem> itemsForUpdate = new ArrayList<>();
|
List<WmsShipmentMaterialCodeItem> itemsForUpdate = new ArrayList<>();
|
||||||
List<String> repeats = new ArrayList<>();
|
List<String> repeats = new ArrayList<>();
|
||||||
|
List<String> dbExists = new ArrayList<>();
|
||||||
reader.sheet(0).rows().forEach(row -> {
|
reader.sheet(0).rows().forEach(row -> {
|
||||||
log.debug("第{}行:{}", row.getRowNum(), row);
|
log.debug("第{}行:{}", row.getRowNum(), row);
|
||||||
if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) {
|
if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) {
|
||||||
|
|
@ -431,74 +402,77 @@ public class MaterialCodeController extends BaseController {
|
||||||
item.setMaterialNo(row.getString(1));
|
item.setMaterialNo(row.getString(1));
|
||||||
item.setMaterialDescribe(row.getString(2));
|
item.setMaterialDescribe(row.getString(2));
|
||||||
item.setNum(row.getDecimal(3));
|
item.setNum(row.getDecimal(3));
|
||||||
item.setActualNum(row.getDecimal(4));
|
item.setActualNum(BigDecimal.ZERO);
|
||||||
item.setMinPackagingNum(item.getActualNum());
|
item.setUnit(row.getString(4));
|
||||||
item.setUnit(row.getString(5));
|
item.setProjectType(row.getString(5));
|
||||||
item.setProjectType(row.getString(6));
|
item.setParentMaterialDescribe(row.getString(6));
|
||||||
item.setParentMaterialDescribe(row.getString(7));
|
item.setProductionOrderNumber(row.getString(7));
|
||||||
item.setProductionOrderNumber(row.getString(8));
|
|
||||||
item.setBoxNo(row.getString(9));
|
|
||||||
item.setPackingNum(1);
|
|
||||||
item.setPackingLeft(1);
|
|
||||||
if (itemsForAdd.stream().anyMatch(it -> it.getKey().equals(item.getKey()))) {
|
if (itemsForAdd.stream().anyMatch(it -> it.getKey().equals(item.getKey()))) {
|
||||||
repeats.add(item.getMaterialNo());
|
repeats.add(item.getMaterialNo());
|
||||||
} else {
|
} else {
|
||||||
|
List<WmsShipmentMaterialCodeItem> dbItems = allDbItems.stream()
|
||||||
|
.filter(it -> it.getKey().equals(item.getKey()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
if (!cover) {
|
if (!cover) {
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
if (CollectionUtil.isNotEmpty(dbItems)) {
|
||||||
item.setCreateTime(LocalDateTime.now());
|
dbExists.add(dbItems.get(0).getMaterialNo());
|
||||||
itemsForAdd.add(item);
|
} else {
|
||||||
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
|
||||||
.setItemId(item.getId())
|
|
||||||
.setNo(KeyUtil.nextFCode())
|
|
||||||
.setNum(item.getMinPackagingNum())
|
|
||||||
.setCreateBy(UserUtil.getUserName())
|
|
||||||
.setCreateTime(LocalDateTime.now())
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
WmsShipmentMaterialCodeItem dbItem = dbItems.stream()
|
|
||||||
.filter(it -> it.getKey().equals(item.getKey()))
|
|
||||||
.findFirst()
|
|
||||||
.orElse(null);
|
|
||||||
if (Objects.isNull(dbItem)) {
|
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
item.setCreateTime(LocalDateTime.now());
|
item.setCreateTime(LocalDateTime.now());
|
||||||
itemsForAdd.add(item);
|
itemsForAdd.add(item);
|
||||||
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setItemId(item.getId())
|
.setItemId(item.getId())
|
||||||
.setNo(KeyUtil.nextFCode())
|
.setNo(KeyUtil.nextFCode())
|
||||||
.setNum(item.getMinPackagingNum())
|
.setNum(item.getNum())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
);
|
);
|
||||||
} else if (dbItem.getStatus() == 0) {
|
}
|
||||||
item.setId(dbItem.getId());
|
} else {
|
||||||
item.setUpdateBy(UserUtil.getUserName());
|
if (CollectionUtil.isEmpty(dbItems)) {
|
||||||
item.setUpdateTime(LocalDateTime.now());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
itemsForUpdate.add(item);
|
item.setCreateTime(LocalDateTime.now());
|
||||||
List<WmsShipmentMaterialCodeItemQr> iqrs = materialCodeItemQrService.lambdaQuery()
|
itemsForAdd.add(item);
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
||||||
.list();
|
.setItemId(item.getId())
|
||||||
if (iqrs.size() > 1) {
|
.setNo(KeyUtil.nextFCode())
|
||||||
materialCodeItemQrService.lambdaUpdate()
|
.setNum(item.getNum())
|
||||||
|
.setCreateBy(UserUtil.getUserName())
|
||||||
|
.setCreateTime(LocalDateTime.now())
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
if (dbItems.size() > 1) {
|
||||||
|
dbExists.add(dbItems.get(0).getMaterialNo());
|
||||||
|
} else if (dbItems.get(0).getStatus() == 0) {
|
||||||
|
item.setId(dbItems.get(0).getId());
|
||||||
|
item.setUpdateBy(UserUtil.getUserName());
|
||||||
|
item.setUpdateTime(LocalDateTime.now());
|
||||||
|
itemsForUpdate.add(item);
|
||||||
|
List<WmsShipmentMaterialCodeItemQr> iqrs = materialCodeItemQrService.lambdaQuery()
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
||||||
.remove();
|
.list();
|
||||||
}
|
if (iqrs.size() > 1) {
|
||||||
if (iqrs.size() == 1) {
|
materialCodeItemQrService.lambdaUpdate()
|
||||||
qrsForUpdate.add(
|
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
||||||
new WmsShipmentMaterialCodeItemQr()
|
.remove();
|
||||||
.setId(iqrs.get(0).getId())
|
}
|
||||||
.setNum(item.getMinPackagingNum())
|
if (iqrs.size() == 1) {
|
||||||
.setCreateBy(UserUtil.getUserName())
|
qrsForUpdate.add(
|
||||||
.setCreateTime(LocalDateTime.now())
|
new WmsShipmentMaterialCodeItemQr()
|
||||||
);
|
.setId(iqrs.get(0).getId())
|
||||||
} else {
|
.setNum(item.getNum())
|
||||||
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setItemId(item.getId())
|
.setCreateTime(LocalDateTime.now())
|
||||||
.setNo(KeyUtil.nextFCode())
|
);
|
||||||
.setNum(item.getMinPackagingNum())
|
} else {
|
||||||
.setCreateBy(UserUtil.getUserName())
|
qrsForAdd.add(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setItemId(item.getId())
|
||||||
);
|
.setNo(KeyUtil.nextFCode())
|
||||||
|
.setNum(item.getNum())
|
||||||
|
.setCreateBy(UserUtil.getUserName())
|
||||||
|
.setCreateTime(LocalDateTime.now())
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -507,6 +481,10 @@ public class MaterialCodeController extends BaseController {
|
||||||
});
|
});
|
||||||
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats))
|
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(repeats))
|
||||||
.throwMessage("以下物料重复:" + StrUtil.join(",", repeats));
|
.throwMessage("以下物料重复:" + StrUtil.join(",", repeats));
|
||||||
|
|
||||||
|
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(dbExists))
|
||||||
|
.throwMessage(!cover ? "以下物料已存在:" + StrUtil.join(",", dbExists)
|
||||||
|
: "存在多行物料编码、生产订单号、上级物料描述三个字段相同的情况,不允许修改: " + dbExists);
|
||||||
if (CollectionUtil.isNotEmpty(itemsForAdd)) {
|
if (CollectionUtil.isNotEmpty(itemsForAdd)) {
|
||||||
materialCodeItemService.saveBatch(itemsForAdd);
|
materialCodeItemService.saveBatch(itemsForAdd);
|
||||||
materialCodeService.lambdaUpdate()
|
materialCodeService.lambdaUpdate()
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,40 @@
|
||||||
package com.nflg.wms.shipment.controller;
|
package com.nflg.wms.shipment.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.nflg.wms.common.pojo.ApiResult;
|
import com.nflg.wms.common.pojo.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
import com.nflg.wms.common.pojo.PageData;
|
||||||
import com.nflg.wms.common.pojo.dto.DeliverNormalOrderItemDTO;
|
|
||||||
import com.nflg.wms.common.pojo.qo.*;
|
import com.nflg.wms.common.pojo.qo.*;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentPackagingCodeVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentPackagingCodeVO;
|
||||||
|
import com.nflg.wms.common.util.NumberUtil;
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.DictionaryItem;
|
import com.nflg.wms.repository.entity.*;
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr;
|
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentPackagingCode;
|
|
||||||
import com.nflg.wms.repository.entity.WmsShipmentPackagingCodeItem;
|
|
||||||
import com.nflg.wms.repository.service.*;
|
import com.nflg.wms.repository.service.*;
|
||||||
import com.nflg.wms.shipment.service.BasdeSerialNumberControllerService;
|
import com.nflg.wms.shipment.service.BasdeSerialNumberControllerService;
|
||||||
import com.nflg.wms.shipment.util.HtmlToImageUtil;
|
import com.nflg.wms.shipment.util.*;
|
||||||
import com.nflg.wms.shipment.util.KeyUtil;
|
|
||||||
import com.nflg.wms.shipment.util.PdfGeneratorUtil;
|
|
||||||
import com.nflg.wms.shipment.util.QRCodeUtil;
|
|
||||||
import com.nflg.wms.shipment.util.ThymeleafUtil;
|
|
||||||
import com.nflg.wms.starter.BaseController;
|
import com.nflg.wms.starter.BaseController;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import org.springframework.core.io.ClassPathResource;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -186,10 +181,25 @@ public class PackagingCodeController extends BaseController {
|
||||||
WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId());
|
WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId());
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在");
|
||||||
VUtil.trueThrowBusinessError(info.getStatus() == 2).throwMessage("该箱已发车");
|
VUtil.trueThrowBusinessError(info.getStatus() == 2).throwMessage("该箱已发车");
|
||||||
List<WmsShipmentMaterialCodeItemQr> items = materialCodeItemQrService.listByIds(qo.getMaterialQRIds());
|
List<Long> materialQRIds = qo.getMaterialInfos().stream().map(ShipmentPackingMaterialInfoQO::getMaterialQRId).collect(Collectors.toList());
|
||||||
VUtil.trueThrowBusinessError(items.size() != qo.getMaterialQRIds().size()).throwMessage("数据有变动,请重新扫码");
|
List<WmsShipmentMaterialCodeItemQr> itemQrs = materialCodeItemQrService.listByIds(materialQRIds);
|
||||||
items.removeIf(item -> item.getStatus() == 1);
|
VUtil.trueThrowBusinessError(itemQrs.size() != materialQRIds.size()).throwMessage("数据有变动,请重新扫码");
|
||||||
if (CollectionUtil.isNotEmpty(items)) {
|
itemQrs.removeIf(item -> item.getStatus() == 1);
|
||||||
|
Set<Long> itemIdSet = itemQrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet());
|
||||||
|
List<WmsShipmentMaterialCodeItem> items = materialCodeItemService.listByIds(itemIdSet);
|
||||||
|
|
||||||
|
Map<Long, Long> qrId2ItemIdMap = itemQrs.stream().collect(Collectors.toMap(WmsShipmentMaterialCodeItemQr::getId, WmsShipmentMaterialCodeItemQr::getItemId, (oldValue, newValue) -> newValue));
|
||||||
|
Map<Long, BigDecimal> itemId2ActualNumMap = new HashMap<>();
|
||||||
|
for (ShipmentPackingMaterialInfoQO materialInfoQO : qo.getMaterialInfos()) {
|
||||||
|
Long qrId = materialInfoQO.getMaterialQRId();
|
||||||
|
Long itemId = qrId2ItemIdMap.get(qrId);
|
||||||
|
itemId2ActualNumMap.put(itemId, materialInfoQO.getActualNum());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 校验实际数量
|
||||||
|
Map<WmsShipmentMaterialCodeItem, BigDecimal> materialCodeItem2NewActualNumMap = checkActualNum(itemId2ActualNumMap, items);
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(itemQrs)) {
|
||||||
if (info.getStatus() == 0) {
|
if (info.getStatus() == 0) {
|
||||||
packagingCodeService.lambdaUpdate()
|
packagingCodeService.lambdaUpdate()
|
||||||
.set(WmsShipmentPackagingCode::getStatus, 1)
|
.set(WmsShipmentPackagingCode::getStatus, 1)
|
||||||
|
|
@ -199,25 +209,81 @@ public class PackagingCodeController extends BaseController {
|
||||||
.eq(WmsShipmentPackagingCode::getStatus, 0)
|
.eq(WmsShipmentPackagingCode::getStatus, 0)
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
items.forEach(item -> {
|
itemQrs.forEach(item -> {
|
||||||
item.setStatus(1);
|
item.setStatus(1);
|
||||||
item.setUpdateBy(UserUtil.getUserName());
|
item.setUpdateBy(UserUtil.getUserName());
|
||||||
item.setUpdateTime(LocalDateTime.now());
|
item.setUpdateTime(LocalDateTime.now());
|
||||||
});
|
});
|
||||||
packagingCodeItemService.saveBatch(
|
packagingCodeItemService.saveBatch(
|
||||||
items.stream().map(it -> new WmsShipmentPackagingCodeItem()
|
itemQrs.stream().map(it -> new WmsShipmentPackagingCodeItem()
|
||||||
.setPackagingCodeId(qo.getPackagingCodeId())
|
.setPackagingCodeId(qo.getPackagingCodeId())
|
||||||
.setMaterialCodeItemQrId(it.getId())
|
.setMaterialCodeItemQrId(it.getId())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
).toList()
|
).toList()
|
||||||
);
|
);
|
||||||
materialCodeItemQrService.updateBatchById(items);
|
materialCodeItemQrService.updateBatchById(itemQrs);
|
||||||
materialCodeItemService.updatePackingNum(items.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()));
|
materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(), null, itemId2ActualNumMap);
|
||||||
|
|
||||||
|
addMaterialCodeItemIfNumBigThenActualNum(materialCodeItem2NewActualNumMap);
|
||||||
}
|
}
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addMaterialCodeItemIfNumBigThenActualNum(Map<WmsShipmentMaterialCodeItem, BigDecimal> materialCodeItem2NewActualNumMap) {
|
||||||
|
if (CollectionUtil.isNotEmpty(materialCodeItem2NewActualNumMap)) {
|
||||||
|
for (WmsShipmentMaterialCodeItem item : materialCodeItem2NewActualNumMap.keySet()) {
|
||||||
|
if (item.getNum().compareTo(materialCodeItem2NewActualNumMap.get(item)) > 0) {
|
||||||
|
|
||||||
|
List<WmsShipmentMaterialCodeItem> sameMaterialItems =
|
||||||
|
materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber());
|
||||||
|
|
||||||
|
for (WmsShipmentMaterialCodeItem m : sameMaterialItems) {
|
||||||
|
if (!m.getId().equals(item.getId()) && m.getStatus() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WmsShipmentMaterialCodeItem newMaterialCodeItem = new WmsShipmentMaterialCodeItem();
|
||||||
|
BeanUtil.copyProperties(item, newMaterialCodeItem);
|
||||||
|
|
||||||
|
newMaterialCodeItem.setId(IdUtil.getSnowflakeNextId());
|
||||||
|
newMaterialCodeItem.setActualNum(BigDecimal.ZERO);
|
||||||
|
newMaterialCodeItem.setBoxNo(null);
|
||||||
|
newMaterialCodeItem.setStatus(0);
|
||||||
|
newMaterialCodeItem.setCreateBy(UserUtil.getUserName());
|
||||||
|
newMaterialCodeItem.setCreateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
||||||
|
.setItemId(newMaterialCodeItem.getId())
|
||||||
|
.setNo(KeyUtil.next())
|
||||||
|
.setNum(newMaterialCodeItem.getNum())
|
||||||
|
.setCreateBy(UserUtil.getUserName())
|
||||||
|
.setCreateTime(LocalDateTime.now())
|
||||||
|
);
|
||||||
|
materialCodeItemService.save(newMaterialCodeItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<WmsShipmentMaterialCodeItem, BigDecimal> checkActualNum(Map<Long, BigDecimal> itemId2ActualNumMap, List<WmsShipmentMaterialCodeItem> items) {
|
||||||
|
Map<WmsShipmentMaterialCodeItem, BigDecimal> materialCodeItem2NewActualNumMap = new HashMap<>();
|
||||||
|
for (WmsShipmentMaterialCodeItem item : items) {
|
||||||
|
|
||||||
|
List<WmsShipmentMaterialCodeItem> sameMaterialItems =
|
||||||
|
materialCodeItemService.getSameMaterialItems(item.getMaterialCodeId(), item.getMaterialNo(), item.getParentMaterialDescribe(), item.getProductionOrderNumber());
|
||||||
|
BigDecimal totalActualNum = sameMaterialItems.stream().map(WmsShipmentMaterialCodeItem::getActualNum).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
BigDecimal actualNum = itemId2ActualNumMap.get(item.getId());
|
||||||
|
BigDecimal newActualNum = totalActualNum.add(actualNum);
|
||||||
|
if (item.getNum().compareTo(newActualNum) <= 0) {
|
||||||
|
VUtil.trueThrowBusinessError(true).throwMessage(String.format("物料%s数量不足,剩余数量:%s", item.getMaterialNo(), NumberUtil.format(item.getNum().subtract(totalActualNum))));
|
||||||
|
}
|
||||||
|
materialCodeItem2NewActualNumMap.put(item, newActualNum);
|
||||||
|
}
|
||||||
|
return materialCodeItem2NewActualNumMap;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 装箱打包(PC使用)
|
* 装箱打包(PC使用)
|
||||||
*/
|
*/
|
||||||
|
|
@ -229,12 +295,12 @@ public class PackagingCodeController extends BaseController {
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.map(ShipmentMaterialCodeQRVO::getId)
|
.map(ShipmentMaterialCodeQRVO::getId)
|
||||||
.toList();
|
.toList();
|
||||||
List<WmsShipmentMaterialCodeItemQr> items = materialCodeItemQrService.lambdaQuery()
|
List<WmsShipmentMaterialCodeItemQr> itemQrs = materialCodeItemQrService.lambdaQuery()
|
||||||
.in(WmsShipmentMaterialCodeItemQr::getId, ids)
|
.in(WmsShipmentMaterialCodeItemQr::getId, ids)
|
||||||
.list();
|
.list();
|
||||||
VUtil.trueThrowBusinessError(items.size() != ids.size()).throwMessage("数据有变动,请重新扫码");
|
VUtil.trueThrowBusinessError(itemQrs.size() != ids.size()).throwMessage("数据有变动,请重新扫码");
|
||||||
items.removeIf(item -> item.getStatus() == 1);
|
itemQrs.removeIf(item -> item.getStatus() == 1);
|
||||||
if (CollectionUtil.isEmpty(items)) {
|
if (CollectionUtil.isEmpty(itemQrs)) {
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
WmsShipmentPackagingCode info = packagingCodeService.getById(shipmentPCPackingQO.getPackagingCodeId());
|
WmsShipmentPackagingCode info = packagingCodeService.getById(shipmentPCPackingQO.getPackagingCodeId());
|
||||||
|
|
@ -249,24 +315,29 @@ public class PackagingCodeController extends BaseController {
|
||||||
.eq(WmsShipmentPackagingCode::getStatus, 0)
|
.eq(WmsShipmentPackagingCode::getStatus, 0)
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
items.forEach(item -> {
|
itemQrs.forEach(item -> {
|
||||||
item.setStatus(1);
|
item.setStatus(1);
|
||||||
item.setUpdateBy(UserUtil.getUserName());
|
item.setUpdateBy(UserUtil.getUserName());
|
||||||
item.setUpdateTime(LocalDateTime.now());
|
item.setUpdateTime(LocalDateTime.now());
|
||||||
});
|
});
|
||||||
packagingCodeItemService.saveBatch(
|
packagingCodeItemService.saveBatch(
|
||||||
items.stream().map(it -> new WmsShipmentPackagingCodeItem()
|
itemQrs.stream().map(it -> new WmsShipmentPackagingCodeItem()
|
||||||
.setPackagingCodeId(shipmentPCPackingQO.getPackagingCodeId())
|
.setPackagingCodeId(shipmentPCPackingQO.getPackagingCodeId())
|
||||||
.setMaterialCodeItemQrId(it.getId())
|
.setMaterialCodeItemQrId(it.getId())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
).toList()
|
).toList()
|
||||||
);
|
);
|
||||||
materialCodeItemQrService.updateBatchById(items);
|
materialCodeItemQrService.updateBatchById(itemQrs);
|
||||||
materialCodeItemService.updatePackingNum(items.stream()
|
|
||||||
.map(WmsShipmentMaterialCodeItemQr::getItemId)
|
Set<Long> itemIdSet = itemQrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet());
|
||||||
.collect(Collectors.toSet())
|
List<WmsShipmentMaterialCodeItem> items = materialCodeItemService.listByIds(itemIdSet);
|
||||||
);
|
|
||||||
|
Map<Long, BigDecimal> itemId2ActualNumMap = items.stream()
|
||||||
|
.collect(Collectors.toMap(WmsShipmentMaterialCodeItem::getId, WmsShipmentMaterialCodeItem::getNum));
|
||||||
|
materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(),null, itemId2ActualNumMap);
|
||||||
|
|
||||||
|
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -306,7 +377,9 @@ public class PackagingCodeController extends BaseController {
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getStatus, 1)
|
.eq(WmsShipmentMaterialCodeItemQr::getStatus, 1)
|
||||||
.in(WmsShipmentMaterialCodeItemQr::getId, item.getMaterialCodeItemQrId())
|
.in(WmsShipmentMaterialCodeItemQr::getId, item.getMaterialCodeItemQrId())
|
||||||
.update();
|
.update();
|
||||||
materialCodeItemService.updatePackingNum(Collections.singleton(qr.getItemId()));
|
|
||||||
|
WmsShipmentMaterialCodeItem materialCodeItem = materialCodeItemService.getById(qr.getItemId());
|
||||||
|
materialCodeItemService.updateStatusAndBoxNoAndActualNum(Lists.newArrayList(materialCodeItem), 0, "", BigDecimal.ZERO, null);
|
||||||
packagingCodeService.updateStatus(item.getPackagingCodeId());
|
packagingCodeService.updateStatus(item.getPackagingCodeId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -314,7 +387,7 @@ public class PackagingCodeController extends BaseController {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拆箱&添加物料(PDA使用)
|
* 拆箱下,添加物料(PDA使用)
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
@PostMapping("unpack")
|
@PostMapping("unpack")
|
||||||
|
|
@ -322,11 +395,28 @@ public class PackagingCodeController extends BaseController {
|
||||||
WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId());
|
WmsShipmentPackagingCode info = packagingCodeService.getById(qo.getPackagingCodeId());
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在");
|
VUtil.trueThrowBusinessError(Objects.isNull(info)).throwMessage("包装箱不存在");
|
||||||
VUtil.trueThrowBusinessError(info.getStatus() >= 2).throwMessage("该箱已装车");
|
VUtil.trueThrowBusinessError(info.getStatus() >= 2).throwMessage("该箱已装车");
|
||||||
if (CollectionUtil.isNotEmpty(qo.getMaterialQRIdsForAdd())) {
|
|
||||||
|
List<Long> materialQRIds = qo.getMaterialInfosForAdd().stream().map(ShipmentUnPackingMaterialInfoQO::getMaterialQRId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (CollectionUtil.isNotEmpty(materialQRIds)) {
|
||||||
List<WmsShipmentMaterialCodeItemQr> qrs = materialCodeItemQrService.lambdaQuery()
|
List<WmsShipmentMaterialCodeItemQr> qrs = materialCodeItemQrService.lambdaQuery()
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getStatus, 0)
|
.eq(WmsShipmentMaterialCodeItemQr::getStatus, 0)
|
||||||
.in(WmsShipmentMaterialCodeItemQr::getId, qo.getMaterialQRIdsForAdd())
|
.in(WmsShipmentMaterialCodeItemQr::getId, materialQRIds)
|
||||||
.list();
|
.list();
|
||||||
|
|
||||||
|
Set<Long> itemIdSet = qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet());
|
||||||
|
List<WmsShipmentMaterialCodeItem> items = materialCodeItemService.listByIds(itemIdSet);
|
||||||
|
|
||||||
|
Map<Long, Long> qrId2ItemIdMap = qrs.stream().collect(Collectors.toMap(WmsShipmentMaterialCodeItemQr::getId, WmsShipmentMaterialCodeItemQr::getItemId, (oldValue, newValue) -> newValue));
|
||||||
|
Map<Long, BigDecimal> itemId2ActualNumMap = new HashMap<>();
|
||||||
|
for (ShipmentUnPackingMaterialInfoQO materialInfoQO : qo.getMaterialInfosForAdd()) {
|
||||||
|
Long qrId = materialInfoQO.getMaterialQRId();
|
||||||
|
Long itemId = qrId2ItemIdMap.get(qrId);
|
||||||
|
itemId2ActualNumMap.put(itemId, materialInfoQO.getActualNum());
|
||||||
|
}
|
||||||
|
// 校验实际数量
|
||||||
|
Map<WmsShipmentMaterialCodeItem, BigDecimal> materialCodeItem2NewActualNumMap = checkActualNum(itemId2ActualNumMap, items);
|
||||||
|
|
||||||
if (CollectionUtil.isNotEmpty(qrs)) {
|
if (CollectionUtil.isNotEmpty(qrs)) {
|
||||||
if (info.getStatus() == 0) {
|
if (info.getStatus() == 0) {
|
||||||
packagingCodeService.lambdaUpdate()
|
packagingCodeService.lambdaUpdate()
|
||||||
|
|
@ -351,35 +441,11 @@ public class PackagingCodeController extends BaseController {
|
||||||
).toList()
|
).toList()
|
||||||
);
|
);
|
||||||
materialCodeItemQrService.updateBatchById(qrs);
|
materialCodeItemQrService.updateBatchById(qrs);
|
||||||
materialCodeItemService.updatePackingNum(qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()));
|
|
||||||
|
materialCodeItemService.updateStatusAndBoxNoAndActualNum(items, 2, info.getNo(), null, itemId2ActualNumMap);
|
||||||
|
addMaterialCodeItemIfNumBigThenActualNum(materialCodeItem2NewActualNumMap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if (CollectionUtil.isNotEmpty(qo.getMaterialQRIdsForDel())) {
|
|
||||||
// List<WmsShipmentPackagingCodeItem> items = packagingCodeItemService.lambdaQuery()
|
|
||||||
// .eq(WmsShipmentPackagingCodeItem::getPackagingCodeId, qo.getPackagingCodeId())
|
|
||||||
// .in(WmsShipmentPackagingCodeItem::getId, qo.getMaterialQRIdsForDel())
|
|
||||||
// .list();
|
|
||||||
// if (CollectionUtil.isNotEmpty(items)) {
|
|
||||||
// packagingCodeItemService.lambdaUpdate()
|
|
||||||
// .eq(WmsShipmentPackagingCodeItem::getPackagingCodeId, qo.getPackagingCodeId())
|
|
||||||
// .in(WmsShipmentPackagingCodeItem::getId, qo.getMaterialQRIdsForDel())
|
|
||||||
// .remove();
|
|
||||||
// List<WmsShipmentMaterialCodeItemQr> qrs = materialCodeItemQrService.lambdaQuery()
|
|
||||||
// .eq(WmsShipmentMaterialCodeItemQr::getStatus, 1)
|
|
||||||
// .in(WmsShipmentMaterialCodeItemQr::getId, items.stream().map(WmsShipmentPackagingCodeItem::getMaterialCodeItemQrId).toList())
|
|
||||||
// .list();
|
|
||||||
// if (CollectionUtil.isNotEmpty(qrs)) {
|
|
||||||
// materialCodeItemQrService.lambdaUpdate()
|
|
||||||
// .set(WmsShipmentMaterialCodeItemQr::getStatus, 0)
|
|
||||||
// .set(WmsShipmentMaterialCodeItemQr::getUpdateBy, UserUtil.getUserName())
|
|
||||||
// .set(WmsShipmentMaterialCodeItemQr::getUpdateTime, LocalDateTime.now())
|
|
||||||
// .eq(WmsShipmentMaterialCodeItemQr::getStatus, 1)
|
|
||||||
// .in(WmsShipmentMaterialCodeItemQr::getId, items.stream().map(WmsShipmentPackagingCodeItem::getMaterialCodeItemQrId).toList())
|
|
||||||
// .update();
|
|
||||||
// materialCodeItemService.updatePackingNum(qrs.stream().map(WmsShipmentMaterialCodeItemQr::getItemId).collect(Collectors.toSet()));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
packagingCodeService.updateStatus(qo.getPackagingCodeId());
|
packagingCodeService.updateStatus(qo.getPackagingCodeId());
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,26 +59,11 @@ public class MaterialCodeItemVO {
|
||||||
*/
|
*/
|
||||||
private String boxNo;
|
private String boxNo;
|
||||||
|
|
||||||
/**
|
|
||||||
* 最小包装量
|
|
||||||
*/
|
|
||||||
private BigDecimal minPackagingNum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态,0:未装箱;1:装箱中;2:已装箱;
|
* 状态,0:未装箱;1:装箱中;2:已装箱;
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
/**
|
|
||||||
* 打包箱数量
|
|
||||||
*/
|
|
||||||
private Integer packingNum;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 剩余打包箱数量
|
|
||||||
*/
|
|
||||||
private Integer packingLeft;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人
|
* 创建人
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue