rev:刻字满料请求/空框请求

This commit is contained in:
zhangzhiqiang
2023-06-27 08:42:41 +08:00
parent a92101cea6
commit 08608e45d8
30 changed files with 551 additions and 475 deletions

View File

@@ -68,8 +68,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", "手动完成任务"),

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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")
));

View File

@@ -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");

View File

@@ -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);

View File

@@ -35,6 +35,10 @@ public class MdPbStoragevehicleext implements Serializable {
*/
private String storagevehicle_code;
/**
* 单据号
*/
private String sale_id;
/**
* 物料标识

View File

@@ -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", "");

View File

@@ -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);
}
}

View File

@@ -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));

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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("刻字缓存区没有可用货位.");
}
}
}

View File

@@ -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;
}
}

View File

@@ -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}

View File

@@ -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());

View File

@@ -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;
/**
* 物料标识

View File

@@ -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 != ''">

View File

@@ -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>

View File

@@ -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);
/**
*
* 获取点位

View File

@@ -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>

View File

@@ -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());

View File

@@ -238,9 +238,15 @@ public class SchBaseTask implements Serializable {
*/
private Date update_time;
/**
* 修改时间
* 料箱列表
*/
private String barcodeArr;
/**
* 料箱数量列表
*/
private String qtyArr;
}

View File

@@ -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