Merge branch 'master' of http://121.40.234.130:8899/root/hl_one
This commit is contained in:
@@ -33,10 +33,11 @@ public enum AcsTaskEnum {
|
||||
TASK_PLOTTER_CALL_MATERIAL("14","刻字机-叫料请求"),
|
||||
TASK_WARP_MAC("7","包装机-叫料出库"),
|
||||
TASK_WARP_EMPTY("8","包装机-送空框"),
|
||||
TASK_STRUCT_IN("9","入库-生产入库"),
|
||||
TASK_STRUCT_OUT("10","出库-生产出库"),
|
||||
TASK_STRUCT_CHECK("14","盘点任务"),
|
||||
TASK_STRUCT_SHUT("15","拼盘任务"),
|
||||
TASK_STRUCT_IN("9","入库-半成品-生产入库"),
|
||||
TASK_STRUCT_OUT("10","出库-半成品-生产出库"),
|
||||
TASK_STRUCT_CHECK("14","半成品-盘点"),
|
||||
TASK_STRUCT_SHUT("15","半成品-拼盘任务出"),
|
||||
TASK_STRUCT_SHUT_IN("16","半成品-拼盘任务入"),
|
||||
TASK_STRUCT_CP_IN("11","入库-成品-生产入库"),
|
||||
TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"),
|
||||
TASK_STRUCT_CP_CHECK("13","成品-盘点"),
|
||||
@@ -68,8 +69,8 @@ public enum AcsTaskEnum {
|
||||
|
||||
ACS_TASK_TYPE_NOBLE_POINT_POINT_TASK("5","诺宝点对点任务"),
|
||||
|
||||
ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务(刻字-包装)"),
|
||||
ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务(刻字-包装)"),
|
||||
ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务"),
|
||||
ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务"),
|
||||
|
||||
AUTO_TASK_FINISHED_TYPE("1", "自动完成任务"),
|
||||
MANUAL_TASK_FINISHED_TYPE("2", "手动完成任务"),
|
||||
|
||||
@@ -10,9 +10,8 @@ import org.nl.wms.product_manage.sch.tasks.SpeMachinery.SpeFullTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.callMaterial.WrapCallMaterialTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.sendEmpty.WrapSendEmptyTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterCallMaterialTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.callMaterial.PlotterCallMaterialTask;
|
||||
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterSendMaterialTask;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.SmartLifecycle;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
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.scheduler_manage.service.cacheline.ISchCachelineVehicleService;
|
||||
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
|
||||
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle;
|
||||
@@ -29,10 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -56,6 +56,8 @@ public class AgvInstService {
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private IPdmProduceWorkorderService workorderService;
|
||||
@Autowired
|
||||
private ISchCachelineVehilematerialService cachelineVehicleService;
|
||||
|
||||
public static void main(String[] args) {
|
||||
@@ -80,10 +82,10 @@ public class AgvInstService {
|
||||
, "qty", quantity,"spec",workprodure.get("spec"));
|
||||
//判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位:
|
||||
List<Map<String,String>> collect = new ArrayList<>();
|
||||
query.put("material_id",task.getString("material_id"));
|
||||
if (next.getName().equals("深坑清洗")){
|
||||
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode());
|
||||
task.put("task_name",AcsTaskEnum.TASK_PRODUCT_WASH.getDesc());
|
||||
query.put("material_id",task.getString("material_id"));
|
||||
// query.put("qty",quantity) 深坑物料需要转重量
|
||||
collect = deviceService.workproceduceDevicesWeight(query);
|
||||
}else {
|
||||
@@ -95,7 +97,7 @@ public class AgvInstService {
|
||||
task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
task.put("is_send","1");
|
||||
String nextPoint = null;
|
||||
String cacheVehile = "";
|
||||
Map<String,String> cacheVehile = new HashMap();
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
nextPoint = list.get(0).get("point_code");
|
||||
}else {
|
||||
@@ -106,8 +108,8 @@ public class AgvInstService {
|
||||
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_CACHE.getCode());
|
||||
task.put("task_name",AcsTaskEnum.TASK_PRODUCT_CACHE.getDesc());
|
||||
task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode());
|
||||
cacheVehile = getCacheVehile(nextPoint, null);
|
||||
if (StringUtils.isEmpty(cacheVehile)){
|
||||
cacheVehile = getCacheVehile(nextPoint, null,null);
|
||||
if (CollectionUtils.isEmpty(cacheVehile)){
|
||||
throw new BadRequestException("当前缓存线无可用空箱:"+nextPoint);
|
||||
}
|
||||
}
|
||||
@@ -118,7 +120,7 @@ public class AgvInstService {
|
||||
}
|
||||
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
schBaseTask.setBarcodeArr(cacheVehile.keySet().stream().collect(Collectors.joining(",")));
|
||||
schBaseTask.setPoint_code2(nextPoint);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
@@ -168,8 +170,10 @@ public class AgvInstService {
|
||||
public void empMatter(JSONObject task){
|
||||
//参数
|
||||
String startPoint = task.getString("point_code1");
|
||||
String cacheVehile = getCacheVehile(startPoint, task.getString("material_id"));
|
||||
if (StringUtils.isBlank(cacheVehile)) {
|
||||
|
||||
PdmProduceWorkorder tmp_workorder = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_code", task.getString("table_fk_id")));
|
||||
Map<String, String> cacheVehile = getCacheVehile(startPoint, task.getString("material_id"),tmp_workorder.getWorkprocedure_id());
|
||||
if (CollectionUtils.isEmpty(cacheVehile)) {
|
||||
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具");
|
||||
}
|
||||
//判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配
|
||||
@@ -177,12 +181,13 @@ public class AgvInstService {
|
||||
.eq("point_code1", startPoint)
|
||||
.eq("material_id", task.getString("material_id"))
|
||||
.in("task_status", "4","5","6"));
|
||||
if (allocateTask.size()>cacheVehile.split(",").length){
|
||||
if (allocateTask.size()>cacheVehile.keySet().size()){
|
||||
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")));
|
||||
}
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
schBaseTask.setBarcodeArr(cacheVehile.keySet().stream().collect(Collectors.joining(",")));
|
||||
schBaseTask.setQtyArr(JSON.toJSONString(cacheVehile));
|
||||
schBaseTask.setPoint_code1(startPoint);
|
||||
schBaseTask.setIs_send(true);
|
||||
schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
@@ -194,18 +199,19 @@ public class AgvInstService {
|
||||
|
||||
}
|
||||
|
||||
public String getCacheVehile(String cacheLine,String materialId){
|
||||
public Map<String, String> getCacheVehile(String cacheLine, String materialId,String workprocedure_id){
|
||||
Map<String, String> map = new HashMap<>();
|
||||
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<SchCachelineVehilematerial> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId, "cacheLine", cacheLine));
|
||||
List<SchCachelineVehilematerial> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId,"workprocedure_id",workprocedure_id, "cacheLine", cacheLine));
|
||||
if (vehicle.size()>0){
|
||||
if (vehicle.size()>count){
|
||||
return vehicle.stream().map(SchCachelineVehilematerial::getVehicle_code).collect(Collectors.joining(","));
|
||||
return vehicle.stream().collect(HashMap::new, (k, v) -> k.put(v.getVehicle_code(), String.valueOf(v.getQuantity())), HashMap::putAll);
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.ext.acs.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -12,6 +13,7 @@ import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@@ -36,6 +38,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
|
||||
, "vehicle_code", task.getString("vehicle_code")
|
||||
, "quantity", task.getString("material_qty")
|
||||
, "barcodeArr", task.getString("barcodeArr")
|
||||
, "qtyArr", task.getString("qtyArr")
|
||||
, "proprity_floor", "2"
|
||||
, "agv_system_type", task.getString("agv_system_type")
|
||||
));
|
||||
|
||||
@@ -275,37 +275,37 @@ public class WmsToSapServiceImpl implements WmsToSapService {
|
||||
deliver_jo.put("deliver_type", row.getString("Lfart"));
|
||||
String material_code = row.getString("Matnr").replaceAll("^(0+)", "");
|
||||
//获取物料对应的物料标识
|
||||
JSONObject mater_jo = WQLObject.getWQLObject("MD_ME_MaterialBase").query("material_code = '" + material_code + "'").uniqueResult(0);
|
||||
MdMeMaterialbase mater_jo = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", material_code));
|
||||
if (ObjectUtil.isEmpty(mater_jo)) {
|
||||
deliver_jo.put("material_id", "0");
|
||||
deliver_jo.put("is_success", "0");
|
||||
deliver_jo.put("remark", "未查询到该交货单对应的物料主数据:" + material_code);
|
||||
err_num++;
|
||||
} else {
|
||||
String material_id = mater_jo.getString("material_id");
|
||||
String material_id = mater_jo.getMaterial_id();
|
||||
deliver_jo.put("material_id", material_id);
|
||||
}
|
||||
deliver_jo.put("status", "10");
|
||||
deliver_jo.put("delivery_qty", row.getString("Lfimg"));
|
||||
String cust_code = row.getString("Kunnr");
|
||||
JSONObject cust_jo = WQLObject.getWQLObject("md_cs_customerbase").query("cust_code = '" + cust_code + "'").uniqueResult(0);
|
||||
MdCsCustomerbase cust_jo = customerbaseService.getOne(new QueryWrapper<MdCsCustomerbase>().eq("cust_code", cust_code));
|
||||
if (ObjectUtil.isNotEmpty(cust_jo)) {
|
||||
deliver_jo.put("cust_id", cust_jo.getString("cust_id"));
|
||||
deliver_jo.put("cust_code", cust_jo.getString("cust_code"));
|
||||
deliver_jo.put("cust_name", cust_jo.getString("cust_name"));
|
||||
deliver_jo.put("cust_id", cust_jo.getCust_id());
|
||||
deliver_jo.put("cust_code", cust_jo.getCust_code());
|
||||
deliver_jo.put("cust_name", cust_jo.getCust_name());
|
||||
} else {
|
||||
deliver_jo.put("is_success", "0");
|
||||
deliver_jo.put("remark", "未查询到该交货单对应的客户信息:" + cust_code);
|
||||
err_num++;
|
||||
}
|
||||
String unit_code = row.getString("Vrkme");
|
||||
JSONObject unit_jo = WQLObject.getWQLObject("md_pb_measureunit").query("unit_name = '" + unit_code + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(unit_jo)) {
|
||||
MdPbMeasureunit unit_jo = mdPbMeasureunitService.getOne(new QueryWrapper<MdPbMeasureunit>()
|
||||
.eq("unit_name", unit_code)); if (ObjectUtil.isEmpty(unit_jo)) {
|
||||
deliver_jo.put("qty_unit_id", "0");
|
||||
deliver_jo.put("remark", "未查询到该交货单对应的单位信息:" + unit_code);
|
||||
err_num++;
|
||||
} else {
|
||||
deliver_jo.put("qty_unit_id", unit_jo.getString("measure_unit_id"));
|
||||
deliver_jo.put("qty_unit_id", unit_jo.getMeasure_unit_id());
|
||||
}
|
||||
String sale_code = row.getString("Vgbel");
|
||||
String seq_no = row.getString("Vgpos");
|
||||
|
||||
@@ -128,7 +128,6 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardM
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(whereJson.get("class_idStr"))) {
|
||||
query.in("class_id",whereJson.get("class_idStr"));
|
||||
// query.last("and class_id in "+whereJson.get("class_idStr"));
|
||||
}
|
||||
List<Map<String, Object>> list = this.listMaps(query);
|
||||
return getMaps(list);
|
||||
|
||||
@@ -35,6 +35,10 @@ public class MdPbStoragevehicleext implements Serializable {
|
||||
*/
|
||||
private String storagevehicle_code;
|
||||
|
||||
/**
|
||||
* 单据号
|
||||
*/
|
||||
private String sale_id;
|
||||
|
||||
/**
|
||||
* 物料标识
|
||||
|
||||
@@ -6,10 +6,10 @@ import com.alibaba.fastjson.JSONObject;
|
||||
* 获取物料操作类型
|
||||
*/
|
||||
public enum MaterOptTypeEnum {
|
||||
QBWL(1, "00", "全部物料", "('1')", ""),
|
||||
BCP(2, "01", "管件半成品", "('1528555443906023424')", ""),
|
||||
YCL(3, "02", "管件原材料", "('1503644349995552768')", ""),
|
||||
CP(4, "03", "关键成品", "('1528555444031852544')", "");
|
||||
QBWL(1, "00", "全部物料", "1", ""),
|
||||
BCP(2, "01", "管件半成品", "1528555443906023424", ""),
|
||||
YCL(3, "02", "管件原材料", "1503644349995552768", ""),
|
||||
CP(4, "03", "关键成品", "1528555444031852544", "");
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -491,7 +491,7 @@ public class ClassstandardServiceImpl implements ClassstandardService {
|
||||
|
||||
@Override
|
||||
public Set<String> getAllChildIdSet(String class_idStr) {
|
||||
JSONArray arr = WQLObject.getWQLObject("md_pb_classstandard").query("class_id IN " + class_idStr).getResultJSONArray(0);
|
||||
JSONArray arr = WQLObject.getWQLObject("md_pb_classstandard").query("class_id IN " + "('"+class_idStr+"')").getResultJSONArray(0);
|
||||
Set<String> set = new HashSet<>();
|
||||
for (int i = 0; i < arr.size(); i++) {
|
||||
set.addAll(this.getChildIdSet(arr.getJSONObject(i).getString("class_id")));
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -14,11 +14,14 @@ import org.nl.common.utils.api.ResultCode;
|
||||
import org.nl.modules.common.exception.BizCoreException;
|
||||
import org.nl.wms.pda_manage.pda.dto.MaterialDto;
|
||||
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
|
||||
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
@@ -38,6 +41,9 @@ import java.util.regex.Pattern;
|
||||
public class CacheLineHandController {
|
||||
private final CacheLineHandService cacheLineHandService;
|
||||
|
||||
@Autowired
|
||||
private IPdmBiWorkprocedureService workprocedureService;
|
||||
|
||||
@PostMapping("/queryMaterial")
|
||||
@Log("物料查询")
|
||||
@ApiOperation("物料查询")
|
||||
@@ -336,4 +342,12 @@ public class CacheLineHandController {
|
||||
log.info("海亮缓存线手持服务 [缓存线盘点-缓存线物料信息盘点] 接口被请求, 请求参数-{}", param);
|
||||
return new ResponseEntity<>(cacheLineHandService.getCacheLineMaterialInfo(param), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getWorkprocedure")
|
||||
@Log("工序下拉")
|
||||
@ApiOperation("工序下拉")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> getWorkprocedure () {
|
||||
return new ResponseEntity<>(workprocedureService.list(), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,6 +401,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
|
||||
String vehicle_code = param.getString("vehicle_code");
|
||||
// 缓存线
|
||||
String cacheLine_code = param.getString("wcsdevice_code");
|
||||
String workprocedure_id = param.getString("workprocedure_id");
|
||||
String weight = param.getString("weight");
|
||||
String quantity = param.getString("quantity");
|
||||
|
||||
@@ -433,6 +434,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
|
||||
json.put("material_id", mater.getMaterial_id());
|
||||
json.put("weight", weight);
|
||||
json.put("quantity", quantity);
|
||||
json.put("workprocedure_id", workprocedure_id);
|
||||
//有箱有料
|
||||
json.put("vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode());
|
||||
json.put("create_time", DateUtil.now());
|
||||
@@ -479,7 +481,7 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
|
||||
json.put("weight", "0");
|
||||
json.put("quantity", "0");
|
||||
json.put("workprocedure_code", "");
|
||||
json.put("workprocedure_name", "");
|
||||
json.put("workprocedure_id", "");
|
||||
json.put("create_time", DateUtil.now());
|
||||
vehilematerialService.save(json.toJavaObject(SchCachelineVehilematerial.class));
|
||||
|
||||
|
||||
@@ -172,6 +172,7 @@ public class SpeEmpTask extends AbstractAcsTask {
|
||||
task.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
task.put("create_time", DateUtil.now());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_NB.getCode());
|
||||
task.put("priority", "1");}
|
||||
return task;
|
||||
}
|
||||
|
||||
@@ -144,6 +144,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
task.put("update_optname", SecurityUtils.getCurrentNickName());
|
||||
task.put("create_time", DateUtil.now());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_NB.getCode());
|
||||
task.put("priority", "1");}
|
||||
return task;
|
||||
}
|
||||
@@ -218,6 +219,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
cacheLineVechileService.removeByIds(list.stream().map(SchCachelineVehilematerial::getVehmaterial_id).collect(Collectors.toList()));
|
||||
}
|
||||
PdmProduceWorkorder workorder = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_code", task.getTable_fk_id()));
|
||||
SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial();
|
||||
vehilematerial.setCreate_time(DateUtil.now());
|
||||
vehilematerial.setVehmaterial_id(IdUtil.getStringId());
|
||||
@@ -227,6 +229,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
vehilematerial.setCacheLine_code(task.getPoint_code1());
|
||||
vehilematerial.setMaterial_id(task.getMaterial_id());
|
||||
vehilematerial.setQuantity(task.getMaterial_qty());
|
||||
vehilematerial.setWorkprocedure_code(workorder.getWorkprocedure_id());
|
||||
cacheLineVechileService.save(vehilematerial);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1,23 +1,42 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.callEmpty;
|
||||
|
||||
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 cn.hutool.core.util.StrUtil;
|
||||
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.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.enums.WorkerOrderEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
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.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.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -28,104 +47,73 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Service
|
||||
public class PlotterCallEmptyTask extends AbstractAcsTask {
|
||||
private static final String OPT_NAME = "刻字机#";
|
||||
|
||||
@Autowired
|
||||
private IPdmProduceWorkorderService workorderService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private WmsToAcsService wms;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject task, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("任务已完成,不可取消!");
|
||||
}
|
||||
String pointCode1 = taskObj.getString("point_code1");
|
||||
JSONObject pointObj = null;
|
||||
if (ObjectUtil.isNotEmpty(pointCode1)) {
|
||||
pointObj = pointTab.query("point_code = '" + pointCode1 + "'").uniqueResult(0);
|
||||
}
|
||||
public void updateTaskStatus(JSONObject param, String status) {
|
||||
SchBaseTask task = taskService.getById(param.getString("task_id"));
|
||||
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
|
||||
// 执行中
|
||||
// 任务执行中
|
||||
taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
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()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
// 完成
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位并赋值
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode());
|
||||
pointObj.put("material_id", "");
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
}
|
||||
// 2任务完成
|
||||
taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
} else {
|
||||
/**
|
||||
* 取消任务
|
||||
* 1、点位恢复
|
||||
* 2、任务状态修改
|
||||
*/
|
||||
// 2点位恢复
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
}
|
||||
// 2任务取消
|
||||
taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
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()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject param) {
|
||||
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
String end_point_code = param.getString("device_code");
|
||||
String workorder = param.getString("workorder_code");
|
||||
if(StrUtil.isEmpty(end_point_code)) {
|
||||
throw new BadRequestException("终点不能为空!");
|
||||
}
|
||||
if(StrUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不能为空!");
|
||||
}
|
||||
// 判断当前点是否有未完成的任务
|
||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + end_point_code + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) {
|
||||
throw new BadRequestException("当前点位" + end_point_code + "存在未完成的任务");
|
||||
}
|
||||
// 判断工单
|
||||
JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(workOrderObj)){
|
||||
throw new BadRequestException("下发工单不存在未完成工单:"+workorder);
|
||||
String start_point_code = param.getString("device_code");
|
||||
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("workorder_code", param.getString("workorder_code"))
|
||||
.eq("is_delete", false)
|
||||
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
|
||||
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
|
||||
//?刻字满料请求:可以存在多个任务?
|
||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
|
||||
.eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
|
||||
);
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
|
||||
}
|
||||
// 查找任务状态
|
||||
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextIdStr();
|
||||
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_id", taskdtl_id);
|
||||
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
|
||||
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_EMPTY.getDesc());
|
||||
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_EMPTY.getCode());
|
||||
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
|
||||
task.put("material_id", order.getMaterial_id());
|
||||
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
|
||||
task.put("material_id", workOrderObj.getString("material_id"));
|
||||
task.put("point_code2", end_point_code);
|
||||
task.put("point_code1", start_point_code);
|
||||
task.put("handle_class", this.getClass().getName());
|
||||
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
@@ -137,57 +125,77 @@ public class PlotterCallEmptyTask extends AbstractAcsTask {
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("priority", "1");
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
|
||||
task.put("table_fk_id",order.getWorkorder_code());
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
taskService.save(schBaseTask);
|
||||
// 找终点
|
||||
try {
|
||||
pointConfirm(task);
|
||||
JSONArray data = new JSONArray();
|
||||
JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0);
|
||||
data.add(result);
|
||||
data.add(task);
|
||||
// 下发
|
||||
wms.issueTaskToAcs2(data);
|
||||
} catch (Exception ex) {
|
||||
// 未找到
|
||||
task.put("remark", ex.getMessage());
|
||||
task.put("task_status", StatusEnum.TASK_START_ERROR.getCode());
|
||||
task.put("update_time", DateUtil.now());
|
||||
taskTab.update(task);
|
||||
log.error("刻字请求异常,error:{}",ex);
|
||||
schBaseTask.setRemark(ex.getMessage());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
schBaseTask.setUpdate_name("acs");
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
|
||||
taskService.save(schBaseTask);
|
||||
}
|
||||
return taskdtl_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 呼叫空框
|
||||
* 从缓存区获取空框
|
||||
* @param taskObj
|
||||
* 满料请求
|
||||
* 从刻字机满料缓存区中获取空位放入就行
|
||||
* @param taskObj: 任务对象
|
||||
*/
|
||||
@Override
|
||||
public void pointConfirm(JSONObject taskObj) {
|
||||
log.info(OPT_NAME+"callEmptyVehicle param:{}",JSONObject.toJSONString(taskObj));
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
// 去刻字缓存区找空盘
|
||||
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
|
||||
StatusEnum.POINT_STATUS_EMPTY_VEHICLE.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
|
||||
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
|
||||
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(point)) {
|
||||
// 找到位置
|
||||
// 点位上锁
|
||||
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
|
||||
pointTab.update(point);
|
||||
// 任务修改
|
||||
taskObj.put("point_code1", point.getString("point_code"));
|
||||
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
|
||||
// 去刻字缓存区寻找空框 TODO:空箱
|
||||
List<Map<String, String>> points = pointService.queryVehicle(
|
||||
MapOf.of("is_used", "1",
|
||||
"lock_type", StatusEnum.LOCK_OFF.getCode(),
|
||||
"region_code", "A1_KZHC",
|
||||
"material_null", "material_null"));
|
||||
if (ObjectUtil.isNotEmpty(points)) {
|
||||
Map<String, String> map = points.get(0);
|
||||
if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_ON.getCode())
|
||||
.eq("point_code",map.get("point_code")));
|
||||
// 设置点位
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
taskObj.put("point_code2",map.get("point_code"));
|
||||
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
taskService.updateById(schBaseTask);
|
||||
} else {
|
||||
throw new BadRequestException("刻字缓存区没有可用空框.");
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks) {
|
||||
ArrayList<SchBaseTask> Merge = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(tasks)){
|
||||
for (SchBaseTask task : tasks) {
|
||||
task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId());
|
||||
Merge.add(task);
|
||||
}
|
||||
}
|
||||
return Merge;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.callMaterial;
|
||||
|
||||
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 cn.hutool.core.util.StrUtil;
|
||||
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.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.enums.WorkerOrderEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
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.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.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 刻字机送料
|
||||
* @Date: 2023/4/3
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PlotterCallMaterialTask extends AbstractAcsTask {
|
||||
@Autowired
|
||||
private IPdmProduceWorkorderService workorderService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private WmsToAcsService wms;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject param, String status) {
|
||||
SchBaseTask task = taskService.getById(param.getString("task_id"));
|
||||
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
|
||||
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()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
// 完成
|
||||
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()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject param) {
|
||||
String start_point_code = param.getString("device_code");
|
||||
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("workorder_code", param.getString("workorder_code"))
|
||||
.eq("is_delete", false)
|
||||
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
|
||||
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
|
||||
//?刻字满料请求:可以存在多个任务?
|
||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
|
||||
.eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
|
||||
);
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
|
||||
}
|
||||
// 查找任务状态
|
||||
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_id", taskdtl_id);
|
||||
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
|
||||
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
|
||||
task.put("material_id", order.getMaterial_id());
|
||||
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
|
||||
task.put("point_code1", start_point_code);
|
||||
task.put("handle_class", this.getClass().getName());
|
||||
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
task.put("create_id", currentUserId);
|
||||
task.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("update_id", currentUserId);
|
||||
task.put("update_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("create_time", DateUtil.now());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("priority", "1");
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
|
||||
task.put("table_fk_id",order.getWorkorder_code());
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
taskService.save(schBaseTask);
|
||||
// 找终点
|
||||
try {
|
||||
pointConfirm(task);
|
||||
JSONArray data = new JSONArray();
|
||||
data.add(task);
|
||||
// 下发
|
||||
wms.issueTaskToAcs2(data);
|
||||
} catch (Exception ex) {
|
||||
log.error("刻字请求异常,error:{}",ex);
|
||||
schBaseTask.setRemark(ex.getMessage());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
schBaseTask.setUpdate_name("acs");
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
|
||||
taskService.save(schBaseTask);
|
||||
}
|
||||
return taskdtl_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 满料请求
|
||||
* 从刻字机满料缓存区中获取空位放入就行
|
||||
* @param taskObj: 任务对象
|
||||
*/
|
||||
@Override
|
||||
public void pointConfirm(JSONObject taskObj) {
|
||||
// 去刻字缓存区寻找空位
|
||||
List<Map<String, String>> points = pointService.queryVehicle(
|
||||
MapOf.of("is_used", "1",
|
||||
"lock_type", StatusEnum.LOCK_OFF.getCode(),
|
||||
"region_code", "A1_KZHC",
|
||||
"material_id", taskObj.getString("material_id")));
|
||||
if (ObjectUtil.isNotEmpty(points)) {
|
||||
Map<String, String> map = points.get(0);
|
||||
if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_ON.getCode())
|
||||
.eq("point_code",map.get("point_code")));
|
||||
// 设置点位
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("point_code2",map.get("point_code"));
|
||||
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
taskService.updateById(schBaseTask);
|
||||
} else {
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks) {
|
||||
ArrayList<SchBaseTask> Merge = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(tasks)){
|
||||
for (SchBaseTask task : tasks) {
|
||||
task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId());
|
||||
Merge.add(task);
|
||||
}
|
||||
}
|
||||
return Merge;
|
||||
}
|
||||
}
|
||||
@@ -1,202 +0,0 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.sendMaterial;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 刻字机送料
|
||||
* @Date: 2023/4/3
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PlotterCallMaterialTask extends AbstractAcsTask {
|
||||
private static final String OPT_NAME = "刻字机#";
|
||||
@Autowired
|
||||
private WmsToAcsService wms;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject task, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("任务已完成,不可取消!");
|
||||
}
|
||||
String pointCode2 = taskObj.getString("point_code2");
|
||||
JSONObject pointObj = null;
|
||||
if (ObjectUtil.isNotEmpty(pointCode2)) {
|
||||
pointObj = pointTab.query("point_code = '" + pointCode2 + "'").uniqueResult(0);
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
|
||||
// 执行中
|
||||
// 任务执行中
|
||||
taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
// 完成
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位并赋值
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode());
|
||||
pointObj.put("material_id", taskObj.getString("material_id"));
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
// todo: 是否需要记录库存
|
||||
}
|
||||
// 2任务完成
|
||||
taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
} else {
|
||||
/**
|
||||
* 取消任务
|
||||
* 1、点位恢复
|
||||
* 2、任务状态修改
|
||||
*/
|
||||
// 2点位恢复
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
}
|
||||
// 2任务取消
|
||||
taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject param) {
|
||||
/**
|
||||
* 1.刻字机缺料请求 or 定时任务查询刻字机工单
|
||||
* 2.生成刻字机任务
|
||||
* 3.根据工单物料生成半成品出库任务:自动下发叫料
|
||||
* 4.半成品出库任务完成之后:
|
||||
* 触发刻字机任务:
|
||||
* 1.查看当前所有刻字机工单:获取当前刻字机Math.min(缺料数,倒料可倒数量)
|
||||
* 2.待确认:类似深坑那样一次给多台设备,还是一个设备一个设备的给
|
||||
*/
|
||||
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
String start_point_code = param.getString("device_code");
|
||||
String workorder = param.getString("workorder_code");
|
||||
if(StrUtil.isEmpty(start_point_code)) {
|
||||
throw new BadRequestException("起点不能为空!");
|
||||
}
|
||||
// 判断当前点是否有未完成的任务
|
||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) {
|
||||
throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务");
|
||||
}
|
||||
if(StrUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不能为空!");
|
||||
}
|
||||
// 判断工单
|
||||
JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(workOrderObj)){
|
||||
throw new BadRequestException("下发工单不存在未完成工单:"+workorder);
|
||||
}
|
||||
// 查找任务状态
|
||||
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_id", taskdtl_id);
|
||||
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
|
||||
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20.getCode());
|
||||
task.put("material_id", workOrderObj.getString("material_id"));
|
||||
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
|
||||
task.put("point_code1", start_point_code);
|
||||
task.put("handle_class", this.getClass().getName());
|
||||
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
task.put("create_id", currentUserId);
|
||||
task.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("update_id", currentUserId);
|
||||
task.put("update_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("create_time", DateUtil.now());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("priority", "1");
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
|
||||
// 找终点
|
||||
try {
|
||||
pointConfirm(task);
|
||||
JSONArray data = new JSONArray();
|
||||
JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0);
|
||||
data.add(result);
|
||||
// 下发
|
||||
wms.issueTaskToAcs2(data);
|
||||
} catch (Exception ex) {
|
||||
// 未找到
|
||||
task.put("remark", ex.getMessage());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("task_status", StatusEnum.TASK_START_ERROR.getCode());
|
||||
taskTab.update(task);
|
||||
}
|
||||
return taskdtl_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 满料请求
|
||||
* 从刻字机满料缓存区中获取空位放入就行
|
||||
* @param taskObj: 任务对象
|
||||
*/
|
||||
@Override
|
||||
public void pointConfirm(JSONObject taskObj) {
|
||||
log.info(OPT_NAME+"fullMaterial param:{}",JSONObject.toJSONString(taskObj));
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
// 去刻字缓存区寻找空位
|
||||
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
|
||||
StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
|
||||
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
|
||||
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(point)) {
|
||||
// 找到位置
|
||||
// 点位上锁
|
||||
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
|
||||
pointTab.update(point);
|
||||
// 设置点位
|
||||
taskObj.put("point_code2", point.getString("point_code"));
|
||||
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else {
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,40 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.sendMaterial;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
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;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.enums.WorkerOrderEnum;
|
||||
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.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
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.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.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.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -27,167 +44,151 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Slf4j
|
||||
@Service
|
||||
public class PlotterSendMaterialTask extends AbstractAcsTask {
|
||||
private static final String OPT_NAME = "刻字机#";
|
||||
@Autowired
|
||||
private IPdmProduceWorkorderService workorderService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private WmsToAcsService wms;
|
||||
@Override
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTaskStatus(JSONObject task, String status) {
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
JSONObject taskObj = taskTab.query("task_id = '" + task.getString("task_id") + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"AND task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("任务已完成,不可取消!");
|
||||
}
|
||||
String pointCode2 = taskObj.getString("point_code2");
|
||||
JSONObject pointObj = null;
|
||||
if (ObjectUtil.isNotEmpty(pointCode2)) {
|
||||
pointObj = pointTab.query("point_code = '" + pointCode2 + "'").uniqueResult(0);
|
||||
}
|
||||
public void updateTaskStatus(JSONObject param, String status) {
|
||||
SchBaseTask task = taskService.getById(param.getString("task_id"));
|
||||
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
|
||||
// 执行中
|
||||
// 任务执行中
|
||||
taskObj.put("task_status", StatusEnum.TASK_RUNNING.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
} else if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
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()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
// 完成
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位并赋值
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode());
|
||||
pointObj.put("material_id", taskObj.getString("material_id"));
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
// todo: 是否需要记录库存
|
||||
}
|
||||
// 2任务完成
|
||||
taskObj.put("task_status", StatusEnum.TASK_FINISH.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
} else {
|
||||
/**
|
||||
* 取消任务
|
||||
* 1、点位恢复
|
||||
* 2、任务状态修改
|
||||
*/
|
||||
// 2点位恢复
|
||||
if (ObjectUtil.isNotEmpty(pointObj)) {
|
||||
// 释放点位
|
||||
pointObj.put("lock_type", StatusEnum.LOCK_OFF.getCode());
|
||||
pointObj.put("update_time", DateUtil.now());
|
||||
pointTab.update(pointObj);
|
||||
}
|
||||
// 2任务取消
|
||||
taskObj.put("task_status", StatusEnum.TASK_CANNEL.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskObj.put("finished_type", ObjectUtil.isNotEmpty(task.getString("finished_type"))?
|
||||
task.getString("finished_type"):AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
|
||||
taskTab.update(taskObj);
|
||||
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()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
|
||||
// 完成
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_OFF.getCode())
|
||||
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String createTask(JSONObject param) {
|
||||
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
String start_point_code = param.getString("device_code");
|
||||
String workorder = param.getString("workorder_code");
|
||||
if(StrUtil.isEmpty(start_point_code)) {
|
||||
throw new BadRequestException("起点不能为空!");
|
||||
}
|
||||
// 判断当前点是否有未完成的任务
|
||||
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
|
||||
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(taskObj)) {
|
||||
throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务");
|
||||
}
|
||||
if(StrUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不能为空!");
|
||||
}
|
||||
// 判断工单
|
||||
JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0);
|
||||
if (ObjectUtil.isEmpty(workOrderObj)){
|
||||
throw new BadRequestException("下发工单不存在未完成工单:"+workorder);
|
||||
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("workorder_code", param.getString("workorder_code"))
|
||||
.eq("is_delete", false)
|
||||
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
|
||||
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
|
||||
//?刻字满料请求:可以存在多个任务?
|
||||
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
|
||||
.eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
|
||||
);
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
|
||||
}
|
||||
// 查找任务状态
|
||||
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
|
||||
String taskdtl_id = IdUtil.getStringId();
|
||||
JSONObject task = new JSONObject();
|
||||
task.put("task_id", taskdtl_id);
|
||||
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
|
||||
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20.getCode());
|
||||
task.put("material_id", workOrderObj.getString("material_id"));
|
||||
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
|
||||
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
|
||||
task.put("material_id", order.getMaterial_id());
|
||||
task.put("task_status", TaskStatusEnum.CREATED.getCode());
|
||||
task.put("point_code1", start_point_code);
|
||||
task.put("handle_class", this.getClass().getName());
|
||||
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
task.put("create_id", currentUserId);
|
||||
task.put("create_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("update_id", currentUserId);
|
||||
task.put("update_name", SecurityUtils.getCurrentNickName());
|
||||
task.put("create_time", DateUtil.now());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("priority", "1");
|
||||
task.put("finished_type", "1");
|
||||
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
|
||||
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
|
||||
task.put("table_fk_id",order.getWorkorder_code());
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
taskService.save(schBaseTask);
|
||||
// 找终点
|
||||
try {
|
||||
pointConfirm(task);
|
||||
JSONArray data = new JSONArray();
|
||||
JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0);
|
||||
data.add(result);
|
||||
data.add(task);
|
||||
// 下发
|
||||
wms.issueTaskToAcs2(data);
|
||||
} catch (Exception ex) {
|
||||
// 未找到
|
||||
task.put("remark", ex.getMessage());
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("task_status", StatusEnum.TASK_START_ERROR.getCode());
|
||||
taskTab.update(task);
|
||||
log.error("刻字满料请求异常,error:{}",ex);
|
||||
schBaseTask.setRemark(ex.getMessage());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
schBaseTask.setUpdate_name("acs");
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
|
||||
taskService.save(schBaseTask);
|
||||
}
|
||||
return taskdtl_id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_id) {
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 满料请求
|
||||
* 从刻字机满料缓存区中获取空位放入就行
|
||||
* @param taskObj: 任务对象
|
||||
*/
|
||||
@Override
|
||||
public void pointConfirm(JSONObject taskObj) {
|
||||
log.info(OPT_NAME+"fullMaterial param:{}",JSONObject.toJSONString(taskObj));
|
||||
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
|
||||
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
|
||||
public void pointConfirm(JSONObject task) {
|
||||
// 去刻字缓存区寻找空位
|
||||
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
|
||||
StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
|
||||
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
|
||||
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
|
||||
if (ObjectUtil.isNotEmpty(point)) {
|
||||
List<SchBasePoint> list = pointService.list(new QueryWrapper<SchBasePoint>().isNull("vehicle_code")
|
||||
.eq("is_used", "1")
|
||||
.eq("lock_type", StatusEnum.LOCK_OFF.getCode()));
|
||||
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
// 找到位置
|
||||
// 点位上锁
|
||||
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
|
||||
pointTab.update(point);
|
||||
SchBasePoint point = list.get(0);
|
||||
point.setLock_type(StatusEnum.LOCK_ON.getCode());
|
||||
pointService.updateById(point);
|
||||
// 设置点位
|
||||
taskObj.put("point_code2", point.getString("point_code"));
|
||||
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
|
||||
taskObj.put("update_time", DateUtil.now());
|
||||
taskTab.update(taskObj);
|
||||
task.put("update_time", DateUtil.now());
|
||||
task.put("point_code2",point.getPoint_code());
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
taskService.updateById(schBaseTask);
|
||||
} else {
|
||||
throw new BadRequestException("刻字缓存区没有可用货位.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks) {
|
||||
ArrayList<SchBaseTask> Merge = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(tasks)){
|
||||
for (SchBaseTask task : tasks) {
|
||||
task.setTask_group_id(IdUtil.getStringId());
|
||||
Merge.add(task);
|
||||
}
|
||||
}
|
||||
return Merge;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,11 +31,12 @@
|
||||
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
|
||||
left JOIN pdm_produce_workorder on pdm_bi_device.device_code = pdm_produce_workorder.device_code and pdm_produce_workorder.workorder_status in ('3','4')
|
||||
where
|
||||
sch_base_point.point_type = '4' and pdm_bi_device.is_used = true
|
||||
and workprocedure_id = #{workprocedure_id}
|
||||
and pdm_bi_device.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 or pdm_bi_device.material_id = '')
|
||||
and pdm_produce_workorder.material_id = #{material_id}
|
||||
</if>
|
||||
GROUP BY pdm_bi_device.device_code
|
||||
HAVING currentQty > #{qty}
|
||||
|
||||
@@ -581,9 +581,12 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
JSONArray array = new JSONArray();
|
||||
|
||||
JSONObject order = packageForm(param);
|
||||
//开工时更新设备生产的物料规格
|
||||
// deviceService.update(new UpdateWrapper<PdmBiDevice>()
|
||||
// .set("spec",order.getString("material_spec"))
|
||||
// .eq("device_code",order.getString("device_code")));
|
||||
array.add(order);
|
||||
//下发acs
|
||||
|
||||
PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
|
||||
workOrder.setWorkorder_status(WorkerOrderEnum.PRODUCTING.getCode());
|
||||
workOrder.setRealproducestart_date(DateUtil.now());
|
||||
|
||||
@@ -57,12 +57,12 @@ public class SchCachelineVehilematerial implements Serializable {
|
||||
/**
|
||||
* 工序编号
|
||||
*/
|
||||
private String workprocedure_code;
|
||||
private String workprocedure_id;
|
||||
|
||||
/**
|
||||
* 工序名称
|
||||
*/
|
||||
private String workprocedure_name;
|
||||
private String workprocedure_code;
|
||||
|
||||
/**
|
||||
* 物料标识
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
scp.vehicle_code,
|
||||
scp.layer_num,
|
||||
scp.positionorder_no as seat_order_num,
|
||||
sch_cacheline_vehilematerial.workprocedure_code,
|
||||
sch_cacheline_vehilematerial.workprocedure_name,
|
||||
sch_cacheline_vehilematerial.workprocedure_id,
|
||||
wp.workprocedure_code,
|
||||
wp.workprocedure_name,
|
||||
sch_cacheline_vehilematerial.material_id as material_uuid,
|
||||
mb.material_code,
|
||||
mb.material_name,
|
||||
@@ -23,6 +24,7 @@
|
||||
sch_cacheline_position scp
|
||||
LEFT JOIN sch_cacheline_vehilematerial ON scp.vehicle_code = sch_cacheline_vehilematerial.vehicle_code
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = sch_cacheline_vehilematerial.material_id
|
||||
LEFT JOIN pdm_bi_workprocedure wp ON wp.workprocedure_id = sch_cacheline_vehilematerial.workprocedure_id
|
||||
<where>
|
||||
scp.cacheline_code = #{map.cacheline_code}
|
||||
<if test="map.product_area != null and map.product_area != ''">
|
||||
|
||||
@@ -37,5 +37,8 @@
|
||||
<if test="material_id != null and material_id != ''">
|
||||
and v.material_id = #{material_id}
|
||||
</if>
|
||||
<if test="workprocedure_id != null and workprocedure_id != ''">
|
||||
and v.workprocedure_id = #{workprocedure_id}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -21,8 +21,11 @@ import java.util.Map;
|
||||
public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
|
||||
Object queryAll(Map whereJson, PageQuery page);
|
||||
|
||||
Object queryVehicle(Map whereJson, PageQuery page);
|
||||
|
||||
List<Map<String,String>> queryVehicle(Map query);
|
||||
|
||||
/**
|
||||
*
|
||||
* 获取点位
|
||||
|
||||
@@ -154,6 +154,7 @@
|
||||
region.region_name,
|
||||
ma.material_name,
|
||||
ma.material_code,
|
||||
vehicle.material_id,
|
||||
ma.material_spec
|
||||
FROM
|
||||
sch_base_point point
|
||||
@@ -166,6 +167,13 @@
|
||||
<if test="region_code != null and region_code != ''">
|
||||
and point.region_code = #{region_code}
|
||||
</if>
|
||||
<if test="material_id != null and material_id != ''">
|
||||
and vehicle.material_id = #{material_id}
|
||||
</if>
|
||||
<if test="material_null != null and material_null != ''">
|
||||
point.vehicle_code is not null and point.vehicle_code <![CDATA[<>]]> ''
|
||||
and (vehicle.material_id is null or vehicle.material_id = '')
|
||||
</if>
|
||||
<if test="point_type != null and point_type != ''">
|
||||
and point.point_type = #{point_type}
|
||||
</if>
|
||||
|
||||
@@ -89,7 +89,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
public Object queryVehicle(Map whereJson, PageQuery pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
|
||||
page.setOrderBy("point_code asc");
|
||||
List<Map> list = schBasePointMapper.queryVehicle(whereJson);
|
||||
List<Map<String, String>> list = this.queryVehicle(whereJson);
|
||||
list.forEach(a->{
|
||||
a.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode());
|
||||
if (a.get("vehicle_code")!=null){
|
||||
@@ -104,6 +104,11 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
return build;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String,String>> queryVehicle(Map query) {
|
||||
return schBasePointMapper.queryVehicle(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object selectPoint(Map query, PageQuery pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage()+1, pageQuery.getSize());
|
||||
|
||||
@@ -238,9 +238,15 @@ public class SchBaseTask implements Serializable {
|
||||
*/
|
||||
private Date update_time;
|
||||
/**
|
||||
* 修改时间
|
||||
* 料箱列表
|
||||
*/
|
||||
private String barcodeArr;
|
||||
|
||||
|
||||
/**
|
||||
* 料箱数量列表
|
||||
*/
|
||||
private String qtyArr;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ public enum IOSEnum {
|
||||
IO_TYPE(MapOf.of("入库", "0", "出库", "1")),
|
||||
//是否
|
||||
IS_USED(MapOf.of("是", "1", "否", "0")),
|
||||
//仓库编码
|
||||
STOR_CODE(MapOf.of("原材料仓", "1528627964823080960", "半成品仓库", "15286279952695336962","成品库", "1528627995269533696")),
|
||||
//托盘超限类型
|
||||
VEHICLE_OVER_TYPE(MapOf.of("标准", "00", "横向超", "01","纵向超","02")),
|
||||
//单据类型
|
||||
@@ -31,7 +33,7 @@ public enum IOSEnum {
|
||||
//订单/发货单 状态
|
||||
ORDER_STATUS(MapOf.of("生成", "10", "提交", "20", "发货中", "30", "确认", "99")),
|
||||
//锁定类型
|
||||
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","其他锁","99")),
|
||||
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","拼盘锁","5","其他锁","99")),
|
||||
;
|
||||
private Map<String, String> code;
|
||||
|
||||
|
||||
@@ -36,6 +36,10 @@ public enum TASKEnum implements FunctionStrategy<String, JSONObject> {
|
||||
IStIvtShutframeinvBcpService bean = SpringContextHolder.getBean(IStIvtShutframeinvBcpService.class);
|
||||
bean.taskOperate(form);
|
||||
}),
|
||||
SHUT_TASK_IN(type -> AcsTaskEnum.TASK_STRUCT_SHUT_IN.getCode().equals(type), form -> {
|
||||
IStIvtShutframeinvBcpService bean = SpringContextHolder.getBean(IStIvtShutframeinvBcpService.class);
|
||||
bean.taskOperate2(form);
|
||||
}),
|
||||
CP_IN_TASK(type -> AcsTaskEnum.TASK_STRUCT_CP_IN.getCode().equals(type), form -> {
|
||||
IStIvtIostorinvCpService bean = SpringContextHolder.getBean(IStIvtIostorinvCpService.class);
|
||||
bean.taskOperate(form);
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.nl.wms.storage_manage.semimanage.controller.pda;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.wms.storage_manage.semimanage.service.pda.PdaStBcpInService;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 一体机半成品入库 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2023-06-27
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/pda/bcp")
|
||||
public class PdaStBcpInController {
|
||||
|
||||
@Autowired
|
||||
private PdaStBcpInService pdaStBcpInService;
|
||||
|
||||
@PostMapping("/getBcpStor")
|
||||
@Log("查询半成品仓库")
|
||||
@ApiOperation("查询半成品仓库")
|
||||
public ResponseEntity<Object> getBcpIvtInfo() {
|
||||
return new ResponseEntity<>(pdaStBcpInService.getBcpIvtInfo(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getBillType")
|
||||
@Log("查询单据类型")
|
||||
@ApiOperation("查询单据类型")
|
||||
public ResponseEntity<Object> getBillType() {
|
||||
return new ResponseEntity<>(pdaStBcpInService.getBillType(), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.storage_manage.semimanage.controller.shutFrame;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.nl.common.anno.Log;
|
||||
@@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("api/shutframe")
|
||||
@SaIgnore
|
||||
public class StIvtShutframeinvBcpController {
|
||||
|
||||
@Autowired
|
||||
@@ -66,6 +68,13 @@ public class StIvtShutframeinvBcpController {
|
||||
return new ResponseEntity<>(shutframeinvBcpService.getBillDtl(jo), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getBillDtlView")
|
||||
@Log("查询拼盘详情")
|
||||
@ApiOperation("查询拼盘详情")
|
||||
public ResponseEntity<Object> getBillDtlView(@RequestBody JSONObject jo) {
|
||||
return new ResponseEntity<>(shutframeinvBcpService.getBillDtlView(jo), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/issueTask")
|
||||
@Log("任务下发")
|
||||
@ApiOperation("任务下发")
|
||||
@@ -75,11 +84,20 @@ public class StIvtShutframeinvBcpController {
|
||||
}
|
||||
|
||||
@PostMapping("/confirm")
|
||||
@Log("拼盘确认")
|
||||
@ApiOperation("拼盘确认")
|
||||
@Log("强制确认")
|
||||
@ApiOperation("强制确认")
|
||||
public ResponseEntity<Object> confirm(@RequestBody JSONObject jo) {
|
||||
shutframeinvBcpService.confirm(jo);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/confirmOne")
|
||||
@Log("一体机拼盘确认")
|
||||
@ApiOperation("一体机拼盘确认")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> confirmOne(@RequestBody JSONObject jo) {
|
||||
shutframeinvBcpService.confirmOne(jo);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
package org.nl.wms.storage_manage.semimanage.service.check.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@@ -22,13 +25,18 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
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.point.dao.mapper.SchBasePointMapper;
|
||||
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.CHECKEnum;
|
||||
import org.nl.wms.storage_manage.semimanage.MLEnum;
|
||||
import org.nl.wms.storage_manage.semimanage.service.check.IStIvtCheckdtlBcpService;
|
||||
@@ -41,6 +49,7 @@ import org.nl.wms.storage_manage.semimanage.service.check.dto.CheckQuery;
|
||||
import org.nl.wms.storage_manage.semimanage.service.moveOrLess.IStIvtMoreorlessmstBcpService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashMap;
|
||||
@@ -75,6 +84,8 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
private SchBasePointMapper pointMapper;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
@Override
|
||||
public Object pageQuery(CheckQuery query, PageQuery page) {
|
||||
@@ -88,6 +99,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void create(JSONObject form) {
|
||||
JSONArray rows = form.getJSONArray("tableData");
|
||||
if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空");
|
||||
@@ -107,6 +119,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(JSONObject form) {
|
||||
Assert.notNull(new Object[]{form, form.get("check_id")}, "请求参数不能为空");
|
||||
StIvtCheckmstBcp mst = form.toJavaObject(StIvtCheckmstBcp.class);
|
||||
@@ -119,6 +132,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void saveCheck(JSONObject whereJson) {
|
||||
JSONObject form = whereJson.getJSONObject("row");
|
||||
JSONArray rows = whereJson.getJSONArray("rows");
|
||||
@@ -168,6 +182,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirm(JSONObject whereJson) {
|
||||
|
||||
JSONObject form = whereJson.getJSONObject("row");
|
||||
@@ -236,6 +251,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void process0(JSONObject whereJson) {
|
||||
JSONObject form = whereJson.getJSONObject("form");
|
||||
JSONObject row = whereJson.getJSONObject("row");
|
||||
@@ -270,6 +286,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void issueTask(JSONObject form) {
|
||||
Assert.notNull(new Object[]{form, form.get("checkdtl_id")}, "请求参数不能为空");
|
||||
|
||||
@@ -287,16 +304,26 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
|
||||
StIvtStructattr struct = structattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_id", dtl.getStruct_id()));
|
||||
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
PointEvent event = PointEvent.builder()
|
||||
.type(AcsTaskEnum.TASK_STRUCT_SHUT.getCode())
|
||||
.acs_task_type("7")
|
||||
.type(AcsTaskEnum.TASK_STRUCT_CHECK.getCode())
|
||||
.point_code1(struct.getStruct_code())
|
||||
.point_code2((String) maps.get(0).get("point_code"))
|
||||
.vehicle_code(dtl.getStoragevehicle_code())
|
||||
.task_group_id(task_group_id)
|
||||
.product_area(mst.getWorkshop_id())
|
||||
.build();
|
||||
|
||||
BussEventMulticaster.Publish(event);
|
||||
|
||||
// 下发任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, task_group_id)
|
||||
);
|
||||
|
||||
taskList.forEach(this::sendTask);
|
||||
|
||||
checkdtlBcpService.update(new UpdateWrapper<StIvtCheckdtlBcp>()
|
||||
.set("is_down", "1")
|
||||
.set("checkpoint_id", (String) maps.get(0).get("point_code"))
|
||||
@@ -309,6 +336,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void taskOperate(JSONObject form) {
|
||||
String task_id = form.getString("task_id");
|
||||
String status = form.getString("status");
|
||||
@@ -351,6 +379,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void process1(JSONObject whereJson) {
|
||||
JSONObject form = whereJson.getJSONObject("form");
|
||||
JSONObject row = whereJson.getJSONObject("row");
|
||||
@@ -419,6 +448,7 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(Long[] ids) {
|
||||
for (Long id : ids) {
|
||||
StIvtCheckmstBcp dao = this.getOne(new QueryWrapper<StIvtCheckmstBcp>().eq("check_id", id));
|
||||
@@ -434,6 +464,23 @@ public class StIvtCheckmstBcpServiceImpl extends ServiceImpl<StIvtCheckmstBcpMap
|
||||
}
|
||||
}
|
||||
|
||||
private void sendTask(SchBaseTask taskDao) {
|
||||
JSONArray param = new JSONArray();
|
||||
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
|
||||
// 1.下发任务
|
||||
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
|
||||
Map<String, Object> result = bean.issueTaskToAcs3(param);
|
||||
|
||||
// 反馈失败报错
|
||||
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
|
||||
throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message"));
|
||||
}
|
||||
|
||||
// 2.更新任务状态
|
||||
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
|
||||
taskService.updateById(taskDao);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private StIvtCheckmstBcp packageMstForm(StIvtCheckmstBcp checkmstYl, JSONObject whereJson) {
|
||||
JSONArray rows = whereJson.getJSONArray("tableData");
|
||||
|
||||
@@ -135,6 +135,14 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
|
||||
mst.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
mst.setCreate_time(DateUtil.now());
|
||||
this.save(mst);
|
||||
|
||||
// 更新载具扩展属性
|
||||
iMdPbStoragevehicleextService.update(
|
||||
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
|
||||
.set(MdPbStoragevehicleext::getMaterial_id, mst.getMaterial_id())
|
||||
.set(MdPbStoragevehicleext::getStorage_qty, mst.getPlan_qty())
|
||||
.eq(MdPbStoragevehicleext::getStoragevehicle_code, mst.getStoragevehicle_code())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.nl.wms.storage_manage.semimanage.service.pda;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 一体机半成品入库 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2023-06-27
|
||||
*/
|
||||
public interface PdaStBcpInService {
|
||||
|
||||
/*
|
||||
查询半成品仓库
|
||||
*/
|
||||
JSONObject getBcpIvtInfo();
|
||||
|
||||
/*
|
||||
查询单据类型
|
||||
*/
|
||||
JSONObject getBillType();
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package org.nl.wms.storage_manage.semimanage.service.pda.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
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.storage_manage.CHANGE_BILL_TYPE_ENUM;
|
||||
import org.nl.wms.storage_manage.IOSEnum;
|
||||
import org.nl.wms.storage_manage.semimanage.service.pda.PdaStBcpInService;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.IStIvtStructivtBcpService;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.mapper.StIvtStructivtBcpMapper;
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dto.StructIvtBcpQuery;
|
||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 一体机半成品入库 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2023-06-27
|
||||
*/
|
||||
@Service
|
||||
public class PdaStBcpInServiceImpl implements PdaStBcpInService {
|
||||
|
||||
@Autowired
|
||||
private IStIvtStructattrService structattrService; // 仓位服务
|
||||
|
||||
@Autowired
|
||||
private IStIvtBsrealstorattrService storattrService; // 实物属性服务
|
||||
|
||||
@Autowired
|
||||
private ISysDictService iSysDictService; // 字典服务
|
||||
|
||||
@Override
|
||||
public JSONObject getBcpIvtInfo() {
|
||||
List<StIvtBsrealstorattr> storList = storattrService.list(
|
||||
new QueryWrapper<StIvtBsrealstorattr>().lambda()
|
||||
.eq(StIvtBsrealstorattr::getIs_used, IOSEnum.IS_USED.code("是"))
|
||||
.eq(StIvtBsrealstorattr::getStor_id, IOSEnum.STOR_CODE.code("半成品仓库"))
|
||||
);
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("data", JSONArray.parseArray(JSON.toJSONString(storList)));
|
||||
result.put("message", "查询成功");
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getBillType() {
|
||||
List<Dict> dictList = iSysDictService.getDictByName("ST_INV_BCP_IN_TYPE");
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("data", JSONArray.parseArray(JSON.toJSONString(dictList)));
|
||||
result.put("message", "查询成功");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -34,11 +34,17 @@ public interface IStIvtShutframeinvBcpService extends IService<StIvtShutframeinv
|
||||
|
||||
List<Map> getBillDtl(JSONObject jo);
|
||||
|
||||
List<Map> getBillDtlView(JSONObject jo);
|
||||
|
||||
void confirm(JSONObject jo);
|
||||
|
||||
void issueTask(JSONObject jo);
|
||||
|
||||
void taskOperate(JSONObject jo);
|
||||
|
||||
void taskOperate2(JSONObject jo);
|
||||
|
||||
void confirmOne(JSONObject jo);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.storage_manage.semimanage.service.shutFrame.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
@@ -25,6 +26,7 @@ public class StIvtShutframedtlBcp implements Serializable {
|
||||
/**
|
||||
* 拆拼单明细标识
|
||||
*/
|
||||
@TableId
|
||||
private String shutframeinvdtl_id;
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,5 +33,6 @@
|
||||
and (mb.material_name = #{query.material_search} OR mb.material_code = #{query.material_search})
|
||||
</if>
|
||||
</where>
|
||||
order by mst.create_time DESC
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -2,15 +2,18 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
|
||||
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
|
||||
import org.nl.wms.product_manage.service.teamcorrPerson.dao.PdmBiTeamcorrperson;
|
||||
import org.nl.wms.storage_manage.IOSEnum;
|
||||
import org.nl.wms.storage_manage.SHUTEnum;
|
||||
import org.nl.wms.storage_manage.rawmanage.service.iostorInv.dao.StIvtIostorinvdtlYl;
|
||||
@@ -21,7 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -39,6 +45,11 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl<StIvtShutframed
|
||||
|
||||
@Override
|
||||
public int create(JSONArray rows, String shutframeinv_id) {
|
||||
// 根据数量排序 默认由大到小
|
||||
List<Object> list = rows.stream()
|
||||
.sorted(Comparator.comparing(row -> ((JSONObject) row).getDoubleValue("canuse_qty")).reversed()).collect(Collectors.toList());
|
||||
rows = JSONArray.parseArray(JSON.toJSONString(list));
|
||||
|
||||
StIvtStructattr first_struct = null;
|
||||
StIvtStructattr last_struct = null;
|
||||
int total_qty = 1;
|
||||
@@ -47,11 +58,13 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl<StIvtShutframed
|
||||
// 先删除在插入
|
||||
this.remove(new QueryWrapper<StIvtShutframedtlBcp>().eq("shutframeinv_id", shutframeinv_id));
|
||||
LinkedList<String> struct_list = new LinkedList<>();
|
||||
double qty = 0;
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
JSONObject row = rows.getJSONObject(i);
|
||||
if (ObjectUtil.isEmpty(struct_list)) {
|
||||
struct_list.addFirst(row.getString("struct_code"));
|
||||
first_struct = structattrService.getOne(new QueryWrapper<StIvtStructattr>().eq("struct_code", row.getString("struct_code")));
|
||||
qty = row.getDoubleValue("canuse_qty");
|
||||
continue;
|
||||
} else {
|
||||
if (!struct_list.contains(row.getString("struct_code"))) {
|
||||
@@ -77,12 +90,12 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl<StIvtShutframed
|
||||
dtl.setTurnout_struct_id(last_struct.getStruct_id());
|
||||
dtl.setTurnout_struct_code(last_struct.getStruct_code());
|
||||
dtl.setTurnout_struct_name(last_struct.getStruct_name());
|
||||
dtl.setStoragevehicle_code(row.getString("storagevehicle_code"));
|
||||
dtl.setStoragevehicle_code(last_struct.getStoragevehicle_code());
|
||||
dtl.setMaterial_id(row.getString("material_id"));
|
||||
dtl.setPcsn(row.getString("pcsn"));
|
||||
dtl.setQty_unit_id(row.getString("qty_unit_id"));
|
||||
dtl.setQty_unit_name(row.getString("qty_unit_name"));
|
||||
dtl.setQty(row.getBigDecimal("canuse_qty"));
|
||||
dtl.setQty(BigDecimal.valueOf(qty));
|
||||
dtl.setFact_qty(row.getBigDecimal("canuse_qty"));
|
||||
dtl.setUnit_weight(row.getBigDecimal("unit_weight"));
|
||||
dtl.setTurnin_sect_id(first_struct.getSect_id());
|
||||
@@ -91,11 +104,26 @@ public class StIvtShutframedtlBcpServiceImpl extends ServiceImpl<StIvtShutframed
|
||||
dtl.setTurnin_struct_id(first_struct.getStruct_id());
|
||||
dtl.setTurnin_struct_code(first_struct.getStruct_code());
|
||||
dtl.setTurnin_struct_name(first_struct.getStruct_name());
|
||||
dtl.setStoragevehicle_code_in(first_struct.getStoragevehicle_code());
|
||||
dtl.setWork_status(SHUTEnum.WORK_STATUS.code("未生成"));
|
||||
dtl.setIs_issued(true);
|
||||
|
||||
this.save(dtl);
|
||||
total_qty++;
|
||||
|
||||
// 锁定仓位
|
||||
structattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("拼盘锁"))
|
||||
.eq(StIvtStructattr::getStruct_id, dtl.getTurnin_struct_id())
|
||||
);
|
||||
|
||||
structattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("拼盘锁"))
|
||||
.eq(StIvtStructattr::getStruct_id, dtl.getTurnout_struct_id())
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
return total_qty--;
|
||||
|
||||
@@ -2,8 +2,11 @@ package org.nl.wms.storage_manage.semimanage.service.shutFrame.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
@@ -24,8 +27,15 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
|
||||
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.product_manage.sch.service.TaskService;
|
||||
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
@@ -46,6 +56,7 @@ import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivt
|
||||
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.mapper.StIvtStructivtBcpMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
@@ -76,6 +87,10 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
private SchBasePointMapper pointMapper;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务
|
||||
@Autowired
|
||||
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
|
||||
|
||||
|
||||
@Override
|
||||
@@ -88,30 +103,21 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void taskOperate(JSONObject form) {
|
||||
String task_id = form.getString("task_id");
|
||||
String status = form.getString("status");
|
||||
|
||||
boolean all_finish = false;
|
||||
//根据任务号查询对应的任务组
|
||||
SchBaseTask task = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
|
||||
|
||||
String point_code = task.getPoint_code2();
|
||||
/* String point_code = task.getPoint_code2();
|
||||
String vehicle_code = task.getVehicle_code();
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, point_code)
|
||||
.set(SchBasePoint::getVehicle_code, vehicle_code));
|
||||
.set(SchBasePoint::getVehicle_code, vehicle_code));*/
|
||||
|
||||
|
||||
List<SchBaseTask> task_list = taskService.list(new QueryWrapper<SchBaseTask>()
|
||||
.eq("task_group_id", task.getTask_group_id())
|
||||
.ne("task_status", StatusEnum.TASK_FINISH)
|
||||
.eq("is_delete", false));
|
||||
|
||||
if (task_list.size() <= 0) {
|
||||
all_finish = true;
|
||||
}
|
||||
|
||||
List<StIvtShutframedtlBcp> list = shutframedtlBcpService.list(new QueryWrapper<StIvtShutframedtlBcp>().eq("task_id", task.getTask_group_id()));
|
||||
|
||||
StIvtShutframedtlBcp dtl = list.get(0);
|
||||
@@ -123,32 +129,170 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("移出中")));
|
||||
}
|
||||
if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出确认")) || work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) {
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("移回中")));
|
||||
|
||||
// 更新任务为执行中
|
||||
taskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())
|
||||
.eq(SchBaseTask::getTask_id, task_id)
|
||||
);
|
||||
|
||||
// 更新主表为执行中
|
||||
this.update(
|
||||
new UpdateWrapper<StIvtShutframeinvBcp>().lambda()
|
||||
.set(StIvtShutframeinvBcp::getBill_status, SHUTEnum.BILL_STATUS.code("执行中"))
|
||||
.eq(StIvtShutframeinvBcp::getShutframeinv_id, dtl.getShutframeinv_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode()) && all_finish) {
|
||||
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出中"))) {
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("移出确认")));
|
||||
}
|
||||
if (work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) {
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("完成")));
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("shutframeinv_id", dtl.getShutframeinv_id());
|
||||
this.confirm(jo);
|
||||
// 更新任务为完成
|
||||
taskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getTask_id, task_id)
|
||||
);
|
||||
|
||||
// 判断出库任务是否都为完成 都为完成才更新明细状态
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, task.getTask_group_id())
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
);
|
||||
|
||||
if (taskList.size() >= 2) {
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("移出确认")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void taskOperate2(JSONObject form) {
|
||||
String task_id = form.getString("task_id");
|
||||
String status = form.getString("status");
|
||||
|
||||
//根据任务号查询对应的任务组
|
||||
SchBaseTask task = taskService.getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
|
||||
|
||||
/* String point_code = task.getPoint_code2();
|
||||
String vehicle_code = task.getVehicle_code();
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, point_code)
|
||||
.set(SchBasePoint::getVehicle_code, vehicle_code));*/
|
||||
|
||||
|
||||
List<StIvtShutframedtlBcp> list = shutframedtlBcpService.list(new QueryWrapper<StIvtShutframedtlBcp>().eq("task_id", task.getTask_group_id()));
|
||||
|
||||
StIvtShutframedtlBcp dtl = list.get(0);
|
||||
|
||||
String work_status = dtl.getWork_status();
|
||||
|
||||
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
|
||||
if (work_status.equals(SHUTEnum.WORK_STATUS.code("移出确认")) || work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) {
|
||||
|
||||
// 更新任务为执行中
|
||||
taskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode())
|
||||
.eq(SchBaseTask::getTask_id, task_id)
|
||||
);
|
||||
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("移回中")));
|
||||
}
|
||||
}
|
||||
|
||||
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
|
||||
if (work_status.equals(SHUTEnum.WORK_STATUS.code("移回中"))) {
|
||||
// 更新任务为完成
|
||||
taskService.update(
|
||||
new UpdateWrapper<SchBaseTask>().lambda()
|
||||
.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getTask_id, task_id)
|
||||
);
|
||||
|
||||
// 判断出库任务是否都为完成 都为完成才更新明细状态
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, task.getTask_group_id())
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
);
|
||||
|
||||
if (taskList.size() >= 2) {
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>()
|
||||
.eq("task_id", task.getTask_group_id())
|
||||
.set("work_status", SHUTEnum.WORK_STATUS.code("完成")));
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("shutframeinv_id", dtl.getShutframeinv_id());
|
||||
this.confirm(jo);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirmOne(JSONObject jo) {
|
||||
StIvtShutframeinvBcp mstDao = this.getById(jo.getString("shutframeinv_id"));
|
||||
|
||||
// 1.找明细表
|
||||
List<StIvtShutframedtlBcp> dtlList = shutframedtlBcpService.list(
|
||||
new QueryWrapper<StIvtShutframedtlBcp>().lambda()
|
||||
.eq(StIvtShutframedtlBcp::getShutframeinv_id, jo.getString("shutframeinv_id"))
|
||||
);
|
||||
|
||||
// 2.找到移出时的两个完成的任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, dtlList.get(0).getTask_id())
|
||||
.eq(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
|
||||
);
|
||||
|
||||
if (taskList.size() != 2) throw new BadRequestException("移出任务异常,请检查");
|
||||
|
||||
// 3.创建回库任务
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
|
||||
for (SchBaseTask taskDao : taskList) {
|
||||
PointEvent event = PointEvent.builder()
|
||||
.type(AcsTaskEnum.TASK_STRUCT_SHUT_IN.getCode())
|
||||
.acs_task_type("7")
|
||||
.point_code1(taskDao.getPoint_code2())
|
||||
.point_code2(taskDao.getPoint_code1())
|
||||
.task_group_id(task_group_id)
|
||||
.vehicle_code(taskDao.getVehicle_code())
|
||||
.product_area(mstDao.getWorkshop_id())
|
||||
.build();
|
||||
BussEventMulticaster.Publish(event);
|
||||
}
|
||||
|
||||
// 4.更新明细任务id为此任务组 task_group_id
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>().lambda()
|
||||
.set(StIvtShutframedtlBcp::getTask_id, task_group_id)
|
||||
.eq(StIvtShutframedtlBcp::getShutframeinv_id, mstDao.getShutframeinv_id()));
|
||||
|
||||
// 5.下发任务
|
||||
List<SchBaseTask> taskListIn = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, task_group_id)
|
||||
);
|
||||
|
||||
taskListIn.forEach(this::sendTask);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void issueTask(JSONObject form) {
|
||||
Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空");
|
||||
|
||||
@@ -167,6 +311,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
String task_group_id = IdUtil.getStringId();
|
||||
PointEvent event = PointEvent.builder()
|
||||
.type(AcsTaskEnum.TASK_STRUCT_SHUT.getCode())
|
||||
.acs_task_type("7")
|
||||
.point_code1(list.get(0).getTurnin_struct_code())
|
||||
.point_code2((String) point_list.get(0).get("point_code"))
|
||||
.task_group_id(task_group_id)
|
||||
@@ -175,9 +320,11 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
.build();
|
||||
|
||||
PointEvent event2 = PointEvent.builder()
|
||||
.acs_task_type("7")
|
||||
.type(AcsTaskEnum.TASK_STRUCT_SHUT.getCode())
|
||||
.point_code1(list.get(0).getTurnout_struct_code())
|
||||
.point_code2((String) point_list.get(1).get("point_code"))
|
||||
.task_group_id(task_group_id)
|
||||
.vehicle_code(list.get((0)).getStoragevehicle_code())
|
||||
.product_area(mst.getWorkshop_id())
|
||||
.build();
|
||||
@@ -186,10 +333,41 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
|
||||
shutframedtlBcpService.update(new UpdateWrapper<StIvtShutframedtlBcp>().lambda()
|
||||
.set(StIvtShutframedtlBcp::getTask_id, task_group_id)
|
||||
.set(StIvtShutframedtlBcp::getWork_status, SHUTEnum.WORK_STATUS.code("生成"))
|
||||
.eq(StIvtShutframedtlBcp::getShutframeinv_id, mst.getShutframeinv_id()));
|
||||
|
||||
mst.setBill_status(SHUTEnum.BILL_STATUS.code("提交"));
|
||||
this.updateById(mst);
|
||||
|
||||
// 下发任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.eq(SchBaseTask::getTask_group_id, task_group_id)
|
||||
);
|
||||
|
||||
taskList.forEach(this::sendTask);
|
||||
|
||||
}
|
||||
|
||||
private void sendTask(SchBaseTask taskDao) {
|
||||
JSONArray param = new JSONArray();
|
||||
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
|
||||
// 1.下发任务
|
||||
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
|
||||
Map<String, Object> result = bean.issueTaskToAcs3(param);
|
||||
|
||||
// 反馈失败报错
|
||||
if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) {
|
||||
throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message"));
|
||||
}
|
||||
|
||||
// 2.更新任务状态
|
||||
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
|
||||
taskService.updateById(taskDao);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void confirm(JSONObject form) {
|
||||
Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空");
|
||||
|
||||
@@ -198,7 +376,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
String material_id = dtl.getMaterial_id();
|
||||
String turnin_struct_id = dtl.getTurnin_struct_id();
|
||||
String turnout_struct_id = dtl.getTurnout_struct_id();
|
||||
StIvtStructivtBcp in_ivt = structivtBcpService.getOne(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", turnin_struct_id).eq("material_id", material_id));
|
||||
StIvtStructivtBcp in_ivt = structivtBcpService.getOne(new QueryWrapper<StIvtStructivtBcp>().eq("struct_id", turnin_struct_id).eq("material_id", material_id));
|
||||
if (ObjectUtil.isEmpty(in_ivt)) {
|
||||
throw new BadRequestException("库存不能为空!");
|
||||
}
|
||||
@@ -208,6 +386,37 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
|
||||
dtl.setWork_status(SHUTEnum.WORK_STATUS.code("完成"));
|
||||
shutframedtlBcpService.updateById(dtl);
|
||||
|
||||
// 解锁仓位 -- 空载具
|
||||
iStIvtStructattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.set(StIvtStructattr::getIs_emptyvehicle, true)
|
||||
.eq(StIvtStructattr::getStruct_id, dtl.getTurnout_struct_id())
|
||||
);
|
||||
|
||||
// 解锁仓位 -- 有料
|
||||
iStIvtStructattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(StIvtStructattr::getStruct_id, dtl.getTurnin_struct_id())
|
||||
);
|
||||
|
||||
// 更新扩展属性 -- 空载具
|
||||
iMdPbStoragevehicleextService.update(
|
||||
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
|
||||
.set(MdPbStoragevehicleext::getMaterial_id, "")
|
||||
.set(MdPbStoragevehicleext::getStorage_qty, BigDecimal.valueOf(0))
|
||||
.eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code())
|
||||
);
|
||||
|
||||
// 更新扩展属性 -- 有料
|
||||
iMdPbStoragevehicleextService.update(
|
||||
new UpdateWrapper<MdPbStoragevehicleext>().lambda()
|
||||
.set(MdPbStoragevehicleext::getStorage_qty, in_ivt.getCanuse_qty())
|
||||
.eq(MdPbStoragevehicleext::getStoragevehicle_code, dtl.getStoragevehicle_code_in())
|
||||
);
|
||||
|
||||
});
|
||||
|
||||
StIvtShutframeinvBcp mst = this.getById(form.getString("shutframeinv_id"));
|
||||
@@ -215,8 +424,7 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
mst.setConfirm_optname(SecurityUtils.getCurrentNickName());
|
||||
mst.setConfirm_time(DateUtil.now());
|
||||
mst.setBill_status(SHUTEnum.BILL_STATUS.code("完成"));
|
||||
|
||||
|
||||
this.updateById(mst);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -229,16 +437,40 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map> getBillDtlView(JSONObject jo) {
|
||||
return bcpMapper.getBillDtlView(MapOf.of("shutframeinv_id", jo.getString("shutframeinv_id")));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(Long[] ids) {
|
||||
for (Long id : ids) {
|
||||
StIvtShutframeinvBcp dao = this.getOne(new QueryWrapper<StIvtShutframeinvBcp>().eq("shutframeinv_id", id));
|
||||
dao.setIs_delete(true);
|
||||
|
||||
this.updateById(dao);
|
||||
|
||||
List<StIvtShutframedtlBcp> list = shutframedtlBcpService.list(
|
||||
new QueryWrapper<StIvtShutframedtlBcp>().lambda()
|
||||
.eq(StIvtShutframedtlBcp::getShutframeinv_id, dao.getShutframeinv_id())
|
||||
);
|
||||
|
||||
// 解锁货位
|
||||
iStIvtStructattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(StIvtStructattr::getStruct_id, list.get(0).getTurnin_struct_id())
|
||||
);
|
||||
|
||||
iStIvtStructattrService.update(
|
||||
new UpdateWrapper<StIvtStructattr>().lambda()
|
||||
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
.eq(StIvtStructattr::getStruct_id, list.get(0).getTurnout_struct_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(JSONObject form) {
|
||||
Assert.notNull(new Object[]{form, form.get("shutframeinv_id")}, "请求参数不能为空");
|
||||
StIvtShutframeinvBcp mst = form.toJavaObject(StIvtShutframeinvBcp.class);
|
||||
@@ -256,8 +488,10 @@ public class StIvtShutframeinvBcpServiceImpl extends ServiceImpl<StIvtShutframei
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void create(JSONObject form) {
|
||||
JSONArray rows = form.getJSONArray("tableData");
|
||||
|
||||
if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空");
|
||||
|
||||
// 调用主表 插入/更新方法
|
||||
|
||||
@@ -28,6 +28,8 @@ public interface StIvtStructivtBcpMapper extends BaseMapper<StIvtStructivtBcp> {
|
||||
|
||||
List<Map> getStructIvtInfo(@Param("map") Map map);
|
||||
|
||||
List<Map> getBillDtlView(@Param("map") Map map);
|
||||
|
||||
List<Map> packageQuery(@Param("query") StructIvtBcpQuery query);
|
||||
|
||||
}
|
||||
|
||||
@@ -112,6 +112,25 @@
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="getBillDtlView" resultType="java.util.Map">
|
||||
SELECT
|
||||
ivt.*,
|
||||
mb.material_code,
|
||||
mb.material_name,
|
||||
mb.material_spec,
|
||||
mu.unit_name AS qty_unit_name
|
||||
FROM
|
||||
st_ivt_shutframedtl_bcp ivt
|
||||
LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id
|
||||
LEFT JOIN md_pb_measureunit mu ON mu.measure_unit_id = ivt.qty_unit_id
|
||||
<where>
|
||||
1 = 1
|
||||
<if test="map.shutframeinv_id != null and map.shutframeinv_id != ''">
|
||||
and #{map.shutframeinv_id} = ivt.shutframeinv_id
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="packageQuery" resultType="java.util.Map">
|
||||
SELECT
|
||||
ivt.*,
|
||||
|
||||
@@ -23,11 +23,11 @@ spring:
|
||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes_test}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.5}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
username: ${DB_USER:root}
|
||||
# password: ${DB_PWD:123456}
|
||||
password: ${DB_PWD:123456}
|
||||
password: ${DB_PWD:942464Yy}
|
||||
|
||||
# 初始连接数
|
||||
initial-size: 5
|
||||
|
||||
Reference in New Issue
Block a user