# Conflicts:
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/controller/saleOrder/MpsSaleOrderController.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/IMpsSaleOrderService.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/MpsSaleOrderMapper.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/impl/MpsSaleOrderServiceImpl.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpOutController.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/IStIvtStructivtCpService.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java
#	mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/ChangeIvtUtil.java
#	mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue
#	mes/qd/src/views/wms/storage_manage/product/productOut/AddDialog.vue
#	mes/qd/src/views/wms/storage_manage/product/productOut/DivDialog.vue
#	mes/qd/src/views/wms/storage_manage/product/productOut/productout.js
This commit is contained in:
2023-05-25 20:40:39 +08:00
113 changed files with 1810 additions and 2254 deletions

View File

@@ -89,8 +89,7 @@ public class AcsToWmsController {
@ApiOperation("向wms反馈设备状态")
@SaIgnore
public ResponseEntity<Object> feedDeviceStatusType(@RequestBody JSONObject param) {
return null;
// return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(param), HttpStatus.OK);
return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(param), HttpStatus.OK);
}

View File

@@ -22,8 +22,6 @@ import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.service.TaskService;
import org.nl.wms.product_manage.sch.service.dto.TaskDto;
import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus;
@@ -49,8 +47,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
private TaskService taskService;
@Autowired
private CacheLineHandService cacheLineHandService;
@Autowired
private IPdmProduceWorkorderService workorderService;
@@ -207,12 +203,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
public Map<String, Object> orderStatus(JSONObject orderJson) {
JSONObject result = new JSONObject();
try {
PdmProduceWorkorder workorder = new PdmProduceWorkorder();
workorder.setWorkorder_id(orderJson.getString("workorder_id"));
workorder.setWorkorder_status(orderJson.getString("status"));
workorder.setDq_real_qty(orderJson.getBigDecimal("real_qty"));
workorder.setRealproduceend_date(DateUtil.now());
workorderService.updateById(workorder);
JSONObject map = new JSONObject();
map.put("workorder_id", orderJson.getString("workorder_id"));
map.put("workorder_status", orderJson.getString("status"));
map.put("update_id", "1");
map.put("real_qty", orderJson.getString("real_qty"));
map.put("device_code", "");
map.put("update_name", "acs");
map.put("update_time", DateUtil.now());
map.put("realproduceend_date", DateUtil.now());
WQLObject.getWQLObject("PDM_produce_workOrder").update(map, "workorder_id = '" + orderJson.getString("workorder_id") + "'");
//OptionRecord.record(OptionRecord.OptionEnum.UPDATEOP, OptionRecord.Buss.WORKORDER,orderJson.getString("workorder_id"),MapOf.of("workorder_status", orderJson.getString("status")));
} catch (Exception e){
result.put("status", 400);
result.put("message", e.getMessage());

View File

@@ -51,14 +51,8 @@ public class AgvInstService {
private ISchBaseTaskService taskService;
@Autowired
private ISchCachelineVehicleService cachelineVehicleService;
@Autowired
private ISchCachelineVehicleService cachelineVe3hicleService;
public static void main(String[] args) {
String a= "A1_DC_15_6";
int i = a.lastIndexOf("_");
System.out.println(a.substring(0, i));
}
//满料请求点位确认
//1.判断当前设备路由表是否配置下一道路由设备,如果不是则说明直接到清洗
@@ -69,33 +63,29 @@ public class AgvInstService {
public void fullMaster(JSONObject task){
String quantity = task.getString("material_qty");
//获取当前生产工序下一道工序
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code1"));
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code"));
FlowElement next = getFlowElement(task,workprodure).next();
Map query = MapOf.of("workprocedure_id", basePointService.getWorkprodureByCode(next.getId()).get("workprocedure_id")
, "qty", quantity);
String nextPoint = null;
//判断缓存线是不是去深坑清洗深坑区域15个点判断空的物料坑位
String cacheVehile = "";
Map query = MapOf.of("workprocedure_id", workprodure.get("workprocedure_id")
, "qty", quantity);
if (next.getName().equals("深坑清洗")){
query.put("material_id",task.getString("material_id"));
}
List<Map<String,String>> list = deviceService.workproceduceDevices(query);
String nextPoint = null;
String cacheVehile = "";
if (!CollectionUtils.isEmpty(list)){
nextPoint = list.get(0).get("point_code");
}else {
if (next.getParams().get("cacheLine") == null){
throw new BadRequestException("当前任务下一道工序无可用设备");
}
nextPoint = getParamByXml(workprodure, next, nextPoint);
nextPoint = next.getParams().get("cacheLine");
cacheVehile = getCacheVehile(nextPoint, null);
}
结果校验:{
if (StringUtils.isBlank(nextPoint)) {
throw new BadRequestException("逻辑非配错误,请检查代码");
}
if (StringUtils.isBlank(nextPoint)){
throw new BadRequestException("逻辑非配错误,请检查代码");
}
basePointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint));
@@ -106,20 +96,7 @@ public class AgvInstService {
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
}
private String getParamByXml(Map<String, String> workprodure, FlowElement next, String nextPoint) {
Object cacheLine = next.getParams().get("cacheLine");
if (cacheLine instanceof String){
nextPoint = (String) cacheLine;
}
if (cacheLine instanceof Map){
nextPoint = ((Map<String, String>) cacheLine).get(workprodure.get("device_code").substring(0, workprodure.get("device_code").lastIndexOf("_")));
}
return nextPoint;
}
;
};
public FlowElement getFlowElement(JSONObject task,Map<String,String> workprodure){
if (CollectionUtils.isEmpty(workprodure)){
@@ -132,7 +109,7 @@ public class AgvInstService {
.eq("is_delete", "0")
.eq("is_used", "1")
);
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(devicePoint.getRegion_code());
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(material_id,devicePoint.getRegion_code());
if (processRoute == null){
throw new BadRequestException("当前没有配置对应工序调度线路:"+material_id+"/"+devicePoint.getRegion_code());
}
@@ -149,16 +126,25 @@ public class AgvInstService {
//3.agv根据对应载具列表行进扫码匹配匹配到对应物料则创建点对点任务
public void empMatter(JSONObject task){
//参数
String startPoint = task.getString("cacheLine");
String cacheVehile = getCacheVehile(startPoint, task.getString("material_id"));
String targetDevice = task.getString("next_point_code");
String material_id = task.getString("material_id");
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
.eq("point_code", targetDevice)
.eq("is_delete", "0")
.eq("is_used", "1"));
JSONObject cacheLine = WQLObject.getWQLObject("SCH_cacheLine_region_relation").query("region_code = '"+devicePoint.getRegion_code()+"' and is_active = '"+StatusEnum.STATUS_TRUE.getCode()+"'").uniqueResult(0);
Assert.notNull(cacheLine, String.format("区域%s对应缓存线信息不存在", devicePoint.getRegion_code()));
//缓存线位置编码 :缺料请求获取缓存线满载具列表
String startPoint = cacheLine.getString("cacheline_code");
String cacheVehile = getCacheVehile(startPoint, material_id);
if (StringUtils.isBlank(cacheVehile)) {
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具");
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+material_id+"对应可用载具");
}
//判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", task.getString("material_id")).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", material_id).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
if (allocateTask.size()>=cacheVehile.split(",").length){
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id")));
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完任务id:{}",startPoint,material_id,allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,material_id));
}
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setVehicle_code(cacheVehile);
@@ -171,14 +157,12 @@ public class AgvInstService {
}
public String getCacheVehile(String cacheLine,String materialId){
if (StringUtils.isNotEmpty(cacheLine)){
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
if (vehicle.size()>0){
if (vehicle.size()>count){
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
}
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
if (vehicle.size()>0){
if (vehicle.size()>count){
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
}
}
return "";

View File

@@ -1,8 +1,6 @@
package org.nl.wms.masterdata_manage.service.material.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
@@ -28,7 +26,6 @@ public class MdMeMaterialbase implements Serializable {
/**
* 物料标识
*/
@TableId
private String material_id;
/**

View File

@@ -3,11 +3,8 @@ package org.nl.wms.masterdata_manage.service.vehicle.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
@@ -18,7 +15,6 @@ import lombok.experimental.Accessors;
* @since 2023-05-10
*/
@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@TableName("md_pb_bucketrecord")
public class MdPbBucketrecord implements Serializable {

View File

@@ -72,10 +72,10 @@ public class SectattrController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/getSect")
@GetMapping("/getSect")
@Log("查询库区下拉框")
@ApiOperation("查询库区下拉框")
public ResponseEntity<Object> querySect(@RequestBody JSONObject query) {
public ResponseEntity<Object> querySect(@RequestBody(required = false) JSONObject query) {
List<Map> list = isectattrService.getSect(query);
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
}

View File

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
@@ -19,7 +18,6 @@ import java.util.Date;
* @since 2023-05-04
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_structattr")
public class StIvtStructattr implements Serializable {

View File

@@ -120,7 +120,7 @@ public class StIvtSectattrServiceImpl extends ServiceImpl<StIvtSectattrMapper, S
List sect_ja = new ArrayList<>();
for (Map<String, String> map : sectList) {
Map sect_cas = new HashMap<>();
sect_cas.put("value", String.valueOf(map.get("sect_id")));
sect_cas.put("value", map.get("sect_id"));
sect_cas.put("label", map.get("sect_name"));
sect_ja.add(sect_cas);
}

View File

@@ -72,7 +72,7 @@
WHERE d.is_delete = 0
ORDER BY
device_code
LIMIT 200
LIMIT 10
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -1,165 +0,0 @@
package org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 生产订单表
* </p>
*
* @author generator
* @since 2023-05-25
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("mps_sale_order")
public class MpsSaleOrder implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 销售单标识
*/
private Long sale_id;
/**
* 销售单号
*/
private String sale_code;
/**
* 明细序号
*/
private BigDecimal seq_no;
/**
* 销售单类型
*/
private String sale_type;
/**
* 物料标识
*/
private Long material_id;
/**
* 状态
*/
private String status;
/**
* 销售数量
*/
private BigDecimal sale_qty;
/**
* 生产顺序
*/
private BigDecimal produce_seq;
/**
* 客户标识
*/
private Long cust_id;
/**
* 客户编码
*/
private String cust_code;
/**
* 客户名称
*/
private String cust_name;
/**
* 计量单位标识
*/
private Long qty_unit_id;
/**
* 计划交期
*/
private String plandeliver_date;
/**
* 创建人
*/
private Long create_id;
/**
* 创建人姓名
*/
private String create_name;
/**
* 创建时间
*/
private String create_time;
/**
* 提交人
*/
private Long audit_optid;
/**
* 提交时间
*/
private String audit_time;
/**
* 提交人姓名
*/
private String audit_optname;
/**
* 确认人
*/
private Long confirm_optid;
/**
* 确认人姓名
*/
private String confirm_optname;
/**
* 确认时间
*/
private String confirm_time;
/**
* 是否删除
*/
private String is_delete;
/**
* 备注
*/
private String remark;
/**
* 车间标识
*/
private Long workshop_id;
/**
* 生产数量
*/
private BigDecimal product_qty;
/**
* 预入库数量
*/
private BigDecimal instor_qty;
/**
* 发货数量
*/
private BigDecimal sendout_qty;
}

View File

@@ -8,7 +8,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
@@ -247,7 +246,7 @@ public class CacheLineHandController {
public ResponseEntity<Object> check(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
cacheLineHandService.check(param);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/checkEnd")
@@ -256,7 +255,7 @@ public class CacheLineHandController {
public ResponseEntity<Object> checkEnd(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
cacheLineHandService.check(param);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/agvInBoxExceptionQuery")

View File

@@ -671,6 +671,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
//载具编码
String vehicle_code = param.getString("vehicle_code");
//缓存线位置编码
String position_code = param.getString("position_code");
// 封装给acs的数据
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();

View File

@@ -1,20 +1,15 @@
package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.device.dto.DeviceQuery;
import org.nl.wms.product_manage.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +19,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
@@ -44,19 +38,9 @@ public class PdmBiDeviceController {
@GetMapping
@Log("查询生产设备")
@ApiOperation("查询生产设备")
@SaIgnore
public ResponseEntity<Object> query(DeviceQuery query, PageQuery page){
Page<PdmBiDevice> result = iDeviceService.page(page.build(PdmBiDevice.class), query.build());
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
}
@GetMapping("/list")
@Log("查询生产设备列表")
@ApiOperation("查询生产设备列表")
@SaIgnore
public ResponseEntity<Object> queryList(DeviceQuery query){
List<Map<String, Object>> list = iDeviceService.listMaps(query.build().select("device_code", "device_name"));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
//@PreAuthorize("@el.check('device:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK);
}
@PostMapping

View File

@@ -15,7 +15,6 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -146,14 +145,6 @@ public class PdmProduceWorkorderController {
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/reportQuery")
@Log("报工查询")
@ApiOperation("报工查询")
public ResponseEntity<Object> reportQuery(ReportQuery query) {
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(query)),HttpStatus.OK);
}
}

View File

@@ -6,10 +6,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Nullable;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
import org.nl.common.enums.StatusEnum;
@@ -21,23 +18,11 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.impl.AgvInstService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -46,25 +31,16 @@ import java.util.Map;
@Slf4j
@Service
public class SpeEmpTask extends AbstractAcsTask {
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private AgvInstService agvInstService;
@Autowired
private ISchBasePointService basePointService;
@Autowired
private ISchCachelineVehilematerialService cacheLineVechileService;
@Autowired
private ISchProcessRouteService schProcessRouteService;
AgvInstService agvInstService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
public SpeEmpTask() {
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe());
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache());
SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe());
}
@@ -86,32 +62,28 @@ public class SpeEmpTask extends AbstractAcsTask {
@Override
@Transactional
public String createTask(JSONObject param) {
//{"workorder_code":230523019,"device_code":"A1_TW_15_6_D","type":"1"}
String cahceLine = getRouteXmlFlowByWorkprodure(param);
if (cahceLine == null) { return null; }
PdmProduceWorkorder one = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.lt("workorder_status", StatusEnum.TASK_FINISH.getCode()));
Assert.notNull(one, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code2", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code")));
}
String point_code = param.getString("device_code");
String quantity = param.getString("quantity");
String type = param.getString("type");
JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0);
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(chectIndDatabase)){
Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code")));
}
JSONObject form = new JSONObject(MapOf.of("start_point_code","",
"next_point_code",param.getString("device_code"),"return_point_code", "","vehicle_code",
"","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",param.getString("type"),"material_id", one.getMaterial_id()));
"next_point_code",point_code,"return_point_code", "","vehicle_code",
"","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id")));
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = packageParam(form, taskId);
taskService.save(task.toJavaObject(SchBaseTask.class));
task.put("cacheLine",cahceLine);
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
try {
pointConfirm(task);
//下发
}catch (Exception ex){
log.error("SpeEmpTask#点位确认异常:{}",ex.getMessage());
task.put("task_status", TaskStatusEnum.SURE_START_ERROR.getCode());
task.put("remark",ex.getMessage());
WQLObject.getWQLObject("sch_base_task").update(task);
@@ -119,35 +91,6 @@ public class SpeEmpTask extends AbstractAcsTask {
return taskId;
}
@Nullable
private String getRouteXmlFlowByWorkprodure(JSONObject param) {
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(param.getString("device_code"));
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
.eq("point_code", param.getString("device_code"))
.eq("is_delete", "0")
.eq("is_used", "1")
);
FlowElement flowElement = schProcessRouteService.checkWorkprodure(workprodure.get("workprocedure_code"), devicePoint.getRegion_code());
if (flowElement == null){
log.error("SpeEmpTask#createTask 没有对应路由线路{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code());
throw new BadRequestException("缺料请求没有配置对应路由线路"+workprodure.get("workprocedure_code")+"——"+devicePoint.getRegion_code());
}
FlowElement pre = flowElement.pre();
if (pre == null || ObjectUtil.isEmpty(pre.getParams().get("cacheLine"))){
log.error("SpeEmpTask#createTask 没有配置缓存线{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code());
return null;
}
Object tmp_cahceLine = pre.getParams().get("cacheLine");
String cahceLine = null;
if (tmp_cahceLine instanceof String){
cahceLine = (String) tmp_cahceLine;
}
if (tmp_cahceLine instanceof Map){
cahceLine = ((Map<String, String>) tmp_cahceLine).get(workprodure.get("spec"));
}
return cahceLine;
}
private JSONObject packageParam(JSONObject form, String task_id) {
JSONObject task = new JSONObject();
参数封装:{
@@ -191,6 +134,72 @@ public class SpeEmpTask extends AbstractAcsTask {
interface SpeStatusHandler{
void handle(JSONObject param,String status,JSONObject task);
}
class Spe2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
//到专机:更新设备上料位物料数量
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
log.error(OPT_NAME+"未定义任务状态:{}",sta);
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Spe2Cache implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
String workprocedureCode = param.getString("workorder_code");
String inboxtxm = param.getString("inboxtxm");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"),
"material_id", task.getString("material_id"),
"vehicle_code", inboxtxm,
"vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(),
//工单,工序?
"workorder_code", workprocedureCode,
"create_time", DateUtil.now(),
"update_time", DateUtil.now()
//物料规格,物料名称 从物料信息表关联查询
));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Cache2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
@@ -199,10 +208,12 @@ public class SpeEmpTask extends AbstractAcsTask {
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");

View File

@@ -2,14 +2,14 @@ package org.nl.wms.product_manage.sch.tasks.SpeMachinery;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -19,21 +19,11 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.impl.AgvInstService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -42,34 +32,26 @@ import java.util.Map;
@Slf4j
@Service
public class SpeFullTask extends AbstractAcsTask {
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchCachelineVehilematerialService cacheLineVechileService;
@Autowired
private AgvInstService agvInstService;
@Autowired
AgvInstService agvInstService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
private static String OPT_NAME = "ACS回调# ";
public SpeFullTask() {
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe());
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache());
SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe());
}
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
log.info(InterfaceLogType.ACS_TO_LMS.getDesc());
// 指令执行中
SchBaseTask task = taskService.getById(param.getString("task_id"));
AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_");
JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0);
AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_");
try {
SpeHandles.get(taskType.name()).handle(param,status,task);
}catch (Exception ex){
@@ -81,28 +63,25 @@ public class SpeFullTask extends AbstractAcsTask {
@Override
@Transactional
public String createTask(JSONObject param) {
String point_code = param.getString("device_code");
String quantity = param.getString("quantity");
String type = param.getString("type");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", StatusEnum.TASK_FINISH.getCode()));
JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0);
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code1", point_code).lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code")));
JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(chectIndDatabase)){
Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code")));
}
JSONObject empPoint = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "2", "point_code", point_code, "point_type", StatusEnum.POINT_LOCATION_EMP.getCode())).process().uniqueResult(0);
JSONObject form = new JSONObject(MapOf.of("start_point_code",point_code,
"next_point_code","","return_point_code", empPoint.getString("point_code"),"vehicle_code",
"","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getMaterial_id()));
"","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id")));
String taskId = IdUtil.getStringId();
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = packageParam(form, taskId);
taskService.save(task.toJavaObject(SchBaseTask.class));
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
try {
pointConfirm(task);
//下发
@@ -155,38 +134,29 @@ public class SpeFullTask extends AbstractAcsTask {
}
interface SpeStatusHandler{
void handle(JSONObject param,String status,SchBaseTask task);
void handle(JSONObject param,String status,JSONObject task);
}
class Spe2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,SchBaseTask task) {
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
switch (status){
case STATUS_START:
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_RUNNING.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
Map<String, String> extParam = (Map)param.get("ext_param");
if (extParam.get("put_finish") != null){
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",task.getVehicle_code2())
.eq("point_code",task.getPoint_code3()));
}
if (extParam.get("take_finish") != null){
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code","")
.eq("point_code",task.getPoint_code3()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",task.getVehicle_code2())
.eq("point_code",task.getPoint_code1()));
}
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
break;
case STATUS_FINISH:
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
//到专机:更新设备上料位物料数量
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
@@ -199,36 +169,63 @@ public class SpeFullTask extends AbstractAcsTask {
}
class Spe2Cache implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,SchBaseTask task) {
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
String workprocedureCode = param.getString("workorder_code");
String inboxtxm = param.getString("inboxtxm");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
Map<String, String> extParam = (Map)param.get("ext_param");
UpdateWrapper<SchBaseTask> wrapper = new UpdateWrapper<SchBaseTask>()
.set("task_status", StatusEnum.TASK_RUNNING.getCode())
.set("update_name", "acs")
.set("update_time", DateUtil.now()).eq("task_id", task.getTask_id());
if (extParam.get("outboxt")!= null){ wrapper.set("vehicle_code2",extParam.get("outboxt")); }
taskService.update(wrapper);
if (extParam.get("inboxt") != null){
SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial();
vehilematerial.setVehmaterial_id(IdUtil.getStringId());
vehilematerial.setVehicle_code(extParam.get("inboxt"));
vehilematerial.setMaterial_id(task.getMaterial_id());
vehilematerial.setErr_type("0");
vehilematerial.setCreate_time(DateUtil.now());
vehilematerial.setQuantity(task.getMaterial_qty());
cacheLineVechileService.save(vehilematerial);
}
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"),
"material_id", task.getString("material_id"),
"vehicle_code", inboxtxm,
"vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(),
//工单,工序?
"workorder_code", workprocedureCode,
"create_time", DateUtil.now(),
"update_time", DateUtil.now()
//物料规格,物料名称 从物料信息表关联查询
));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Cache2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
@@ -242,5 +239,6 @@ public class SpeFullTask extends AbstractAcsTask {
@Override
public void pointConfirm(JSONObject param) {
agvInstService.fullMaster(param);
}
}

View File

@@ -29,11 +29,6 @@ public class PdmBiDevice implements Serializable {
@TableId(value = "device_code")
private String device_code;
/**
* 设备系列TW_15/TW_22:25/22
*/
private String spec;
/**
* 设备名称
*/

View File

@@ -11,7 +11,7 @@
WHERE
device.is_delete = '0'
<if test="workprocedure_id != null and workprocedure_id != ''">
and device.workprocedure_id = #{workprocedure_id}
device.workprocedure_id = #{workprocedure_id}
</if>
and device.device_code not in (
select o.device_code as device_code
@@ -23,7 +23,7 @@
GROUP_CONCAT(sch_base_task.task_id),
pdm_bi_device.inupperlimit_qty - ifnull( sum( sch_base_task.material_qty ), 0 ) - pdm_bi_device.deviceinstor_qty AS currentQty,
pdm_bi_device.device_code,
sch_base_point.point_code
sch_base_point.point_code,
from sch_base_point
left join pdm_bi_device on pdm_bi_device.device_code = sch_base_point.device_code
left JOIN sch_base_task ON sch_base_point.point_code = point_code2 and '7' > task_status
@@ -31,7 +31,7 @@
sch_base_point.point_type = '4'
and workprocedure_id = #{workprocedure_id}
<if test="material_id != null and material_id != ''">
and (pdm_bi_device.material_id = #{material_id} or pdm_bi_device.material_id is null )
and pdm_bi_device.material_id = #{material_id}
</if>
GROUP BY pdm_bi_device.device_code
HAVING currentQty > #{qty}

View File

@@ -1,29 +0,0 @@
package org.nl.wms.product_manage.service.device.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.common.domain.query.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.system_manage.service.dept.dao.SysDept;
import java.util.List;
/*
* @author ZZQ
* @Date 2022/12/15 4:20 下午
*/
@Data
public class DeviceQuery extends BaseQuery<PdmBiDevice> {
private String search;
private String workprocedure_id;
private String product_area;
@Override
public void paramMapping() {
super.doP.put("search", QParam.builder().k(new String[]{"device_code"}).type(QueryTEnum.LK).build());
}
}

View File

@@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.OptionRecord;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.springframework.web.multipart.MultipartFile;
@@ -115,6 +115,4 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
*/
void replaceDevice(JSONObject param);
List<Map> reportQuery(ReportQuery query);
}

View File

@@ -2,10 +2,6 @@ package org.nl.wms.product_manage.service.workorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -17,5 +13,4 @@ import java.util.Map;
*/
public interface IPdmProduceWorkorderrecordService extends IService<PdmProduceWorkorderrecord> {
List<Map> getWorkorderRecordDtl(ReportQuery query);
}

View File

@@ -220,10 +220,6 @@ public class PdmProduceWorkorder implements Serializable {
* 完工时间
*/
private String confirm_time;
/**
* 自增序号
*/
private Integer seq_number;
}

View File

@@ -1,12 +1,7 @@
package org.nl.wms.product_manage.service.workorder.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -18,5 +13,4 @@ import java.util.Map;
*/
public interface PdmProduceWorkorderrecordMapper extends BaseMapper<PdmProduceWorkorderrecord> {
List<Map> getWorkorderRecordDtl(@Param("query")ReportQuery query);
}

View File

@@ -2,29 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper">
<select id="getWorkorderRecordDtl" resultType="java.util.Map">
SELECT
wr.workorder_code,
wr.device_code,
mb.material_name,
mb.material_spec,
mb.material_id,
re.*
FROM pdm_produce_workorderrecord re
INNER JOIN pdm_produce_workorder wr on re.workorder_id = wr.workorder_id
LEFT JOIN md_me_materialbase mb on mb.material_id = wr.material_id
where wr.is_delete = true
<if test="query.device_code != null and query.device_code != ''">
and wr.device_code = #{device_code}
</if>
<if test="query.workorder_code != null and query.workorder_code != ''">
and wr.workorder_code = #{workorder_code}
</if>
<if test="query.start_time != null and query.start_time != ''">
and wr.realproducestart_date >= #{query.start_time}
</if>
<if test="query.end_time != null and query.end_time != ''">
and #{query.end_time} >= wr.realproducestart_date
</if>
</select>
</mapper>

View File

@@ -1,21 +0,0 @@
package org.nl.wms.product_manage.service.workorder.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.common.domain.query.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
/*
* @author ZZQ
* @Date 2023/4/26 11:05
*/
@Data
public class ReportQuery extends BaseQuery<PdmProduceWorkorderrecord> {
private String device_code;
private String workorder_code;
private String report;
}

View File

@@ -14,7 +14,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.jsonwebtoken.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.nl.common.TableDataInfo;
@@ -39,7 +38,6 @@ import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import org.nl.wms.product_manage.service.workorder.dao.WorkorderRecord;
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderMapper;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.nl.wms.system_manage.service.user.ISysUserService;
import org.nl.wms.system_manage.service.user.dao.SysUser;
@@ -65,7 +63,6 @@ import java.util.stream.Collectors;
* @since 2023-04-26
*/
@Service
@Slf4j
public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorkorderMapper, PdmProduceWorkorder> implements IPdmProduceWorkorderService {
@Autowired
private IMdPbClassstandardService classstandardService;
@@ -182,9 +179,9 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
String workorder_id = param.getJSONObject("row").getString("workorder_id");
this.update(new UpdateWrapper<PdmProduceWorkorder>()
.set("workorder_status", WorkerOrderEnum.FORCE_COMPLETE.getCode())
.set("confirm_id", SecurityUtils.getCurrentUserId())
.set("confirm_name", SecurityUtils.getCurrentNickName())
.set("confirm_time", new Date())
.set("update_id", SecurityUtils.getCurrentUserId())
.set("update_name", SecurityUtils.getCurrentNickName())
.set("update_time", new Date())
.in("workorder_id", workorder_id));
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
@@ -193,7 +190,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
array.add(map);
Map<String, Object> result = wmsToAcsService.orderStatusUpdate(array);
if (!HttpStatus.OK.equals(result.get("status"))) {
log.error((String) result.get("message"));
throw new BadRequestException((String) result.get("message"));
}
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id);
}
@@ -528,8 +525,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (((int) resp.get("status")) == (HttpStatus.BAD_REQUEST.value())) {
throw new BadRequestException(String.valueOf(resp.get("message")));
}
workOrder.setReal_qty(null);
this.update(workOrder, new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, result.getWorkorder_id());
return RestBusinessTemplate.execute(() -> resp);
}
@@ -640,7 +637,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
list.add(report_qty);
return list;
}
//TODO:切换设备
@Override
public void replaceDevice(JSONObject param) {
String produceorder_code = param.getString("produceorder_code");
@@ -670,8 +667,4 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
//this.update(produceshiftorderDto);
}
@Override
public List<Map> reportQuery(ReportQuery query) {
return reportRecordService.getWorkorderRecordDtl(query);
}
}

View File

@@ -1,16 +1,11 @@
package org.nl.wms.product_manage.service.workorder.impl;
import lombok.var;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 生产设备报工记录表 服务实现类
@@ -22,8 +17,4 @@ import java.util.Map;
@Service
public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl<PdmProduceWorkorderrecordMapper, PdmProduceWorkorderrecord> implements IPdmProduceWorkorderrecordService {
@Override
public List<Map> getWorkorderRecordDtl(ReportQuery query) {
return this.baseMapper.getWorkorderRecordDtl(query);
}
}

View File

@@ -58,7 +58,7 @@ public class SchedulerController {
.or()
.like("process_name", blurry)
.or()
.like("rule_code", blurry);
.like("material_spec", blurry);
}
List<SchProcessRoute> list = processRouteService.list(query);
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);

View File

@@ -9,10 +9,10 @@
FROM
sch_cacheline_vehilematerial v
LEFT JOIN sch_cacheline_position p ON p.vehicle_code = v.vehicle_code
WHERE p.vehicle_code <![CDATA[<>]]> '' and
WHERE p.vehicle_code <> '' and
v.vehicle_status = #{vehicle_status}
<if test="material_id != null and material_id != ''">
and v.material_id = #{material_id}
v.material_id = #{material_id}
</if>
</select>
</mapper>

View File

@@ -41,16 +41,9 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
/**
* 根据设备点位查询设备对应工序
* r.workprocedure_code,r.workprocedure_id,p.device_code
* @param point_code
* @return
*/
Map findDeviceWorkprodure(String point_code);
Map getWorkprodureById(String id);
Map getWorkprodureByCode(String code);
}

View File

@@ -1,7 +1,6 @@
package org.nl.wms.scheduler_manage.service.point.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import java.util.List;
@@ -31,5 +30,4 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<Map> selectPoint(Map<String,Object> map);
Map getDeviceWorkprodure(String pointCode);
Map getWorkprodure(@Param("workprodureId") String workprodureId,@Param("workprodureCode") String workprodureCode);
}

View File

@@ -91,19 +91,9 @@
</select>
<select id="getDeviceWorkprodure" resultType="java.util.Map">
select
r.workprocedure_code,r.workprocedure_id,dev.device_code,dev.spec from pdm_bi_device dev
r.workprocedure_code,r.workprocedure_id from pdm_bi_device dev
LEFT join sch_base_point p on p.device_code = dev.device_code
LEFT JOIN pdm_bi_workprocedure r on dev.workprocedure_id = r.workprocedure_id
where p.point_code = #{pointCode};
</select>
<select id="getWorkprodure" resultType="java.util.Map">
select * from pdm_bi_workprocedure
where
<if test="workprodureId != null and workprodureId != ''">
workprocedure_id = #{workprodureId}
</if>
<if test="workprodureCode != null and workprodureCode != ''">
workprocedure_code = #{workprodureCode}
</if>
</select>
</mapper>

View File

@@ -148,18 +148,4 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
}
return null;
}
@Override
public Map getWorkprodureById(String workprodureId) {
if (StringUtils.isNotEmpty(workprodureId)){
return this.baseMapper.getWorkprodure(workprodureId,null);
}
return null;
}
@Override
public Map getWorkprodureByCode(String workprodureCode) {
if (StringUtils.isNotEmpty(workprodureCode)){
return this.baseMapper.getWorkprodure(null,workprodureCode);
}
return null;
}
}

View File

@@ -2,7 +2,6 @@ package org.nl.wms.scheduler_manage.service.scheduler;
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
/**
* <p>
@@ -14,7 +13,5 @@ import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowEle
*/
public interface ISchProcessRouteService extends IService<SchProcessRoute> {
SchProcessRoute findByMaterialId(String ruleCode);
FlowElement checkWorkprodure(String workprodureCode,String ruleCode);
SchProcessRoute findByMaterialId(String materialId,String regionCode);
}

View File

@@ -2,19 +2,14 @@ package org.nl.wms.scheduler_manage.service.scheduler.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.scheduler.SchedulerService;
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
import org.nl.wms.scheduler_manage.service.scheduler.dao.mapper.SchProcessRouteMapper;
import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/**
* <p>
@@ -28,26 +23,18 @@ import org.springframework.util.CollectionUtils;
public class SchProcessRouteServiceImpl extends ServiceImpl<SchProcessRouteMapper, SchProcessRoute> implements ISchProcessRouteService {
@Autowired
private ISysParamService iSysParamService;
@Autowired
private SchedulerService schedulerService;
ISysParamService iSysParamService;
@Override
public SchProcessRoute findByMaterialId(String ruleCode) {
public SchProcessRoute findByMaterialId(String materialId, String regionCode) {
Param one = iSysParamService.getOne(new QueryWrapper<Param>().eq("code", "process_route"));
String value = one.getValue();
if (value.equals("1")){
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",ruleCode));
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",regionCode));
}else {
return this.baseMapper.findByMaterialId(ruleCode);
}
}
@Override
public FlowElement checkWorkprodure(String workprodureCode,String ruleCode) {
SchProcessRoute processRoute = this.findByMaterialId(ruleCode);
if (processRoute != null){
return schedulerService.currentFlow(processRoute.getProcess_id(), workprodureCode);
if (StringUtils.isNotEmpty(materialId)){
return this.baseMapper.findByMaterialId(materialId);
}
}
return null;
}

View File

@@ -4,7 +4,6 @@ import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.xml.stream.XMLStreamConstants;
@@ -20,9 +19,6 @@ import java.util.Map;
*/
@Service("flow")
public class FlowConverter implements BaseConverter {
@Autowired
ParamConverter paramConverter;
String[] labels = new String[]{"id","name","sourceRef","targetRef"};
@Override
@SneakyThrows
@@ -39,8 +35,8 @@ public class FlowConverter implements BaseConverter {
break;
}
if (XMLStreamConstants.START_ELEMENT == xtr.next()){
ParamElement process = (ParamElement)paramConverter.process(xtr);
element.getParams().put(process.getId(),process.getValue());
System.out.println(xtr.getLocalName());
element.getParams().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value"));
i++;
}
}

View File

@@ -17,7 +17,7 @@ public class FlowElement extends BaseElement {
private FlowElement targetRef;
private String sourceRefId;
private String targetRefId;
private Map<String,Object> params = new HashMap<>();
private Map<String,String> params = new HashMap<>();
@@ -55,11 +55,11 @@ public class FlowElement extends BaseElement {
this.targetRefId = targetRefId;
}
public Map<String, Object> getParams() {
public Map<String, String> getParams() {
return params;
}
public void setParams(Map<String, Object> params) {
public void setParams(Map<String, String> params) {
this.params = params;
}
}

View File

@@ -1,42 +0,0 @@
package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import org.springframework.stereotype.Service;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
/*
* @author ZZQ
* @Date 2023/5/19 11:00
*/
@Service("param")
public class ParamConverter implements BaseConverter {
String[] labels = new String[]{"id","value"};
@Override
@SneakyThrows
public BaseElement process(XMLStreamReader xtr) {
ParamElement element = new ParamElement();
setBaseLabel(element,xtr,labels);
element.setValue(xtr.getAttributeValue(null,"value"));
String has = xtr.getAttributeValue(null, "has");
if (StringUtils.isNotEmpty(has)){
int i = 0;
while (true){
if (i == Integer.valueOf(has)){
break;
}
if (XMLStreamConstants.START_ELEMENT == xtr.next()){
element.getItem().put(xtr.getAttributeValue(null,"spec"),xtr.getAttributeValue(null,"value"));
i++;
}
}
element.setValue(element.getItem());
}
return element;
}
}

View File

@@ -1,18 +0,0 @@
package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl;
import lombok.Data;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import java.util.HashMap;
import java.util.Map;
/*
* @author ZZQ
* @Date 2023/5/21 18:03
*/
@Data
public class ParamElement extends BaseElement {
private Object value;
private Map<String,String> item = new HashMap<>();
}

View File

@@ -9,7 +9,6 @@ import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
@@ -20,7 +19,6 @@ import lombok.experimental.Accessors;
* @since 2023-05-11
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("sch_base_task")
public class SchBaseTask implements Serializable {

View File

@@ -98,28 +98,4 @@ public class IStivtlostorivnCpInController {
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/unDivStruct")
@Log("取消分配")
@ApiOperation("取消分配")
public ResponseEntity<Object> unDivStruct(@RequestBody JSONObject whereJson){
iStIvtIostorinvCpService.unDivStruct(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/setPoint")
@Log("设置起点")
@ApiOperation("设置起点")
public ResponseEntity<Object> setPoint(@RequestBody JSONObject whereJson){
iStIvtIostorinvCpService.setPoint(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/confirm")
@Log("强制确认")
@ApiOperation("强制确认")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson){
iStIvtIostorinvCpService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -117,31 +117,4 @@ public interface IStIvtIostorinvCpService extends IService<StIvtIostorinvCp> {
* }
*/
void divStruct(JSONObject whereJson);
/**
* 取消分配
* @param whereJson
* {
* 分配明细
* }
*/
void unDivStruct(JSONObject whereJson);
/**
* 设置起点
* @param whereJson
* {
* 分配明细
* }
*/
void setPoint(JSONObject whereJson);
/**
* 强制确认
* @param whereJson
* {
* "iostorinv_id": 主表标识
* }
*/
void confirm(JSONObject whereJson);
}

View File

@@ -1,6 +1,5 @@
package org.nl.wms.storage_manage.productmanage.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -28,7 +27,6 @@ public class StIvtIostorinvdisCp implements Serializable {
/**
* 出入单分配标识
*/
@TableId
private String iostorinvdis_id;
/**

View File

@@ -1,6 +1,5 @@
package org.nl.wms.storage_manage.productmanage.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;
import lombok.experimental.Accessors;
@@ -26,7 +25,6 @@ public class StIvtIostorinvdtlCp implements Serializable {
/**
* 出入单明细标识
*/
@TableId
private String iostorinvdtl_id;
/**

View File

@@ -76,7 +76,7 @@
AND mst.bill_code =#{bill_code}
</if>
<if test="iostorinv_id != null and iostorinv_id != ''">
AND mst.iostorinv_id =#{iostorinv_id}
AND mst.bill_code =#{iostorinv_id}
</if>
order by dtl.seq_no ASC

View File

@@ -1,9 +1,7 @@
package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -13,28 +11,18 @@ import io.jsonwebtoken.lang.Assert;
import org.jetbrains.annotations.NotNull;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.publish.event.PointEvent;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpService;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService;
@@ -46,8 +34,6 @@ import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostor
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvCpMapper;
import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery;
import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService;
import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -55,10 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -96,23 +79,12 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
@Autowired
protected IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Autowired
private ISchBasePointService iSchBasePointService; // 点位服务
@Autowired
private IStIvtStructivtCpService iStIvtStructivtCpService; // 库存服务
@Autowired
protected IMdPbBucketrecordService iMdPbBucketrecordService; // 包装箱记录表服务
@Override
public Object pageQuery(IostorInvQuery query, PageQuery page) {
// 查询条件
query.setIo_type(IOSEnum.IO_TYPE.code("入库"));
page.setSort("bill_code,DESC");
page.setSort("bill_code,ASC");
// 分页查询
Page<StIvtIostorinvCp> pageQuery = this.page(page.build(), query.build());
@@ -236,7 +208,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.map(StIvtIostorinvdisdtlCp::getReal_qty)
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 插入分配
// 插入分配明细
StIvtIostorinvdisCp disDao = new StIvtIostorinvdisCp()
.setIostorinvdis_id(IdUtil.getStringId())
.setIostorinv_id(param.getString("iostorinv_id"))
@@ -349,10 +321,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
6.更新库存、日物流表等、
*/
// 判断是否已分配
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id")));
if (ObjectUtil.isNotEmpty(disDao.getStruct_code())) throw new BadRequestException("此明细已分配");
String struct_id = whereJson.getString("struct_id");
StIvtStructattr attrDao = new StIvtStructattr();
@@ -388,211 +356,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
attrDao.setInv_code(mstDao.getBill_code());
iStIvtStructattrService.updateById(attrDao);
// 4.更新库存
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getById(disDao.getIostorinvdtl_id());
disDao.setStruct_id(attrDao.getStruct_id());
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.ADDWAREHOUSING_QTY,dtlDao.getSource_billdtl_id()));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void unDivStruct(JSONObject whereJson) {
/*
将分配下的所有分配明细取消
*/
// 1.校验是否已生成任务并已经下发
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getOne(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinvdis_id, whereJson.getString("iostorinvdis_id"))
);
if (ObjectUtil.isEmpty(disDao)) throw new BadRequestException("分配明细不存在!");
SchBaseTask taskDao = iSchBaseTaskService.getOne(
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_id, disDao.getTask_id())
.gt(SchBaseTask::getTask_status, TaskStatusEnum.START_AND_POINT.getCode())
);
if (ObjectUtil.isNotEmpty(taskDao)) throw new BadRequestException("任务已下发,不可取消!");
// 2.更新分配明细
iStIvtIostorinvdisdtlCpService.update(
new StIvtIostorinvdisdtlCp()
.setStruct_name("")
.setStruct_code("")
.setStruct_id("")
.setSect_id("")
.setSect_code("")
.setSect_name(""),
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinvdis_id,disDao.getIostorinvdis_id())
);
// 3.更新任务
iSchBaseTaskService.update(
new SchBaseTask().setIs_delete(true),
new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getTask_id, disDao.getTask_id())
.lt(SchBaseTask::getTask_status, TaskStatusEnum.ISSUE.getCode())
);
// 解锁货位
iStIvtStructattrService.update(
new StIvtStructattr()
.setLock_type("1") // TODO 暂时写死
.setInv_code("")
.setInv_type("")
.setInv_id(""),
new QueryWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStruct_code, disDao.getStruct_code())
);
// 更新库存
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.SUBWAREHOUSING_QTY,null));
// 4.更新分配
iostorinvdisCpService.updateById(
disDao.setStruct_name("").setStruct_code("")
.setStruct_id("").setSect_id("")
.setSect_code("").setSect_name("")
.setPoint_id("").setPoint_code("")
.setPoint_name("")
);
// 5.更新明细
StIvtIostorinvdtlCp dtlDao = iostorinvdtlCpService.getOne(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinvdtl_id, disDao.getIostorinvdtl_id())
);
if (StrUtil.equals(dtlDao.getBill_status(), IOSEnum.BILL_STATUS.code("生成"))) {
throw new BadRequestException("没有可取消的分配明细!");
}
dtlDao.setAssign_qty(NumberUtil.sub(dtlDao.getAssign_qty(),disDao.getReal_qty()));
dtlDao.setUnassign_qty(disDao.getReal_qty());
if (dtlDao.getAssign_qty().doubleValue() == 0) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
} else if (dtlDao.getAssign_qty().doubleValue() > 0) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
}
iostorinvdtlCpService.updateById(dtlDao);
// 6.更新主表
updateMst(dtlDao.getIostorinv_id());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void setPoint(JSONObject whereJson) {
StIvtIostorinvdisCp disDao = iostorinvdisCpService.getById(whereJson.getString("iostorinvdis_id"));
// 1.校验是否设置过起点
if (ObjectUtil.isNotEmpty(disDao.getPoint_id())) throw new BadRequestException("此明细已生成任务!");
// 2.下发任务
SchBasePoint pointDao = iSchBasePointService.getOne(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, whereJson.getString("point_code"))
);
PointEvent event = PointEvent.builder()
.type(CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_SEND.getCode())
.point_code1(disDao.getStruct_code())
.point_code2(pointDao.getPoint_code())
.callback((Consumer<String>) disDao::setTask_id)
.build();
BussEventMulticaster.Publish(event);
// 3.更新分配表
iostorinvdisCpService.updateById(
disDao.setPoint_id(pointDao.getPoint_id())
.setPoint_code(pointDao.getPoint_code())
.setPoint_name(pointDao.getPoint_name())
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void confirm(JSONObject whereJson) {
// 1.更新主表为完成
StIvtIostorinvCp mstDao = this.getById(whereJson.getString("iostorinv_id"));
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
mstDao.setConfirm_id(SecurityUtils.getCurrentUserId());
mstDao.setConfirm_name(SecurityUtils.getCurrentNickName());
mstDao.setConfirm_time(DateUtil.now());
this.updateById(mstDao);
// 2.判断所有明细是否为分配完
List<StIvtIostorinvdtlCp> dtlDaoList = iostorinvdtlCpService.list(
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
boolean is_dis = dtlDaoList.stream()
.anyMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完")));
if (!is_dis) throw new BadRequestException("请先分配单据!");
// 3.更新明细表为完成
iostorinvdtlCpService.update(
new StIvtIostorinvdtlCp()
.setBill_status(IOSEnum.BILL_STATUS.code("完成")),
new QueryWrapper<StIvtIostorinvdtlCp>().lambda()
.eq(StIvtIostorinvdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
// 4.更新箱记录表状态为入库
List<StIvtIostorinvdisdtlCp> disDtlList = iStIvtIostorinvdisdtlCpService.list(
new QueryWrapper<StIvtIostorinvdisdtlCp>().lambda()
.eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
for (StIvtIostorinvdisdtlCp disDtlDao : disDtlList) {
// 更新箱记录表
iMdPbBucketrecordService.update(
MdPbBucketrecord.builder()
.status("03") // TODO 暂时写死
.instor_optid(Long.getLong(SecurityUtils.getCurrentUserId()))
.instor_optname(SecurityUtils.getCurrentNickName())
.instor_time(DateUtil.now())
.build(),
new QueryWrapper<MdPbBucketrecord>().lambda()
.eq(MdPbBucketrecord::getBucketunique, disDtlDao.getBucketunique())
);
}
// 5.更新任务为完成、更新库存、解锁点位
List<StIvtIostorinvdisCp> disDaoList = iostorinvdisCpService.list(
new QueryWrapper<StIvtIostorinvdisCp>().lambda()
.eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id"))
);
for (StIvtIostorinvdisCp dao : disDaoList) {
// 1更新任务为完成
SchBaseTask taskDao = iSchBaseTaskService.getById(dao.getTask_id());
if (ObjectUtil.isNotEmpty(taskDao)) {
// 更新有任务分配
if (!StrUtil.equals(taskDao.getTask_id(), TaskStatusEnum.FINISHED.getCode())) {
taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode());
iSchBaseTaskService.updateById(taskDao);
}
}
// 2更新库存
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY,null));
// 3解锁终点
unLockNext(dao.getStruct_id(),dao.getStoragevehicle_code());
}
// TODO 更新库存、物流等
}
@NotNull
@@ -614,7 +378,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
stIvtIostorinvCp.setSysdeptid("111");
stIvtIostorinvCp.setSyscompanyid("111");
}else {
// 修改
stIvtIostorinvCp.setUpdate_id(SecurityUtils.getCurrentUserId());
stIvtIostorinvCp.setUpdate_name(SecurityUtils.getCurrentNickName());
@@ -730,45 +493,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
}
// 判断是否为生成
boolean is_create = dtlDaoList
.stream()
.allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成")));
if (is_create) mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
this.updateById(mstDao);
}
public JSONObject ivtDataParam(StIvtIostorinvdisCp disDao,String change_type,String sale_id) {
JSONObject ivtParam = new JSONObject();
ivtParam.put("struct_id", disDao.getStruct_id());
ivtParam.put("material_id", disDao.getMaterial_id());
ivtParam.put("pcsn", disDao.getPcsn());
ivtParam.put("quality_scode", disDao.getQuality_scode());
ivtParam.put("ivt_level", disDao.getIvt_level());
ivtParam.put("change_qty", disDao.getReal_qty());
ivtParam.put("change_type", change_type);
ivtParam.put("sale_id", sale_id);
return ivtParam;
}
/*
解锁终点
*/
public void unLockNext(String struct_id, String storagevehicle_code) {
StIvtStructattr attrDao = iStIvtStructattrService.getById(struct_id);
if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("仓位不存在!");
attrDao.setInv_code("");
attrDao.setInv_type("");
attrDao.setInv_id("");
attrDao.setStoragevehicle_code(storagevehicle_code);
attrDao.setLock_type("1");
iStIvtStructattrService.updateById(attrDao);
}
}

View File

@@ -6,8 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService;
@@ -46,10 +44,6 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
@Autowired
protected IMdPbBucketrecordService iMdPbBucketrecordService; // 包装箱记录表服务
@Autowired
protected IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务
@Override
public void batchInsert(Collection<StIvtIostorinvdisdtlCp> list) {
if (!CollectionUtils.isEmpty(list)){
@@ -73,18 +67,13 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
.eq("storagevehicle_code", item.getString("storagevehicle_code"))
);
MdMeMaterialbase mataDao = iMdMeMaterialbaseService.getOne(
new QueryWrapper<MdMeMaterialbase>().lambda()
.eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code"))
);
StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp()
.setIostorinv_id(json.getString("iostorinv_id"))
.setIostorinvdtl_id(json.getString("iostorinvdtl_id"))
.setIostorinvdis_id(json.getString("iostorinvdis_id"))
.setIostorinvdisdtl_id(IdUtil.getStringId())
.setSeq_no(new BigDecimal(1))
.setMaterial_id(mataDao.getMaterial_id())
.setMaterial_id(item.getString("material_id"))
.setPcsn(item.getString("pcsn"))
.setQuality_scode("00") // TODO 暂时写
.setIvt_level("01") // TODO 暂时写
@@ -99,17 +88,16 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl<StIvtIostorin
result.add(disDtlDao);
// 更新箱记录表
MdPbBucketrecord recodDao = new MdPbBucketrecord();
recodDao.setStoragevehicle_id(Long.getLong(vehicleDao.getStoragevehicle_id()));
recodDao.setStatus("02"); // TODO 暂时写死
recodDao.setStoragevehicle_code(vehicleDao.getStoragevehicle_code());
recodDao.setMakeup_optid(Long.getLong(SecurityUtils.getCurrentUserId()));
recodDao.setMakeup_optname(SecurityUtils.getCurrentNickName());
recodDao.setMakeup_time(DateUtil.now());
iMdPbBucketrecordService.update(
MdPbBucketrecord.builder()
.storagevehicle_id(Long.getLong(vehicleDao.getStoragevehicle_id()))
.status("02") // TODO 暂时写死
.storagevehicle_code(vehicleDao.getStoragevehicle_code())
.makeup_optid(Long.getLong(SecurityUtils.getCurrentUserId()))
.makeup_optname(SecurityUtils.getCurrentNickName())
.makeup_time(DateUtil.now())
.build(),
new QueryWrapper<MdPbBucketrecord>()
.eq("bucketunique", item.getString("bucketunique"))
recodDao,new QueryWrapper<MdPbBucketrecord>().eq("bucketunique", item.getString("bucketunique"))
);
});

View File

@@ -1,6 +1,5 @@
package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -75,9 +74,7 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
row.setMaterial_id(materDao.getMaterial_id());
row.setIostorinvdtl_id(org.nl.common.utils.IdUtil.getStringId());
row.setSeq_no(i+1);
row.setPcsn(DateUtil.today());
row.setIs_active(true);
row.setIvt_level("01"); // TODO 暂时写死
row.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
row.setReal_qty(row.getPlan_qty());
row.setUnassign_qty(row.getPlan_qty());

View File

@@ -1,6 +1,5 @@
package org.nl.wms.storage_manage.productmanage.service.structIvt.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -26,7 +25,6 @@ public class StIvtStructivtCp implements Serializable {
/**
* 库存记录标识
*/
@TableId
private String stockrecord_id;
/**

View File

@@ -52,8 +52,7 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
.isNull(StIvtStructattr::getStoragevehicle_code)
.eq(StIvtStructattr::getIs_used, "1") //TODO 暂时写死
.eq(StIvtStructattr::getLock_type, "1") //TODO 暂时写死
.orderByAsc(StIvtStructattr::getStruct_code)
,false);
);
break;
}

View File

@@ -16,8 +16,6 @@ import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
import org.nl.wms.pcs_manage.service.purchase.IPcsIfPurchaseorderService;
@@ -76,9 +74,6 @@ public class StIvtIostorinvOutYlServiceImpl extends ServiceImpl<StIvtIostorinvYl
@Autowired
private IPcsIfPurchaseorderService purchaseorderService;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Override
public Object pageQuery(YlIostorInvQuery query, PageQuery pageQuery) {
@@ -154,38 +149,7 @@ public class StIvtIostorinvOutYlServiceImpl extends ServiceImpl<StIvtIostorinvYl
throw new BadRequestException("单据不存在");
}
dtl_list.forEach(dtl -> {
double need_qty = dtl.getPlan_qty().doubleValue();
List<StIvtStructivtYl> list = structivtYlService.list(new QueryWrapper<StIvtStructivtYl>()
.eq("material_id", dtl.getMaterial_id())
.eq("stor_id", mst.getStor_id())
.eq("workshop_id", mst.getWorkshop_id()));
MdMeMaterialbase mater = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", dtl.getMaterial_id()));
if (ObjectUtil.isEmpty(list)) {
throw new BadRequestException("当前仓库内不存在物料:" + mater.getMaterial_name());
}
for (StIvtStructivtYl ivt : list) {
//判断是否需要继续分配库存不大于0时跳出循环
if (need_qty > 0){
double canuse_qty = ivt.getCanuse_qty().doubleValue();
if (canuse_qty >= need_qty){
//插入分配表
//维护库存
}
}else {
break;
}
}
if (need_qty > 0){
throw new BadRequestException("物料:"+mater.getMaterial_name()+"库存不足,缺少:"+need_qty+"KG");
}
});
}

View File

@@ -1,7 +1,6 @@
package org.nl.wms.storage_manage.rawmanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -75,6 +74,7 @@ public class StIvtIostorinvYlServiceImpl extends ServiceImpl<StIvtIostorinvYlMap
@Autowired
private IPcsIfPurchaseorderService purchaseorderService;
@Override
public Object pageQuery(YlIostorInvQuery query, PageQuery pageQuery) {
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
@@ -156,36 +156,7 @@ public class StIvtIostorinvYlServiceImpl extends ServiceImpl<StIvtIostorinvYlMap
dis.setWork_status(IOSEnum.WORK_STATUS.code("完成"));
iostorinvdisYlService.updateById(dis);
//修改库存
//判断该货位和物料上是否存在
StIvtStructivtYl structivtYl = structivtYlService.getOne(new QueryWrapper<StIvtStructivtYl>().eq("struct_code", dis.getSect_code()).eq("material_id", dis.getMaterial_id()));
if (ObjectUtil.isNotEmpty(structivtYl)) {
structivtYl.setCanuse_qty(NumberUtil.add(structivtYl.getCanuse_qty(), dis.getPlan_qty()));
structivtYl.setIvt_qty(structivtYl.getCanuse_qty());
structivtYlService.updateById(structivtYl);
} else {
structivtYlService.save(StIvtStructivtYl.builder()
.stockrecord_id(IdUtil.getStringId())
.struct_id(dis.getStruct_id())
.struct_code(dis.getStruct_code())
.struct_name(dis.getStruct_name())
.material_id(dis.getMaterial_id())
.quality_scode(dis.getQuality_scode())
.pcsn(dis.getPcsn())
.ivt_level(dis.getIvt_level())
.is_active(dis.getIs_active())
.canuse_qty(dis.getReal_qty())
.ivt_qty(dis.getReal_qty())
.qty_unit_id(dis.getQty_unit_id())
.instorage_time(DateUtil.now())
.stor_id(mst.getStor_id())
.workshop_id(mst.getWorkshop_id())
.build()
);
}
/*//插入库存变动记录表
//修改库存和插入库存变动记录表
structivtflowService.recordStructivtFlow(
StIvtStructivtflowDto.builder()
.bill_code(mst.getBill_code()).change_type_scode(CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_CONFIRM).bill_table("st_ivt_iostorinv_bcp")
@@ -194,7 +165,7 @@ public class StIvtIostorinvYlServiceImpl extends ServiceImpl<StIvtIostorinvYlMap
.task_id(dis.getTask_id())
.storagevehicle_code(dis.getStoragevehicle_code())
.build()
);*/
);
});
//修改明细状态

View File

@@ -1,14 +1,9 @@
package org.nl.wms.storage_manage.rawmanage.service.structIvt.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.io.Serializable;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -23,7 +18,6 @@ import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("st_ivt_structivt_yl")
@Builder
public class StIvtStructivtYl implements Serializable {
private static final long serialVersionUID = 1L;
@@ -31,7 +25,6 @@ public class StIvtStructivtYl implements Serializable {
/**
* 库存记录标识
*/
@TableId(value = "stockrecord_id")
private String stockrecord_id;
/**
@@ -102,7 +95,7 @@ public class StIvtStructivtYl implements Serializable {
/**
* 入库时间
*/
private String instorage_time;
private Date instorage_time;
/**
* 仓库标识
@@ -112,7 +105,7 @@ public class StIvtStructivtYl implements Serializable {
/**
* 车间标识
*/
private String workshop_id;
private String product_area;
}

View File

@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions>
<process id="JGXL" name="机关下料">
<start id="start" name="Starter" targetRef="A1_JGXL"></start>
<flow id="A1_JGXL" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
<param id="cacheLine" has="2">
<item spec="15" value="A1_HCX_01"></item>
<item spec="22" value="A1_HCX_02"></item>
</param>
<process id="JGXJ" name="机关下料">
<start id="start" name="Starter" targetRef="A1_JGXJ"></start>
<flow id="A1_JGXJ" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
<param id="cacheLine" value="A1_HCX_01"/>
</flow>
<flow id="A1_TWYTJ" name="推弯一体工序" sourceRef="A1_JGXL" targetRef="A1_SKQX">
<flow id="A1_TWYTJ" name="推弯工序" has="1" sourceRef="A1_JGXJ" targetRef="A1_SKQX">
<param id="cacheLine" value="A1_HCX_01"/>
</flow>
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_TWYTJ" targetRef="end"></flow>
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
</process>
<process id="WXXL" name="直管无屑下料">
<start id="start" name="Starter" targetRef="A1_WXXL"></start>
<flow id="A1_WXXL" name="无屑下料工序" has="1" sourceRef="starter" targetRef="A1_STLS">
<param id="cacheLine" value="A1_HCX_03"/>
<flow id="A1_WXXL" name="无屑下料工序" has="3" sourceRef="starter" targetRef="A1_STLS">
<param id="param1" value="param1"/>
<param id="param2" value="param2"/>
<param id="param3" value="param3"/>
</flow>
<flow id="A1_STLS" name="三通拉伸工序" sourceRef="A1_WXXL" targetRef="A1_TK"></flow>
<flow id="A1_TK" name="镗孔" sourceRef="A1_TK" targetRef="end"></flow>