diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java index d6335f9..a76a280 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -76,4 +76,13 @@ public interface NDCAgvService { * @return */ public boolean createChargingTaskToNDC(String carno); + + + /** + * 自动充电下发充电任务 + * + * @param carno + * @return + */ + public void charge(String carno); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index b4bfc6a..3abd79c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.acs.agv.server.impl; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,11 +20,15 @@ import org.nl.acs.opc.DeviceAppService; import org.nl.acs.opc.DeviceAppServiceImpl; import org.nl.common.utils.CodeUtil; import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.param.ISysParamService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -38,7 +43,7 @@ public class NDCAgvServiceImpl implements NDCAgvService { private final DeviceAppService deviceAppService; private final ISysParamService paramService; private final AcsToWmsService acsToWmsService; - + private final ISysDictService dictService; private final DeviceExecuteLogService logServer; Map AGVDeviceStatus = new HashMap(); @@ -179,12 +184,12 @@ public class NDCAgvServiceImpl implements NDCAgvService { (byte) typehigh, (byte) typelow, (byte) qhdhigh, (byte) qhdlow, (byte) fhdhigh, (byte) fhdlow, - (byte) car_width1,(byte) car_width2, - };} - - log.info("下发AGV作业指令--{}", str1); + (byte) car_width1, (byte) car_width2, + }; + } + log.info("准备下发AGV作业指令号:{},十进制:{},十六进制{}", instcode, str, str1); OneNDCSocketConnectionAutoRun.write(b); - System.out.println("下发agv指令数据:" + Bytes2HexString(b)); + log.info("下发AGV作业指令号:{},下发成功:报文:{}", instcode, Bytes2HexString(b)); } } @@ -350,18 +355,86 @@ public class NDCAgvServiceImpl implements NDCAgvService { (byte) instcodehigh, (byte) instcodelow, (byte) carhigh, (byte) carlow }; - log.info("下发AGV充电任务--{}", str1); - + log.info("当前车辆{},开始下发AGV充电任务--十六进制:{},{},十进制:{}", carno, str1, Bytes2HexString(b), str); try { OneNDCSocketConnectionAutoRun.write(b); } catch (Exception e) { - e.getMessage(); + log.info("当前车辆{},开始下发AGV充电任务失败--十六进制:{},{},十进制:{},异常信息:{}", carno, str1, Bytes2HexString(b), str, e.getMessage()); return false; } - System.out.println("下发agv充电任务数据:" + Bytes2HexString(b)); + log.info("当前车辆{},下发AGV充电任务成功--十六进制:{},{},十进制:{}", carno, str1, Bytes2HexString(b), str); return true; } + @Override + @Transactional(rollbackFor = Exception.class) + public void charge(String carno) { + //检查数据字典station为0的参数 + //分配车辆 + Dict dict = dictService.getDictByName3("station", carno, null); + int satation = 0; + if (dict != null) { + log.info("当前车辆{}已分配充电桩{},退出后续判断", carno, dict.getPara1()); + return; + } + Dict temp = null; + List tempList = dictService.getDictByName2("station"); + if ("7".equals(carno) || "8".equals(carno)) { + tempList.removeIf(r -> !"四号站点(RT)".equals(r.getLabel())); + } + if (ObjectUtil.isNotEmpty(tempList)) { + temp = tempList.get(0); + satation = Integer.parseInt(temp.getPara1()); + } + if (satation != 0) { + String instcode = CodeUtil.getNewCode("INSTRUCT_NO"); + byte ikeyhigh = (byte) IntToHexHigh(Integer.parseInt(instcode)); + byte ikeylow = (byte) IntToHexLow(Integer.parseInt(instcode)); + byte carhigh = (byte) IntToHexHigh(Integer.parseInt(carno)); + byte carlow = (byte) IntToHexLow(Integer.parseInt(carno)); + byte satationhigh = (byte) IntToHexHigh(satation); + byte satationlow = (byte) IntToHexLow(satation); + String str = "十进制下发:"; + String str1 = "十六进制下发:"; + str += "ikey:" + (Integer.parseInt(instcode)); + str1 += "ikey:" + hexToString(ikeyhigh & 0xFF) + hexToString(ikeylow & 0xFF); + str += "carno:" + (Integer.parseInt(carno)); + str1 += "carno:" + hexToString(carhigh & 0xFF) + hexToString(carlow & 0xFF); + str += "/satation:" + (satation); + str1 += "/satation:" + hexToString(satationhigh & 0xFF) + hexToString(satationlow & 0xFF); + byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X0E, + (byte) 0X00, (byte) 0X01, + (byte) 0X00, (byte) 0X71, + (byte) 0X00, (byte) 0X0A, + (byte) 0X64, (byte) 0X80, + (byte) 0X00, (byte) 0X01, + (byte) ikeyhigh, (byte) ikeylow, + (byte) carhigh, (byte) carlow, + (byte) satationhigh, (byte) satationlow + + }; + log.info("当前车辆{},开始下发AGV充电任务--十六进制:{},{},十进制:{}", carno, str1, Bytes2HexString(b), str); + try { + OneNDCSocketConnectionAutoRun.write(b); + } catch (Exception e) { + log.info("当前车辆{},开始下发AGV充电任务失败--十六进制:{},{},十进制:{},异常信息:{}", carno, str1, Bytes2HexString(b), str, e.getMessage()); + } + if (ObjectUtil.isNotEmpty(temp)) { + temp.setValue("1"); + temp.setPara2(carno); + temp.setPara3("下发充电"); + dictService.updateDetail(temp); + } + log.info("当前车辆{},下发AGV充电任务成功--十六进制:{},{},十进制:{}", carno, str1, Bytes2HexString(b), str); + } else { + log.error("目前暂无可使用充电桩充电桩,暂不分配{}充电任务", carno); + } + + } + + String hexToString(int i) { return (i < 16 ? "0" + Integer.toHexString(i) : Integer.toHexString(i)).toUpperCase(); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java index fe522de..92616bf 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/OneNDCSocketConnectionAutoRun.java @@ -20,6 +20,8 @@ import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; import org.nl.config.SpringContextHolder; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.impl.SysParamServiceImpl; @@ -65,7 +67,8 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { AutoRunService autoRunService; @Autowired LuceneExecuteLogService luceneExecuteLogService; - + @Autowired + ISysDictService dictService; public OneNDCSocketConnectionAutoRun() { this.recordTime = new Date((new Date()).getTime() - (long) this.recordTimeOut); @@ -134,8 +137,11 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { int ikey = arr[26] * 256 + arr[27]; //站点号 int agvaddr = arr[18] * 256 + arr[19]; + //车号 int carno = arr[20]; + //充电桩站点号 + int station = arr[25]; Instruction link_inst = null; Instruction inst = null; List insts = null; @@ -288,11 +294,40 @@ public class OneNDCSocketConnectionAutoRun extends AbstractAutoRunnable { data = NDCAgvService.sendAgvOneModeInst(phase, index, 0); } } - }else { + }else if (phase == 0x64){ + //100 + log.info("AGV车号{}反馈充电任务下发成功,锁定充电桩{}",agvaddr,station); + Dict dict = dictService.getDictByName3("station",String.valueOf(agvaddr),null); + if (ObjectUtil.isNotEmpty(dict)){ + dict.setValue("1"); + dict.setPara2(String.valueOf(agvaddr)); + dict.setPara3("下发成功"); + dictService.updateDetail(dict); + } + //充电成功 + }else if (phase == 0x65){ + //101 + log.info("AGV车号{}反馈充电中,充电桩{}",agvaddr,station); + //充电取消上报 + }else if (phase == 0x66){ + //102 + log.info("AGV车号{}反馈充电任务已取消,释放充电桩{}",agvaddr,station); + Dict dict = dictService.getDictByName3("station",String.valueOf(agvaddr),null); + if (ObjectUtil.isNotEmpty(dict)){ + dict.setValue("0"); + dict.setPara2(""); + dict.setPara3("充电桩空闲"); + dictService.updateDetail(dict); + } + } + else { //上报异常信息 //(不需要WCS反馈) + //67->103,73->115 if (phase == 0x67) { device = deviceAppService.findDeviceByCode(Integer.toString(agvaddr)); + } else if (phase == 0x73) { + device = deviceAppService.findDeviceByCode(Integer.toString(agvaddr)); } else { device = deviceAppService.findDeviceByCode(Integer.toString(arr[20])); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index 8ce5672..3a16f61 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.acs.AcsConfig; import org.nl.acs.agv.server.NDCAgvService; @@ -34,12 +35,14 @@ import org.nl.acs.task.service.impl.TaskServiceImpl; import org.nl.common.exception.BadRequestException; import org.nl.config.SpringContextHolder; import org.nl.config.thread.ThreadPoolExecutorUtil; +import org.nl.system.service.dict.ISysDictService; +import org.nl.system.service.dict.dao.Dict; import org.nl.system.service.lucene.LuceneExecuteLogService; import org.nl.system.service.param.ISysParamService; import org.nl.system.service.param.impl.SysParamServiceImpl; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import java.time.LocalTime; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -61,6 +64,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic DeviceExecuteLogService logServer = SpringContextHolder.getBean(DeviceExecuteLogService.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); + ISysDictService dictService = SpringContextHolder.getBean(ISysDictService.class); @Autowired LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean("luceneExecuteLogServiceImpl"); @Autowired @@ -142,7 +146,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic Map error = ErrorUtil.getAgvErrorMsg(ikey); String code = error.get("code"); String info = error.get("info"); - log.error("车辆" + agvaddr + "故障:故障码:" + error + ",ikey为:" + ikey + ",已解析报警信息:code:" + code + ",info" + info); + //log.error("车辆" + agvaddr + "故障:故障码:" + error + ",ikey为:" + ikey + ",已解析报警信息:code:" + code + ",info" + info); //通过ikey if (StringUtils.isNotBlank(info)) { sendFeiShuAlert(info); @@ -218,7 +222,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); flag = true; } else if (phase == 0x09) { - log.info("agv进入" + this.device_code + "放货完成" + task.getTo_x()); + //log.info("agv进入" + this.device_code + "放货完成" + task.getTo_x()); data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); flag = true; } @@ -246,15 +250,54 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic //车辆角度 angle = ikey; } else if (phase == 0x73) { + log.info("接收agv上报信息,phase == 0x73:" + phase); //agv电量 electric_qty = ikey; - // 电量不足充电 - // int electric = Integer.parseInt(paramService.findByCode(AcsConfig.ELECTRIC).getValue()); - // if (electric_qty > 0 && electric_qty < electric) { - // log.info("当前车辆{}电量为{}低于{},开始判断是否需要充电!", this.device_code, electric_qty, electric); - // ndcAgvService.charge(String.valueOf(this.agvaddr)); - // isCharge = true; - // } + //是否开启自动充电 + String is_atuo_electric = paramService.findByCode(AcsConfig.IS_ATUO_ELECTRIC).getValue(); + log.info("接收agv上报信息,is_atuo_electric:" + is_atuo_electric); + if ("1".equals(is_atuo_electric)) { + String electric_begin = paramService.findByCode(AcsConfig.ELECTRIC_BEGIN).getValue(); + String[] begins = electric_begin.split(":"); + String electric_end = paramService.findByCode(AcsConfig.ELECTRIC_END).getValue(); + String[] ends = electric_end.split(":"); + // 定义时间段 + LocalTime startTime = LocalTime.of(Integer.parseInt(begins[0]), Integer.parseInt(begins[1])); // 上午8点 + LocalTime endTime = LocalTime.of(Integer.parseInt(ends[0]), Integer.parseInt(ends[1])); // 晚上22点 + // 获取当前时间 + LocalTime now = LocalTime.now(); + // 判断当前时间是否在时间段内 + boolean isInRange = !now.isBefore(startTime) && !now.isAfter(endTime); + int electric = 0; + //早上8-22点 + if (isInRange) { + electric = Integer.parseInt(paramService.findByCode(AcsConfig.ELECTRIC).getValue()); + } else { + electric = Integer.parseInt(paramService.findByCode(AcsConfig.ELECTRIC2).getValue()); + } + if (electric_qty > 0 && electric_qty < electric) { + log.info("当前车辆{}电量为{}低于{},开始判断是否需要充电!", this.agvaddr, electric_qty, electric); + //判断是否已下发充电任务 + Dict dict1 = dictService.getDictByName3("station", String.valueOf(this.agvaddr), null); + log.info("当前车辆{}电量为{}低于{},开始查询分配充电桩信息", this.agvaddr, electric_qty, electric); + if (ObjectUtil.isNotEmpty(dict1)) { + log.info("当前车辆{}已分配充电桩{},退出后续判断", this.agvaddr, dict1.getPara1()); + } else { + List dictList = dictService.getDictByName2("station"); + if (ObjectUtils.isNotEmpty(dictList) && (this.agvaddr == 7 || this.agvaddr == 8)) { + dictList.removeIf(r -> !"四号站点(RT)".equals(r.getLabel())); + } + if (ObjectUtils.isNotEmpty(dictList)) { + log.info("当前车辆{}电量为{}低于{},充电桩数量", this.agvaddr, electric_qty, dictList.size()); + log.info("当前车辆{}成功分配充电桩:{},准备下发充电任务", this.agvaddr, dictList.get(0).getLabel()); + ndcAgvService.charge(String.valueOf(this.agvaddr)); + isCharge = true; + } else { + log.info("当前车辆{}电量为{}低于{},但无空闲充电桩!", this.agvaddr, electric_qty, electric); + } + } + } + } } else if (phase == 0x74) { status = ikey; } else if (phase == 0x75) { diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 12f6c5c..2dd156c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -84,7 +84,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { String ext_task_id = request.getExt_task_uuid(); String task_code = request.getTask_code(); //车辆类型 - String car_type=request.getCar_type(); + String car_type=request.getCar_type()==null?"1":request.getCar_type(); String car_width=request.getCar_width(); String start_device_code = request.getStart_device_code(); String start_device_code2 = request.getStart_device_code2(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java index 6743437..0d77283 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/controller/param/SysParamController.java @@ -76,6 +76,11 @@ class SysParamController { paramService.setParam(whereJson); return new ResponseEntity<>(HttpStatus.OK); } + @GetMapping("/queryParam") + @Log("查询自动充电配置") + public ResponseEntity queryParam(){ + return new ResponseEntity<>(paramService.queryParam(), HttpStatus.OK); + } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/ISysDictService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/ISysDictService.java index 8e9367b..c2a3eec 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/ISysDictService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/ISysDictService.java @@ -89,6 +89,19 @@ public interface ISysDictService extends IService { */ void deleteDetail(String id); + /** + * 获取字典明细 + * @param name + * @return + */ + List getDictByName2(String name); + + /** + * 获取字典明细 + * @param name + * @return + */ + Dict getDictByName3(String name,String carno,String station); /** * 查询所有字典信息 * @return diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java index b2605cf..0975764 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/dict/impl/SysDictServiceImpl.java @@ -215,6 +215,32 @@ public class SysDictServiceImpl extends ServiceImpl impleme sysDictMapper.updateById(dict); } + @Override + public List getDictByName2(String name) { + return sysDictMapper.selectList( + new LambdaQueryWrapper() + .eq(Dict::getCode, name) + .eq(Dict::getValue, "0") + .and(slam -> slam.isNull(Dict::getPara2) + .or() + .eq(Dict::getPara2, "")).orderByAsc(Dict::getDict_id) + ); + } + @Override + public Dict getDictByName3(String name,String carno,String station) { + Dict dict = null; + List dictList = sysDictMapper.selectList( + new LambdaQueryWrapper() + .eq(Dict::getCode, name) + .eq(ObjectUtil.isNotEmpty(carno),Dict::getPara2, carno) + .eq(ObjectUtil.isNotEmpty(station),Dict::getPara1, station) + .eq(Dict::getValue,"1") + ); + if (ObjectUtil.isNotEmpty(dictList) && dictList.size()>0){ + dict = dictList.get(0); + } + return dict; + } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java index 6bbcd19..899541c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/ISysParamService.java @@ -60,6 +60,6 @@ public interface ISysParamService extends IService { */ /*@Cached(name = "paramDataCode.", key = "#code", expire = 3600, cacheType = CacheType.REMOTE)*/ Param findByCode(String code); - + Map queryParam(); void setParam(Map whereJson); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java index 7f35c5c..bd1c95f 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/param/impl/SysParamServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -99,6 +100,27 @@ public class SysParamServiceImpl extends ServiceImpl impl Param param = paramMapper.selectOne(queryWrapper); return param; } + public Map queryParam(){ + HashMap map = new HashMap(); + //白班充电阈值 + Param electric = this.findByCode(AcsConfig.ELECTRIC); + if (ObjectUtil.isEmpty(electric)) throw new BadRequestException("白班充电阈值参数异常"); + //晚班充电阈值 + Param electric2 = this.findByCode(AcsConfig.ELECTRIC2); + if (ObjectUtil.isEmpty(electric2)) throw new BadRequestException("晚班充电阈值参数异常"); + //白班开始时间 + Param electric_begin = this.findByCode(AcsConfig.ELECTRIC_BEGIN); + if (ObjectUtil.isEmpty(electric_begin)) throw new BadRequestException("白班开始时间参数异常"); + //白班结束时间 + Param electric_end = this.findByCode(AcsConfig.ELECTRIC_END); + if (ObjectUtil.isEmpty(electric_end)) throw new BadRequestException("白班结束时间参数异常"); + + map.put("electric",electric.getValue()); + map.put("electric2",electric2.getValue()); + map.put("electric_begin",electric_begin.getValue()); + map.put("electric_end",electric_end.getValue()); + return map; + } @Override @Transactional(rollbackFor = Exception.class) public void setParam(Map whereJson){ diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/config/application-prod2.yml b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-prod2.yml new file mode 100644 index 0000000..9d2b3d8 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-prod2.yml @@ -0,0 +1,192 @@ +server: + port: 8010 +#配置数据源 +spring: + messages: + basename: language/login/login,language/error/error,language/buss/buss,language/task/CallEmpReelTask,language/task/common,language/monitor/one_device/one_device,language/monitor/two_device/two_device,language/monitor/universal/universal + datasource: + druid: + db-type: com.alibaba.druid.pool.DruidDataSource + driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + # url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true +# url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:beian_xinshengacs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hyjm_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true + username: ${DB_USER:root} + # password: ${DB_PWD:Root.123456} + password: ${DB_PWD:123456} + # 初始连接数 + initial-size: 5 + # 最小连接数 + min-idle: 15 + # 最大连接数 + max-active: 30 + # 超时时间(以秒数为单位) + remove-abandoned-timeout: 180 + # 获取连接超时时间 + max-wait: 3000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filter: + stat: + enabled: true + # 记录慢SQL + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + flyway: + # 是否启用flyway + enabled: true + # 编码格式,默认UTF-8 + encoding: UTF-8 + # 迁移sql脚本文件存放路径,默认db/migration + locations: classpath:db/migration + # 迁移sql脚本文件名称的前缀,默认V + sql-migration-prefix: V + # 迁移sql脚本文件名称的分隔符,默认2个下划线__ + sql-migration-separator: __ + # 迁移sql脚本文件名称的后缀 + sql-migration-suffixes: .sql + # 迁移时是否进行校验,默认true + validate-on-migrate: true + # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表 + baseline-on-migrate: true + redis: + #数据库索引 + database: ${REDIS_DB:2} + host: ${REDIS_HOST:127.0.0.1} + port: ${REDIS_PORT:6379} + jpa: + show-sql: true + +# 登录相关配置 +login: + # 登录缓存 + cache-enable: true + # 是否限制单用户登录 + single-login: false + # 验证码 + login-code: + # 验证码类型配置 查看 LoginProperties 类 + code-type: arithmetic + # 登录图形验证码有效时间/分钟 + expiration: 2 + # 验证码高度 + width: 111 + # 验证码宽度 + heigth: 36 + # 内容长度 + length: 2 + # 字体名称,为空则使用默认字体 + font-name: + # 字体大小 + font-size: 25 + +#是否允许生成代码,生产环境设置为false +generator: + enabled: true + +# IP 本地解析 +ip: + local-parsing: true + +# 文件存储路径 +file: + mac: + path: ~/file/ + avatar: ~/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 +logging: + file: + path: D:\log\beian\acs # /Users/onepiece/myFile/acs_logs + config: classpath:logback-spring.xml +lucene: + index: + path: D:\lucene\index + +# Sa-Token配置 +sa-token: + # token 名称 (同时也是cookie名称) + token-name: Authorization + # token 有效期,单位s 默认30天, -1代表永不过期 + timeout: 2592000 + # token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 + activity-timeout: -1 + # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) + is-concurrent: true + # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) + is-share: false + # token风格 + token-style: random-128 + # 是否输出操作日志 + is-log: false + jwt-secret-key: opsjajisdnnca0sdkksdfaaasdfwwq + # token 前缀 + token-prefix: Bearer + sso: + # Ticket有效期 (单位: 秒),默认五分钟 + ticket-timeout: 300 + # 所有允许的授权回调地址 + allow-url: "*" + # 是否打开单点注销功能 + is-slo: true + + # ------- SSO-模式三相关配置 (下面的配置在SSO模式三并且 is-slo=true 时打开) + # 是否打开模式三 + isHttp: true + # 接口调用秘钥(用于SSO模式三的单点注销功能) + secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor + # ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器(文档有步骤说明) + is-read-cookie: true + is-print: false + # 未登录 StpUtil.getTokenSession() 设置值,获取值 @SaIgnore 得忽略接口 + token-session-check-login: false + alone-redis: + # Redis数据库索引(默认为0) + database: 2 + # Redis服务器地址 + host: 127.0.0.1 + # Redis服务器连接端口 + port: 6379 + # Redis服务器连接密码(默认为空) + password: + # 连接超时时间 + timeout: 10s +#comPort: +# need: true +# cname: COM5 +# newBaudRate: 9600 +# newDataBits: 8 +# newStopBits: 1 +# newParity: 0 +agvToAcs: + addr: http://localhost diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/acs/nladmin-system/nlsso-server/src/main/resources/config/application.yml index b1bcc54..6bc5a0d 100644 --- a/acs/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/acs/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -6,7 +6,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: prod # active: dev # active: prod jackson: diff --git a/acs/nladmin-ui/src/views/system/param/param.js b/acs/nladmin-ui/src/views/system/param/param.js index af09fc3..941266d 100644 --- a/acs/nladmin-ui/src/views/system/param/param.js +++ b/acs/nladmin-ui/src/views/system/param/param.js @@ -69,4 +69,6 @@ export function initDict(data) { }) } -export default { add, edit, del, getValueByCode, setParam, showDetail2, initDict, showDetail3 } + + +export default { add, edit, del, getValueByCode, queryParam, setParam, showDetail2, initDict, showDetail3 } diff --git a/nladmin-system/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index.vue b/nladmin-system/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index.vue index 82a81a0..ff05880 100644 --- a/nladmin-system/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index.vue +++ b/nladmin-system/nladmin-ui/src/views/wms/basedata/storagevehicleinfo/index.vue @@ -40,7 +40,7 @@ @keyup.enter.native="crud.toQuery" /> - + @@ -67,30 +67,34 @@ > - + - + - + - + - + - + - + - + @@ -251,8 +251,8 @@ v-for="item in dict.vehicle_type" :key="item.value" :label="item.label" - :value="item.value"> - + :value="item.value" + /> @@ -261,12 +261,12 @@ v-for="item in dict.vehicle_type" :key="item.value" :label="item.label" - :value="item.value"> - + :value="item.value" + /> - + @@ -302,11 +302,11 @@ {{ dict.label.point_status[scope.row.point_status] }} - - - - - + + + + + @@ -513,7 +513,7 @@ export default { } }) }, - relse(){ + relse() { crudSchBaseRegion.relse() }, getPointTypeList(id, flag) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java index ba28487..c8a087d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/ios_manage/service/impl/PdaIosOutServiceImpl.java @@ -27,6 +27,7 @@ import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO; import org.nl.wms.basedata_manage.service.dto.StrategyStructParam; import org.nl.wms.pda_manage.ios_manage.service.PdaIosOutService; import org.nl.wms.pda_manage.util.PdaResponse; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.StatusEnum; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; @@ -420,10 +421,10 @@ public class PdaIosOutServiceImpl implements PdaIosOutService { throw new BadRequestException("当前货架已绑定在站点:" + sitePoint.getPoint_code() + ",请先解绑。"); } wrapper.set(SchBasePoint::getVehicle_code, whereJson.getString("shelfCode")) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")); + .set(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()); } else { wrapper.set(SchBasePoint::getVehicle_code, null) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")); + .set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()); } wrapper.set(SchBasePoint::getUpdate_time, DateUtil.now()) .set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName()); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java index 9703974..901ede2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaSchTaskServiceImpl.java @@ -12,6 +12,7 @@ import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.ext_manage.service.util.AcsResponse; import org.nl.wms.pda_manage.sch_manage.service.PdaSchTaskService; import org.nl.wms.pda_manage.util.PdaResponse; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.TaskEnum; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; @@ -138,7 +139,7 @@ public class PdaSchTaskServiceImpl extends ServiceImpl wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(SchBasePoint::getPoint_code, entity.getPoint_code()) + .set(SchBasePoint::getUpdate_id, currentUserId) + .set(SchBasePoint::getPoint_status, entity.getPoint_status()) + .set(SchBasePoint::getVehicle_code, entity.getVehicle_code()) + .set(SchBasePoint::getUpdate_name, nickName) + .set(SchBasePoint::getUpdate_time, now) + .set(SchBasePoint::getRegion_name, baseRegion.getRegion_name()); if (ObjectUtil.isNotEmpty(entity.getCan_vehicle_types())) { - String can_vehicle_type = String.join(",", entity.getCan_vehicle_types()); - entity.setCan_vehicle_type(can_vehicle_type); + wrapper.set(SchBasePoint::getCan_vehicle_type, String.join(",", entity.getCan_vehicle_types())); } - String pointStatus = entity.getPoint_status(); // 根据点位状态来判断更新内容 + String pointStatus = entity.getPoint_status(); if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(PointStatusEnum.EMPTY_POINT.getCode())) { - entity.setVehicle_type(""); - entity.setVehicle_code(""); + wrapper.set(SchBasePoint::getVehicle_code, (String) null); + wrapper.set(SchBasePoint::getLock_up, false); + }else if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals(PointStatusEnum.FULL_POINT.getCode())) { + wrapper.set(SchBasePoint::getLock_up, true); } - pointMapper.updateById(entity); + pointMapper.update(null, wrapper); } @Override diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java index c1571a7..0845fc5 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/impl/SchBaseRegionServiceImpl.java @@ -85,6 +85,8 @@ public class SchBaseRegionServiceImpl extends ServiceImpl allTaskList = taskService.list(new LambdaQueryWrapper() .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())); - Map> partition1 = allTaskList.stream() + List cnTaskList = allTaskList.stream().filter(r ->(r.getPoint_code2().startsWith("BCPRK6")||r.getPoint_code2().startsWith("BCPCK6"))&&(!TaskStatus.CREATE.getCode().equals(r.getTask_status()))).collect(Collectors.toList()); + if (cnTaskList.size() >0) { + //只能存在一个 + allTaskList.removeIf(r -> (r.getPoint_code2().startsWith("BCPRK6") || r.getPoint_code2().startsWith("BCPCK6")) + && TaskStatus.CREATE.getCode().equals(r.getTask_status())); + } + Map> partition1 = allTaskList.stream() .collect(Collectors.partitioningBy(task -> TaskStatus.CREATE.getCode().equals(task.getTask_status()))); //生成状态任务 List taskList = partition1.get(true); @@ -184,6 +190,12 @@ public class AutoTask { List allTaskList = taskService.list(new LambdaQueryWrapper() .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())); + List cnTaskList = allTaskList.stream().filter(r ->(r.getPoint_code2().startsWith("BCPRK6")||r.getPoint_code2().startsWith("BCPCK6"))&&(!TaskStatus.CREATE.getCode().equals(r.getTask_status()))).collect(Collectors.toList()); + if (cnTaskList.size() >0) { + //只能存在一个 + allTaskList.removeIf(r -> (r.getPoint_code2().startsWith("BCPRK6") || r.getPoint_code2().startsWith("BCPCK6")) + && TaskStatus.CREATE.getCode().equals(r.getTask_status())); + } Map> partition1 = allTaskList.stream() .collect(Collectors.partitioningBy(task -> TaskStatus.CREATE.getCode().equals(task.getTask_status()))); //生成状态任务 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java index f311dab..ce00a67 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CheckMoveTask.java @@ -11,6 +11,7 @@ import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -174,7 +175,7 @@ public class CheckMoveTask extends AbstractTask { iSchBasePointService.update( new UpdateWrapper().lambda() .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")) + .set(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getIng_task_code, taskObj.getTask_id()) ); @@ -182,7 +183,6 @@ public class CheckMoveTask extends AbstractTask { // 更新盘点明细状态 dtlDao.setStatus(IOSEnum.CHECK_DTL_STATUS.code("盘点中")); iStIvtCheckdtlService.updateById(dtlDao); - // 更新主表状态 iStIvtCheckmstService.updateMst(dtlDao.getCheck_id()); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java index 435fa03..566d215 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/PdaPointTask.java @@ -10,6 +10,7 @@ import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.IdUtil;; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Structattr; +import org.nl.wms.sch_manage.enums.PointStatusEnum; import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; import org.nl.wms.sch_manage.service.ISchBaseTaskService; @@ -77,6 +78,7 @@ public class PdaPointTask extends AbstractTask { AcsTaskDto acsTaskDto = new AcsTaskDto(); acsTaskDto.setExt_task_uuid(taskDao.getTask_id()); acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); acsTaskDto.setPriority(taskDao.getPriority()); @@ -142,7 +144,7 @@ public class PdaPointTask extends AbstractTask { .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) .set(SchBasePoint::getVehicle_code, null) .set(SchBasePoint::getIos_id, null) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) + .set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) ); iStructattrService.update( new UpdateWrapper().lambda() @@ -157,7 +159,7 @@ public class PdaPointTask extends AbstractTask { .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) .set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code()) .set(SchBasePoint::getIos_id, null) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货")) + .set(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) ); iStructattrService.update( new UpdateWrapper().lambda() @@ -178,7 +180,7 @@ public class PdaPointTask extends AbstractTask { iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) + .set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) ); iStructattrService.update( new UpdateWrapper().lambda() @@ -189,7 +191,7 @@ public class PdaPointTask extends AbstractTask { iSchBasePointService.update( new UpdateWrapper().lambda() .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2()) - .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货")) + .set(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) ); iStructattrService.update( new UpdateWrapper().lambda() diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java index 754cd15..b9724b2 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_manage/inAndOut/service/impl/OutBillServiceImpl.java @@ -1192,18 +1192,21 @@ public class OutBillServiceImpl extends ServiceImpl i } MdPbStoragevehicletype mdPbStoragevehicletype = iMdPbStoragevehicletypeService.getOutVehicleType(mdPbStoragevehicleinfo.getStoragevehicle_type()); car_width = mdPbStoragevehicletype.getCar_width(); - }else{ - car_type="1"; + } else { + car_type = "1"; } + String pointCode2 = StringUtils.isBlank(whereJson.getString("point_code2")) ? IOSConstant.CKFPW_POINT_CODE : whereJson.getString("point_code2"); + //CNC区域只能用PS20 + car_type = pointCode2.contains("BCPCK6") ? "1" : car_type; //创建任务 JSONObject task_form = new JSONObject(); task_form.put("task_type", "STOutTask"); - task_form.put("TaskCode",CodeUtil.getNewCode("TASK_CODE")); + task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE")); task_form.put("PickingLocation", struct_code); - task_form.put("PlacedLocation", IOSConstant.CKFPW_POINT_CODE); + task_form.put("PlacedLocation", pointCode2); task_form.put("vehicle_code", item.getStoragevehicle_code()); - task_form.put("car_type",car_type); - task_form.put("car_width",car_width); + task_form.put("car_type", car_type); + task_form.put("car_width", car_width); task_form.put("priority", whereJson.getString("priority")); StOutTask stOutTask = SpringContextHolder.getBean("STOutTask"); String task_id = stOutTask.create(task_form); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/controller/WmsToIWmscontroller.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/controller/WmsToIWmscontroller.java index 867fad3..c0274d7 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/controller/WmsToIWmscontroller.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/controller/WmsToIWmscontroller.java @@ -2,15 +2,19 @@ package org.nl.wms.wbwms.controller; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.nl.common.exception.BadRequestException; import org.nl.common.logging.annotation.Log; import org.nl.common.utils.IdUtil; import org.nl.wms.basedata_manage.service.IStructattrService; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.wbwms.service.WmsToIWmsService; +import org.nl.wms.wbwms.service.dto.WmstoIWmsResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -79,7 +83,20 @@ public class WmsToIWmscontroller { @Log("WMS移库任务推送") @SaIgnore public ResponseEntity moveTask(@RequestBody JSONObject param) { - return new ResponseEntity<>(wmsToIWmsService.moveTask(param), HttpStatus.OK); + WmstoIWmsResponse wmsToIWmsResponse; + JSONArray tableData = param.getJSONArray("tableData"); + if (ObjectUtils.isEmpty(tableData)) { + throw new BadRequestException("物料tableData不能为空"); + } + String qty = tableData.getJSONObject(0).getString("qty"); + if (!"0".equals(qty)) { + //移库 + wmsToIWmsResponse = wmsToIWmsService.moveTask(param); + } else { + //点对点 + wmsToIWmsResponse = wmsToIWmsService.movePointTask(param); + } + return new ResponseEntity<>(wmsToIWmsResponse, HttpStatus.OK); } @PostMapping("/checkBill") @Log("WMS盘点任务推送") diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/WmsToIWmsService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/WmsToIWmsService.java index d7b6506..82fb42d 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/WmsToIWmsService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/WmsToIWmsService.java @@ -16,5 +16,7 @@ public interface WmsToIWmsService { WmstoIWmsResponse inventory (JSONObject param); WmstoIWmsResponse moveTask(JSONObject param); + + WmstoIWmsResponse movePointTask(JSONObject parm); WmstoIWmsResponse checkBillTask(JSONObject param); } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java index 9ed136b..455a91a 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/wbwms/service/impl/WmsToIWmsServiceImpl.java @@ -5,8 +5,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.CodeUtil; @@ -21,12 +23,16 @@ import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo; import org.nl.wms.basedata_manage.service.dao.Structattr; import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMapper; import org.nl.wms.sch_manage.enums.PointStatusEnum; +import org.nl.wms.sch_manage.enums.TaskEnum; +import org.nl.wms.sch_manage.enums.TaskStatus; import org.nl.wms.sch_manage.service.ISchBasePointService; +import org.nl.wms.sch_manage.service.ISchBaseTaskService; import org.nl.wms.sch_manage.service.dao.SchBasePoint; -import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper; +import org.nl.wms.sch_manage.service.dao.SchBaseTask; import org.nl.wms.sch_manage.service.util.tasks.CheckInTask; import org.nl.wms.sch_manage.service.util.tasks.CheckOutTask; import org.nl.wms.sch_manage.service.util.tasks.MoveTask; +import org.nl.wms.sch_manage.service.util.tasks.PdaPointTask; import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService; @@ -45,7 +51,6 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; @@ -64,8 +69,10 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { private GroupController groupController; @Autowired private IOStorInvDisMapper ioStorInvDisMapper; - @Resource - private SchBasePointMapper schBasePointMapper; + @Autowired + private PdaPointTask pdaPointTask; + @Autowired + private ISchBaseTaskService iSchBaseTaskService; @Autowired IInBillService iInBillService; @Autowired @@ -357,6 +364,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { pointData.put("barcode", StringUtils.isBlank(point.getVehicle_code()) ? "" : point.getVehicle_code()); pointData.put("point_code", point.getPoint_code()); pointData.put("status", point.getPoint_status().equals(PointStatusEnum.EMPTY_POINT.getCode()) && StringUtils.isBlank(point.getVehicle_code()) ? "0" : "1"); + pointData.put("lock_status", point.getLock_up()? "1" : "0"); dataList.add(pointData); } } @@ -373,9 +381,37 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { @Override @Transactional public WmstoIWmsResponse outBillTask(JSONObject parm) { + log.info("WMS 出库请求参数参数为:-------------------" + parm.toString()); + if ("1002".equals(parm.getString("bill_type"))) { + int count = iSchBaseTaskService.count(new LambdaQueryWrapper() + .and(w -> w.like(SchBaseTask::getPoint_code2, "BCPRK6") + .or() + .like(SchBaseTask::getPoint_code2, "BCPCK6")) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + ); + if (count > 0) { + throw new BadRequestException("CNC区域有出库或入库任务未完成,请检查!"); + } + //CNC出库区 + List regionCode = iSchBasePointService.list(new LambdaQueryWrapper() + .like(SchBasePoint::getPoint_code, "BCPCK6") + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .eq(SchBasePoint::getLock_up, "0") + .eq(SchBasePoint::getIs_used, "1") + .orderByDesc(SchBasePoint::getOut_order_seq) + ); + if (ObjectUtils.isEmpty(regionCode)) { + throw new BadRequestException("当前库区无可用点位"); + } + String finishCode = regionCode.get(0).getPoint_code(); + SchBasePoint schBasePoint; + schBasePoint = iSchBasePointService.getByCode(finishCode); + schBasePoint.setLock_up(true); + iSchBasePointService.update(schBasePoint); + parm.put("point_code2", finishCode); + } WmstoIWmsResponse result = new WmstoIWmsResponse(); RedissonUtils.lock(() -> { - log.info("WMS 出库请求参数参数为:-------------------" + parm.toString()); JSONArray tableData = parm.getJSONArray("tableData"); if (CollectionUtils.isEmpty(tableData)) { throw new BadRequestException("tableData 不能为空"); @@ -388,7 +424,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { List structattrList = iStructattrService.list(new LambdaQueryWrapper() .in(Structattr::getStruct_code, turnoutStructCodes)); if (CollectionUtils.isEmpty(structattrList)) { - throw new BadRequestException("wms 上不存在这些点位"); + throw new BadRequestException("wms上不存在这些点位"); } java.util.Map structattrMap = structattrList.stream() .collect(java.util.stream.Collectors.toMap(Structattr::getStruct_code, s -> s)); @@ -406,6 +442,9 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { if (!"0".equals(structattr.getLock_type())) { throw new BadRequestException("传入点位有任务:" + turnout_struct_code); } + if (structattr.getLayer_num() > 3 && "1002".equals(parm.getString("bill_type"))) { + throw new BadRequestException("四层货位需要RT车搬运,RT车无法通过CNC区域,请选择其他库位"); + } } Structattr structattr = structattrList.get(0); parm.put("sect_id",structattr.getSect_id()); @@ -425,7 +464,6 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { parm.put("point_code",stuct_code); parm.put("region_code","CKQ"); iOutBillService.allSetPoint(parm); - // data.put("bill_code",iostorinv_id); // data.put("turnout_destination_code",pointCode); result.setCode(String.valueOf(HttpStatus.OK.value())); @@ -446,26 +484,74 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { WmstoIWmsResponse result = new WmstoIWmsResponse(); JSONArray tableData = parm.getJSONArray("tableData"); //移出位置 - String out_struct_code=parm.getString("out_struct_code"); + String out_struct_code = parm.getString("out_struct_code"); //移入位置 - String in_struct_code=parm.getString("in_struct_code"); + String in_struct_code = parm.getString("in_struct_code"); //载具编码 - String storage_code=tableData.getJSONObject(0).getString("storage_code"); - Structattr structattr=iStructattrService.getByCode(out_struct_code); - Structattr structattr1=iStructattrService.getByCode(in_struct_code); + String storage_code = tableData.getJSONObject(0).getString("storage_code"); + Structattr structattr = iStructattrService.getByCode(out_struct_code); + Structattr structattr1 = iStructattrService.getByCode(in_struct_code); ArrayList rows = (ArrayList) parm.get("tableData"); - if(!storage_code.equals(structattr.getStoragevehicle_code())){ + if (!storage_code.equals(structattr.getStoragevehicle_code())) { throw new BadRequestException("该移出点位存放托盘与所传托盘的编码不对"); } if (structattr1.getStoragevehicle_code() != null) { throw new BadRequestException("该移出点位存在托盘"); } //新增移库单 - String bill_code =iStIvtMoveinvService.create1(parm); + String bill_code = iStIvtMoveinvService.create1(parm); result.setCode(String.valueOf(HttpStatus.OK.value())); result.setMsg("移库任务生成成功"); - JSONObject data=new JSONObject(); - data.put("bill_code",bill_code); + JSONObject data = new JSONObject(); + data.put("bill_code", bill_code); + result.setData(data); + log.info("WMS移库返回参数参数为:-------------------" + result.toString()); + return result; + } + + @Override + @Transactional + public WmstoIWmsResponse movePointTask(JSONObject parm) { + log.info("WMS点位搬运任务请求参数参数为:-------------------" + parm.toString()); + int count = iSchBaseTaskService.count(new LambdaQueryWrapper() + .and(w -> w.like(SchBaseTask::getPoint_code2, "BCPRK6") + .or() + .like(SchBaseTask::getPoint_code2, "BCPCK6")) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + ); + if (count > 0) { + throw new BadRequestException("CNC区域有出库或入库任务未完成,请检查!"); + } + WmstoIWmsResponse result = new WmstoIWmsResponse(); + JSONArray tableData = parm.getJSONArray("tableData"); + //移出位置 + String out_struct_code = parm.getString("out_struct_code"); + //移入位置 + String in_struct_code = parm.getString("in_struct_code"); + //载具编码 + String storage_code = tableData.getJSONObject(0).getString("storage_code"); + SchBasePoint point1 = iSchBasePointService.getByCode(in_struct_code); + if (StringUtils.isNotBlank(point1.getVehicle_code())) { + throw new BadRequestException("该移出点位存在载具"); + } + //生成任务 + // 生成转运任务 + JSONObject task = new JSONObject(); + task.put("config_code", IOSConstant.PDA_POINT_TASK); + task.put("point_code1", out_struct_code); + task.put("point_code2", in_struct_code); + task.put("vehicle_code", storage_code); + task.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); + String taskId = pdaPointTask.create(task); + // 更新起点绑定id + iSchBasePointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getIos_id, null) + .eq(SchBasePoint::getPoint_code, out_struct_code) + ); + JSONObject data = new JSONObject(); + data.put("bill_code", taskId); + data.put("code", "200"); result.setData(data); log.info("WMS移库返回参数参数为:-------------------" + result.toString()); return result; @@ -476,28 +562,28 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { public WmstoIWmsResponse checkBillTask(JSONObject parm) { log.info("WMS盘点请求参数参数为:-------------------" + parm.toString()); WmstoIWmsResponse result = new WmstoIWmsResponse(); - CheckInsertDto checkInsertDto=new CheckInsertDto(); - String check_id=IdUtil.getStringId(); + CheckInsertDto checkInsertDto = new CheckInsertDto(); + String check_id = IdUtil.getStringId(); checkInsertDto.setCheck_id(check_id); checkInsertDto.setCheck_type("1"); checkInsertDto.setCreate_mode("1"); checkInsertDto.setDtl_num(BigDecimal.valueOf(1)); checkInsertDto.setStatus(IOSEnum.CHECK_MST_STATUS.code("生成")); - String turnout_struct_code=parm.getString("turnout_struct_code"); - Structattr structattr=iStructattrService.getByCode(turnout_struct_code); + String turnout_struct_code = parm.getString("turnout_struct_code"); + Structattr structattr = iStructattrService.getByCode(turnout_struct_code); checkInsertDto.setStor_name(structattr.getStor_name()); checkInsertDto.setStor_id(structattr.getStor_id()); checkInsertDto.setCheck_code(parm.getString("check_code")); JSONArray tableData = parm.getJSONArray("tableData"); - JSONObject tableData1=tableData.getJSONObject(0); - if(!structattr.getStoragevehicle_code().equals(tableData1.getString("storage_code"))){ + JSONObject tableData1 = tableData.getJSONObject(0); + if (!structattr.getStoragevehicle_code().equals(tableData1.getString("storage_code"))) { throw new BadRequestException("该盘点点位存放托盘与所传托盘的编码不对"); } - tableData1.put("stor_id",structattr.getStor_id()); - tableData1.put("stor_name",structattr.getStor_name()); - tableData1.put("sect_code",structattr.getSect_code()); - tableData1.put("status",IOSEnum.CHECK_DTL_STATUS.code("生成")); - tableData1.put("struct_code",parm.getString("turnout_struct_code")); + tableData1.put("stor_id", structattr.getStor_id()); + tableData1.put("stor_name", structattr.getStor_name()); + tableData1.put("sect_code", structattr.getSect_code()); + tableData1.put("status", IOSEnum.CHECK_DTL_STATUS.code("生成")); + tableData1.put("struct_code", parm.getString("turnout_struct_code")); // 创建一个List并将jsonObject添加进去 List tableData2 = new ArrayList<>(); tableData2.add(tableData1); @@ -506,7 +592,7 @@ public class WmsToIWmsServiceImpl implements WmsToIWmsService { iStIvtCheckmstService.sendMoveTask(checkInsertDto); result.setCode(String.valueOf(HttpStatus.OK.value())); result.setMsg("盘点任务生成成功"); - JSONObject data=new JSONObject(); + JSONObject data = new JSONObject(); result.setData(data); log.info("WMS盘点返回参数参数为:-------------------" + result.toString()); return result; diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml index 32d6a53..a94f6dc 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -11,7 +11,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev # active: dev # active: prod jackson: