feat(入库计划): 根据订单生成入库计划并执行
This commit is contained in:
parent
3b5dcf7bbf
commit
76252a3479
@ -7,10 +7,15 @@ import com.ktg.common.core.page.TableDataInfo;
|
|||||||
import com.ktg.common.enums.BusinessType;
|
import com.ktg.common.enums.BusinessType;
|
||||||
import com.ktg.common.utils.poi.ExcelUtil;
|
import com.ktg.common.utils.poi.ExcelUtil;
|
||||||
import com.ktg.mes.md.domain.MdItem;
|
import com.ktg.mes.md.domain.MdItem;
|
||||||
|
import com.ktg.mes.md.domain.WmsBusinessType;
|
||||||
import com.ktg.mes.md.mapper.MdItemMapper;
|
import com.ktg.mes.md.mapper.MdItemMapper;
|
||||||
import com.ktg.mes.md.service.IAP0AEService;
|
import com.ktg.mes.md.service.IAP0AEService;
|
||||||
|
import com.ktg.mes.md.service.IMdItemService;
|
||||||
|
import com.ktg.mes.md.service.IWmsBusinessTypeService;
|
||||||
import com.ktg.mes.wm.domain.WmStorageArea;
|
import com.ktg.mes.wm.domain.WmStorageArea;
|
||||||
import com.ktg.mes.wm.domain.WmsInPlan;
|
import com.ktg.mes.wm.domain.WmsInPlan;
|
||||||
|
import com.ktg.mes.wm.domain.WmsInPlanDetail;
|
||||||
|
import com.ktg.mes.wm.domain.dto.WmsInboundOrderDto;
|
||||||
import com.ktg.mes.wm.service.IWmStorageLocationService;
|
import com.ktg.mes.wm.service.IWmStorageLocationService;
|
||||||
import com.ktg.mes.wm.service.IWmsInPlanService;
|
import com.ktg.mes.wm.service.IWmsInPlanService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -18,6 +23,8 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,7 +40,8 @@ public class WmsInPlanController extends BaseController {
|
|||||||
private final IWmsInPlanService wmsInPlanService;
|
private final IWmsInPlanService wmsInPlanService;
|
||||||
private final IWmStorageLocationService wmStorageLocationService;
|
private final IWmStorageLocationService wmStorageLocationService;
|
||||||
private final MdItemMapper mdItemMapper;
|
private final MdItemMapper mdItemMapper;
|
||||||
private final IAP0AEService iAP0AEService;
|
private final IWmsBusinessTypeService wmsBusinessTypeService;
|
||||||
|
private final IMdItemService mdItemService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询入库计划列表
|
* 查询入库计划列表
|
||||||
@ -92,6 +100,13 @@ public class WmsInPlanController extends BaseController {
|
|||||||
return toAjax(wmsInPlanService.insertWmsInPlan(wmsInPlan));
|
return toAjax(wmsInPlanService.insertWmsInPlan(wmsInPlan));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Log(title = "入库计划", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping("/open/order/add")
|
||||||
|
public AjaxResult openOrderAdd(@RequestBody @Valid WmsInboundOrderDto wmsInboundOrderDto) {
|
||||||
|
wmsInPlanService.insertOrderWmsInPlan(wmsInboundOrderDto);
|
||||||
|
return AjaxResult.success("入库任务创建成功");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改入库计划
|
* 修改入库计划
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.ktg.mes.wm.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Min;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
// 根据订单入库
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class WmsInboundOrderDto {
|
||||||
|
// 订单号
|
||||||
|
@NotBlank(message = "订单号不能为空")
|
||||||
|
private String orderId;
|
||||||
|
// 物料编码
|
||||||
|
@NotBlank(message = "物料编码不能为空")
|
||||||
|
private String materialCode;
|
||||||
|
private String rfid;
|
||||||
|
// 出库类型编码
|
||||||
|
@NotBlank(message = "入库类型编码不能为空")
|
||||||
|
private String typeCode;
|
||||||
|
// 出库数量
|
||||||
|
@NotNull(message = "入库数量不能为空")
|
||||||
|
@Min(value = 1, message = "数量必须大于等于 1")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
// 消耗寿命
|
||||||
|
@Min(value = 0, message = "消耗寿命值必须大于等于 0")
|
||||||
|
private Integer consumesLife;
|
||||||
|
}
|
@ -2,6 +2,7 @@ package com.ktg.mes.wm.service;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.ktg.mes.wm.domain.WmsInPlan;
|
import com.ktg.mes.wm.domain.WmsInPlan;
|
||||||
|
import com.ktg.mes.wm.domain.dto.WmsInboundOrderDto;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 入库计划Service接口
|
* 入库计划Service接口
|
||||||
@ -88,4 +89,10 @@ public interface IWmsInPlanService
|
|||||||
* @param wmsInPlan 入库计划
|
* @param wmsInPlan 入库计划
|
||||||
*/
|
*/
|
||||||
public void autoCell(WmsInPlan wmsInPlan);
|
public void autoCell(WmsInPlan wmsInPlan);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据订单创建入库计划
|
||||||
|
* @param wmsInboundOrderDto 入库计划参数
|
||||||
|
*/
|
||||||
|
public void insertOrderWmsInPlan(WmsInboundOrderDto wmsInboundOrderDto);
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,23 @@ import java.util.Collections;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.ktg.common.core.domain.AjaxResult;
|
||||||
import com.ktg.common.utils.DateUtils;
|
import com.ktg.common.utils.DateUtils;
|
||||||
import com.ktg.generator.util.MultiModuleCodeGenerator;
|
import com.ktg.generator.util.MultiModuleCodeGenerator;
|
||||||
|
import com.ktg.mes.md.domain.BaseKnife;
|
||||||
import com.ktg.mes.md.domain.MdItem;
|
import com.ktg.mes.md.domain.MdItem;
|
||||||
|
import com.ktg.mes.md.domain.WmsBusinessType;
|
||||||
import com.ktg.mes.md.mapper.AP0AEMapper;
|
import com.ktg.mes.md.mapper.AP0AEMapper;
|
||||||
|
import com.ktg.mes.md.mapper.WmsBusinessTypeMapper;
|
||||||
|
import com.ktg.mes.md.service.IBaseKnifeService;
|
||||||
import com.ktg.mes.md.service.IMdItemService;
|
import com.ktg.mes.md.service.IMdItemService;
|
||||||
import com.ktg.mes.stl.domain.InventoryAdjustment;
|
import com.ktg.mes.stl.domain.InventoryAdjustment;
|
||||||
import com.ktg.mes.stl.mapper.InventoryAdjustmentMapper;
|
import com.ktg.mes.stl.mapper.InventoryAdjustmentMapper;
|
||||||
import com.ktg.mes.wm.domain.*;
|
import com.ktg.mes.wm.domain.*;
|
||||||
|
import com.ktg.mes.wm.domain.dto.WmsInboundOrderDto;
|
||||||
import com.ktg.mes.wm.mapper.WmsInPlanDetailEntityMapper;
|
import com.ktg.mes.wm.mapper.WmsInPlanDetailEntityMapper;
|
||||||
import com.ktg.mes.wm.service.IWmStorageAreaService;
|
import com.ktg.mes.wm.service.IWmStorageAreaService;
|
||||||
|
import com.ktg.mes.wm.service.IWmStorageLocationService;
|
||||||
import com.ktg.mes.wm.service.IWmsInTaskService;
|
import com.ktg.mes.wm.service.IWmsInTaskService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -40,8 +47,10 @@ public class WmsInPlanServiceImpl implements IWmsInPlanService {
|
|||||||
private final IWmStorageAreaService wmStorageAreaService;
|
private final IWmStorageAreaService wmStorageAreaService;
|
||||||
private final IWmsInTaskService wmsInTaskService;
|
private final IWmsInTaskService wmsInTaskService;
|
||||||
private final IMdItemService mdItemService;
|
private final IMdItemService mdItemService;
|
||||||
private final AP0AEMapper ap0AEMapper;
|
|
||||||
private final InventoryAdjustmentMapper inventoryAdjustmentMapper;
|
private final InventoryAdjustmentMapper inventoryAdjustmentMapper;
|
||||||
|
private final IWmStorageLocationService wmStorageLocationService;
|
||||||
|
private final WmsBusinessTypeMapper wmsBusinessTypeMapper;
|
||||||
|
private final IBaseKnifeService baseKnifeService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询入库计划
|
* 查询入库计划
|
||||||
@ -337,4 +346,63 @@ public class WmsInPlanServiceImpl implements IWmsInPlanService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
@Override
|
||||||
|
public void insertOrderWmsInPlan(WmsInboundOrderDto wmsInboundOrderDto) {
|
||||||
|
// 查询业务类型
|
||||||
|
WmsBusinessType wmsBusinessType = wmsBusinessTypeMapper.selectWmsBusinessTypeByCode(wmsInboundOrderDto.getTypeCode());
|
||||||
|
if (wmsBusinessType == null) {
|
||||||
|
throw new RuntimeException("出库类型编码错误: " + wmsInboundOrderDto.getTypeCode());
|
||||||
|
}
|
||||||
|
// 查询物料信息
|
||||||
|
MdItem mdItem = mdItemService.selectMdItemByCode(wmsInboundOrderDto.getMaterialCode());
|
||||||
|
if (mdItem == null) {
|
||||||
|
throw new RuntimeException("物料编码错误: " + wmsInboundOrderDto.getMaterialCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建入库计划
|
||||||
|
WmsInPlan wmsInPlan = new WmsInPlan();
|
||||||
|
wmsInPlan.setState("0");
|
||||||
|
// 业务类型 生产准备
|
||||||
|
wmsInPlan.setSourceType("SGLR");
|
||||||
|
wmsInPlan.setPlanTypeCode(wmsBusinessType.getCode());
|
||||||
|
wmsInPlan.setPlanTypeId(wmsBusinessType.getTypeId());
|
||||||
|
wmsInPlan.setRemark("订单号: " + wmsInboundOrderDto.getOrderId());
|
||||||
|
|
||||||
|
//-- 入库计划详情
|
||||||
|
WmsInPlanDetail wmsInPlanDetail = new WmsInPlanDetail();
|
||||||
|
// 状态-待执行
|
||||||
|
wmsInPlanDetail.setPlanInStatus("0");
|
||||||
|
// 数量
|
||||||
|
wmsInPlanDetail.setQuantity(wmsInboundOrderDto.getQuantity().toString());
|
||||||
|
wmsInPlanDetail.setQuantityIn(wmsInboundOrderDto.getQuantity().toString());
|
||||||
|
wmsInPlanDetail.setMaterialId(mdItem.getItemId().toString());
|
||||||
|
wmsInPlan.setWmsInPlanDetailsList(Collections.singletonList(wmsInPlanDetail));
|
||||||
|
// 整刀回库
|
||||||
|
if (StringUtils.equals(wmsInboundOrderDto.getTypeCode(), "ZDHK")) {
|
||||||
|
// 如果是整刀回库,入库数量限制为 1
|
||||||
|
if (wmsInboundOrderDto.getQuantity() != 1) {
|
||||||
|
throw new RuntimeException("整刀回库数量必须等于 1");
|
||||||
|
}
|
||||||
|
BaseKnife baseKnife = baseKnifeService.selectBaseKnifeByRfid(wmsInboundOrderDto.getRfid());
|
||||||
|
if (baseKnife == null) {
|
||||||
|
throw new RuntimeException("RFID错误:" + wmsInboundOrderDto.getRfid());
|
||||||
|
}
|
||||||
|
// 指定为刀具库库区
|
||||||
|
wmsInPlan.setLocationCode("L055");
|
||||||
|
// 创建入库计划详情实例
|
||||||
|
WmsInPlanDetailEntity wmsInPlanDetailEntity = new WmsInPlanDetailEntity();
|
||||||
|
wmsInPlanDetailEntity.setKnifeId(baseKnife.getBaseKnifeId());
|
||||||
|
wmsInPlanDetailEntity.setRfid(wmsInboundOrderDto.getRfid());
|
||||||
|
wmsInPlanDetailEntity.setConsumeLife(wmsInboundOrderDto.getConsumesLife());
|
||||||
|
wmsInPlanDetail.setWmsInPlanDetailEntityList(Collections.singletonList(wmsInPlanDetailEntity));
|
||||||
|
} else if (StringUtils.equals(wmsInboundOrderDto.getTypeCode(), "DPRK")) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动分配库位
|
||||||
|
this.autoCell(wmsInPlan);
|
||||||
|
this.insertAndIssueWmsInPlan(wmsInPlan);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user