Browse Source

生产订单查询

master
常熟吴彦祖 10 months ago
parent
commit
77c4d810a1
  1. 41
      src/main/java/com/gaotao/modules/boxManage/controller/BoxForNotificationController.java
  2. 19
      src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java
  3. 2
      src/main/java/com/gaotao/modules/boxManage/data/SoReceiveBoxesData.java
  4. 8
      src/main/java/com/gaotao/modules/boxManage/service/BoxForNotificationService.java
  5. 161
      src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java
  6. 59
      src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml

41
src/main/java/com/gaotao/modules/boxManage/controller/BoxForNotificationController.java

@ -58,4 +58,45 @@ public class BoxForNotificationController {
SoReceiveBoxesData row = srmSupplierService.searchBoxData(data);
return R.ok().put("rows", rows).put("row", row);
}
@PostMapping(value="/deleteSoReceiveBoxesData")
@ResponseBody
public R deleteSoReceiveBoxesData(@RequestBody SoReceiveBoxesData data) {
srmSupplierService.deleteSoReceiveBoxesData(data);
return R.ok();
}
@PostMapping(value="/updateBoxStatus")
@ResponseBody
public R updateBoxStatus(@RequestBody SoReceiveBoxesData data) {
srmSupplierService.updateBoxStatus(data);
return R.ok();
}
/**
*
* @description 扫描卷
* @author 常熟吴彦祖
* @date 2025/9/2 17:38
* @return R
*/
@PostMapping(value="/scanBoxRoll")
@ResponseBody
public R scanBoxRoll(@RequestBody SoReceiveBoxRollsData data) {
srmSupplierService.scanBoxRoll(data);
return R.ok();
}
/**
*
* @description 删除卷
* @author 常熟吴彦祖
* @date 2025/9/2 17:38
* @return R
*/
@PostMapping(value="/deleteBoxRoll")
@ResponseBody
public R deleteBoxRoll(@RequestBody SoReceiveBoxRollsData data) {
srmSupplierService.deleteBoxRoll(data);
return R.ok();
}
}

19
src/main/java/com/gaotao/modules/boxManage/dao/BoxForNotificationMapper.java

@ -2,7 +2,10 @@ package com.gaotao.modules.boxManage.dao;
import com.gaotao.modules.boxManage.data.SoReceiveBoxRollsData;
import com.gaotao.modules.boxManage.data.SoReceiveBoxesData;
import com.gaotao.modules.inventoryStock.entity.InventoryStock;
import com.gaotao.modules.outboundNotification.entity.OutboundNotificationDetailEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -16,4 +19,20 @@ public interface BoxForNotificationMapper {
List<SoReceiveBoxRollsData> searchBoxRollDetail(SoReceiveBoxesData data);
SoReceiveBoxesData searchBoxData(SoReceiveBoxesData data);
void deleteSoReceiveBoxesData(SoReceiveBoxesData data);
void updateBoxStatus(SoReceiveBoxesData data);
InventoryStock selectByRollNo(@Param("rollNo") String rollNo,
@Param("site") String site,
@Param("buNo") String buNo);
void updateStockParentRollNo(@Param("rollNo") String rollNo,@Param("parentRollNo")String parentRollNo,@Param("site")String site,@Param("buNo")String buNo);
void addBoxRoll(SoReceiveBoxRollsData data);
void updateBoxRollQty(@Param("site") String site,@Param("buNo") String buNo,@Param("boxNo") String boxNo);
List<OutboundNotificationDetailEntity> searchOutboundNotificationDetail( @Param("site") String site, @Param("buNo") String buNo, @Param("orderNo") String orderNo);
void updateBoxWareHouse( @Param("site") String site, @Param("buNo") String buNo, @Param("boxNo") String boxNo, @Param("warehouseId") String warehouseId);
void deleteBoxRoll( SoReceiveBoxRollsData inData);
}

2
src/main/java/com/gaotao/modules/boxManage/data/SoReceiveBoxesData.java

@ -8,5 +8,5 @@ import org.apache.ibatis.type.Alias;
@Alias("SoReceiveBoxesData")
public class SoReceiveBoxesData extends SoReceiveBoxesDto {
private String wareHouseName;
private Integer flag;
}

8
src/main/java/com/gaotao/modules/boxManage/service/BoxForNotificationService.java

@ -12,4 +12,12 @@ public interface BoxForNotificationService {
List<SoReceiveBoxRollsData> searchBoxRollDetail(SoReceiveBoxesData data);
SoReceiveBoxesData searchBoxData(SoReceiveBoxesData data);
void deleteSoReceiveBoxesData(SoReceiveBoxesData data);
void updateBoxStatus(SoReceiveBoxesData data);
void scanBoxRoll(SoReceiveBoxRollsData data);
void deleteBoxRoll(SoReceiveBoxRollsData data);
}

161
src/main/java/com/gaotao/modules/boxManage/service/impl/BoxForNotificationServiceImpl.java

@ -4,10 +4,16 @@ import com.gaotao.modules.boxManage.dao.BoxForNotificationMapper;
import com.gaotao.modules.boxManage.data.SoReceiveBoxRollsData;
import com.gaotao.modules.boxManage.data.SoReceiveBoxesData;
import com.gaotao.modules.boxManage.service.BoxForNotificationService;
import com.gaotao.modules.outboundNotification.entity.OutboundNotificationDetailEntity;
import com.gaotao.modules.sys.entity.SysUserEntity;
import com.gaotao.modules.trans.entity.TransNoControl;
import com.gaotao.modules.trans.service.TransNoControlService;
import com.gaotao.modules.inventoryStock.dao.InventoryStockMapper;
import com.gaotao.modules.inventoryStock.entity.InventoryStock;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -43,4 +49,159 @@ public class BoxForNotificationServiceImpl implements BoxForNotificationService
public SoReceiveBoxesData searchBoxData(SoReceiveBoxesData data){
return boxForNotificationMapper.searchBoxData(data);
}
@Override
public void deleteSoReceiveBoxesData(SoReceiveBoxesData data){
List<SoReceiveBoxRollsData> checkData=boxForNotificationMapper.searchBoxRollDetail(data);
if(!checkData.isEmpty()){
throw new RuntimeException("箱内有卷无法删除!");
}
boxForNotificationMapper.deleteSoReceiveBoxesData(data);
}
@Override
public void updateBoxStatus(SoReceiveBoxesData data){
if(data.getFlag()==0){
//0是封箱
SoReceiveBoxesData checkBox=boxForNotificationMapper.searchBoxData(data);
if(checkBox==null){
throw new RuntimeException("箱号不存在!");
}
if(!checkBox.getStatus().equals("未封箱")){
throw new RuntimeException("只有状态为未封箱的箱子可以封箱!");
}
//0是封箱
List<SoReceiveBoxRollsData> checkData=boxForNotificationMapper.searchBoxRollDetail(data);
if(checkData.isEmpty()){
throw new RuntimeException("箱内没有卷无法封箱!");
}
data.setStatus("封箱");
boxForNotificationMapper.updateBoxStatus(data);
}
if(data.getFlag()==1){
//1是拆箱
SoReceiveBoxesData checkBox=boxForNotificationMapper.searchBoxData(data);
if(checkBox==null){
throw new RuntimeException("箱号不存在!");
}
if(!checkBox.getStatus().equals("已封箱")){
throw new RuntimeException("只有状态为已封箱的箱子可以拆箱!");
}
data.setStatus("未封箱");
boxForNotificationMapper.updateBoxStatus(data);
}
}
@Override
@Transactional
public void scanBoxRoll(SoReceiveBoxRollsData data){
// 参数校验
if(data == null || data.getSite() == null || data.getBuNo() == null || data.getBoxNo() == null || data.getFinalRollNo() == null) {
throw new RuntimeException("参数不完整");
}
// 1. 查箱子状态
SoReceiveBoxesData boxQuery = new SoReceiveBoxesData();
boxQuery.setSite(data.getSite());
boxQuery.setBuNo(data.getBuNo());
boxQuery.setBoxNo(data.getBoxNo());
SoReceiveBoxesData box = searchBoxData(boxQuery);
if(box == null) {
throw new RuntimeException("箱号不存在");
}
if(!"未封箱".equals(box.getStatus()) ) {
throw new RuntimeException("只有状态为未封箱的箱子可以操作");
}
if(!"Y".equals(box.getcInStockFlag())) {
throw new RuntimeException("箱子不在仓库中,无法操作");
}
// 2. 查卷状态
InventoryStock stock = boxForNotificationMapper.selectByRollNo(
data.getFinalRollNo(), data.getSite(), data.getBuNo());
if(stock == null) {
throw new RuntimeException("卷不存在");
}
if(!"在库".equals(stock.getStatus())) {
throw new RuntimeException("卷状态不是在库,无法操作");
}
// 添加检查逻辑检查卷是否已经在其他箱子里
if (stock.getParentRollNo() != null && stock.getParentRollNo().startsWith("BOX")) {
throw new RuntimeException("卷已经在箱子:" + stock.getParentRollNo() + "中,请先取出");
}
List<OutboundNotificationDetailEntity> checkPartNo=boxForNotificationMapper.searchOutboundNotificationDetail(box.getSite(),box.getBuNo(),box.getOrderNo());
// 添加校验逻辑检查checkPartNo中是否至少有一行记录的partNo与卷的partNo相同
boolean partNoMatch = checkPartNo.stream()
.anyMatch(detail -> detail.getPartNo() != null && detail.getPartNo().equals(stock.getPartNo()));
if (!partNoMatch) {
throw new RuntimeException("该卷的物料编号与销售发货单中的物料编号不匹配");
}
// 检查箱的仓库是否为空如果为空则更新为卷的仓库如果不为空则检查是否一致
if(box.getWareHouseID()==null||"".equals(box.getWareHouseID())){
boxForNotificationMapper.updateBoxWareHouse(data.getSite(),data.getBuNo(),data.getBoxNo(),stock.getWarehouseId());
}else if(!box.getWareHouseID().equals(stock.getWarehouseId())){
throw new RuntimeException("该卷的仓库与箱的仓库不一致");
}
//改卷上级标签
boxForNotificationMapper.updateStockParentRollNo(data.getFinalRollNo(), data.getBoxNo(), data.getSite(), data.getBuNo());
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
data.setRollQty(stock.getQtyOnHand());
data.setReceivedBy(currentUser.getUsername());
data.setWareHouseID(stock.getWarehouseId());
data.setPartNo(stock.getPartNo());
// 3. 添加卷到箱子
boxForNotificationMapper.addBoxRoll(data);
boxForNotificationMapper.updateBoxRollQty(data.getSite(),data.getBuNo(),data.getBoxNo());
}
@Override
@Transactional
public void deleteBoxRoll(SoReceiveBoxRollsData data) {
// 参数校验
if(data == null || data.getSite() == null || data.getBuNo() == null || data.getBoxNo() == null || data.getFinalRollNo() == null) {
throw new RuntimeException("参数不完整");
}
// 1. 查箱子状态
SoReceiveBoxesData boxQuery = new SoReceiveBoxesData();
boxQuery.setSite(data.getSite());
boxQuery.setBuNo(data.getBuNo());
boxQuery.setBoxNo(data.getBoxNo());
SoReceiveBoxesData box = searchBoxData(boxQuery);
if(box == null) {
throw new RuntimeException("箱号不存在");
}
if(!"未封箱".equals(box.getStatus()) ) {
throw new RuntimeException("只有状态为未封箱的箱子可以删除卷");
}
if(!"Y".equals(box.getcInStockFlag())) {
throw new RuntimeException("箱子不在仓库中,无法操作");
}
// 2. 查卷状态
InventoryStock stock = boxForNotificationMapper.selectByRollNo(
data.getFinalRollNo(), data.getSite(), data.getBuNo());
if(stock == null) {
throw new RuntimeException("卷不存在");
}
if(!"在库".equals(stock.getStatus())) {
throw new RuntimeException("卷状态不是在库,无法操作");
}
// 检查卷是否在该箱内
List<SoReceiveBoxRollsData> boxRolls = boxForNotificationMapper.searchBoxRollDetail(boxQuery);
boolean rollInBox = boxRolls.stream()
.anyMatch(roll -> roll.getFinalRollNo() != null && roll.getFinalRollNo().equals(data.getFinalRollNo()));
if (!rollInBox) {
throw new RuntimeException("该卷不在指定的箱子内,无法删除");
}
// 3. 删除卷的上级标签
boxForNotificationMapper.updateStockParentRollNo(data.getFinalRollNo(), null, data.getSite(), data.getBuNo());
// 4. 删除箱子中的卷记录
boxForNotificationMapper.deleteBoxRoll(data);
boxForNotificationMapper.updateBoxRollQty(data.getSite(),data.getBuNo(),data.getBoxNo());
// 5. 如果箱里面没有卷了清空箱的仓库
if(box.getRollsQty()==1){
//box是删除之前查出来的状态 所以如果是1 那么删除后没卷了
boxForNotificationMapper.updateBoxWareHouse(data.getSite(),data.getBuNo(),data.getBoxNo(),null);
}
}
}

59
src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml

@ -60,5 +60,64 @@
from so_receive_boxes a
where a.site= #{site} and a.box_no= #{boxNo} and a.bu_no= #{buNo}
</select>
<delete id="deleteSoReceiveBoxesData">
delete from so_receive_boxes
where id=#{id}
</delete>
<update id="updateBoxStatus">
update so_receive_boxes
set [status]=#{status}
where id=#{id}
</update>
<select id="selectByRollNo" resultType="InventoryStock">
SELECT *
FROM inventory_stock
WHERE parent_roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</select>
<update id="updateStockParentRollNo">
UPDATE inventory_stock
SET parent_roll_no = #{parentRollNo}
WHERE roll_no = #{rollNo}
AND site = #{site}
AND bu_no = #{buNo}
</update>
<insert id="addBoxRoll">
insert into so_receive_box_rolls(site,box_no,final_roll_no,roll_qty,received_by,received_date,WareHouseID,part_no,bu_no)
values(#{site},#{boxNo},#{finalRollNo},#{rollQty},#{receivedBy},GetDate(),#{wareHouseID},#{partNo},#{buNo})
</insert>
<update id="updateBoxRollQty">
update so_receive_boxes
set rolls_qty =isnull((select count(1) from so_receive_box_rolls where box_no = #{boxNo} and site=#{site} and bu_no= #{buNo}),0)
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
</update>
<select id="searchOutboundNotificationDetail" resultType="OutboundNotificationDetailEntity">
select site,bu_no,order_no,part_no,part_desc,unit,required_qty,out_warehouse,out_batch_no,created_by,created_date,updated_by,
updated_date,order_qty,related_order_no,related_order_line_no
from outbound_notification_detail
where site = #{site} and bu_no = #{buNo} and order_no = #{orderNo}
</select>
<update id="updateBoxWareHouse">
update so_receive_boxes
set WareHouseID = #{warehouseId}
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
</update>
<delete id="deleteBoxRoll">
delete from so_receive_box_rolls
where site = #{site}
and box_no = #{boxNo}
and bu_no = #{buNo}
and final_roll_no = #{finalRollNo}
</delete>
</mapper>
Loading…
Cancel
Save