rev:更新
This commit is contained in:
@@ -26,7 +26,6 @@ public class AcsToWmsController {
|
||||
private AcsToWmsService acsToWmsService;
|
||||
|
||||
@PostMapping("/apply")
|
||||
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> apply(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(acsToWmsService.acsApply(param), HttpStatus.OK);
|
||||
|
||||
@@ -20,4 +20,12 @@ public interface AcsToWmsService {
|
||||
*/
|
||||
BaseResponse acsApply(JSONObject param);
|
||||
|
||||
/**
|
||||
* 任务:申请补空料盅托盘(叫空盘)
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
ApplyTaskResponse applyPutEmptyVehicle(JSONObject param);
|
||||
|
||||
}
|
||||
|
||||
@@ -4,14 +4,21 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
||||
import org.nl.wms.ext.acs.service.dto.to.BaseResponse;
|
||||
import org.nl.wms.ext.acs.service.dto.to.acs.ApplyTaskResponse;
|
||||
import org.nl.wms.ext.record.service.ISysInteractRecordService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -20,6 +27,7 @@ import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -37,6 +45,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISysInteractRecordService interactRecordService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private RedissonClient redissonClient;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
// 初始化反射方法
|
||||
@PostConstruct
|
||||
@@ -77,4 +91,42 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务:申请补空料盅托盘(叫空盘)
|
||||
*
|
||||
* @param param: ApplyTaskRequest的json形式
|
||||
* @return
|
||||
* @see org.nl.wms.ext.acs.service.dto.to.wms.ApplyTaskRequest
|
||||
*/
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public ApplyTaskResponse applyPutEmptyVehicle(JSONObject param) {
|
||||
// 找到当前的设备
|
||||
String deviceCode = param.getString("device_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
SchBasePoint basePoint = pointService.getById(deviceCode);
|
||||
String configCode = basePoint.getRegion_code() + "QKTask";
|
||||
RLock lock = redissonClient.getLock(configCode);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
|
||||
if (ObjectUtil.isEmpty(basePoint)) {
|
||||
throw new BadRequestException("点位错误!");
|
||||
}
|
||||
|
||||
// 组织参数
|
||||
param.put("config_code", configCode);
|
||||
taskService.apply(param);
|
||||
} else {
|
||||
throw new BadRequestException("其他设备占用锁,等待结束!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return ApplyTaskResponse.responseOk(requestNo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ public class WmsToMesServiceImpl implements WmsToMesService {
|
||||
mesProductDataDto.setPRESSUNIT(basePoint.getExt_point_code());
|
||||
mesProductDataDto.setFTEAM(workorder.getTeam());
|
||||
mesProductDataDto.setTRAY_NO(vehiclematerialgroup.getVehicle_code());
|
||||
mesProductDataDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
//mesProductDataDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
mesProductDataDto.setPRO_SUBUNIT("块");
|
||||
mesProductDataDto.setCHECKERIN_TIM(DateUtil.now());
|
||||
mesProductDataDto.setPRODATE(ObjectUtil.isNotEmpty(workorder.getProduce_date())
|
||||
@@ -187,7 +187,7 @@ public class WmsToMesServiceImpl implements WmsToMesService {
|
||||
semiProductionInfoInDto.setBATCHNO(mesWorkOrderDto.getBATCHNO());
|
||||
semiProductionInfoInDto.setFTEAM(workorder.getTeam());
|
||||
semiProductionInfoInDto.setTRAY_NO(vehiclematerialgroup.getVehicle_code());
|
||||
semiProductionInfoInDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
//semiProductionInfoInDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
semiProductionInfoInDto.setPRO_SUBUNIT("块");
|
||||
semiProductionInfoInDto.setCHECKERIN_TIM(DateUtil.now());
|
||||
semiProductionInfoInDto.setPRODATE(workorder.getProduce_date());
|
||||
@@ -228,7 +228,7 @@ public class WmsToMesServiceImpl implements WmsToMesService {
|
||||
semiProductionInfoOutDto.setFPRODUCT_MATERIAL_NAME(mesWorkOrderDto.getFPRODUCT_MATERIAL_NAME());
|
||||
semiProductionInfoOutDto.setFMATSPEC(mesWorkOrderDto.getFMATSPEC());
|
||||
semiProductionInfoOutDto.setFMATMODEL(mesWorkOrderDto.getFMATMODEL());
|
||||
semiProductionInfoOutDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
//semiProductionInfoOutDto.setPRO_SUBNUM(BigDecimal.valueOf(vehiclematerialgroup.getMaterial_qty()));
|
||||
semiProductionInfoOutDto.setPRO_SUBUNIT("块");
|
||||
semiProductionInfoOutDto.setSTOCK("未知");
|
||||
semiProductionInfoOutDto.setSTOCK_NAME("未知");
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.nl.wms.das.device.operation.service.IDasDeviceOperationRecordService;
|
||||
import org.nl.wms.das.device.operation.service.dao.DasDeviceOperationRecord;
|
||||
import org.nl.wms.pda.service.PdaService;
|
||||
import org.nl.wms.pda.service.dao.dto.*;
|
||||
import org.nl.wms.pda.service.dao.vo.LinkMaterialVo;
|
||||
import org.nl.wms.pda.service.dao.vo.PdaResponseVo;
|
||||
import org.nl.wms.pda.service.dao.vo.RequestMaterialInfoVo;
|
||||
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
|
||||
@@ -23,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 手持接口
|
||||
@@ -43,6 +46,92 @@ public class PdaController {
|
||||
@Autowired
|
||||
private IPdmBdWorkorderService workorderService;
|
||||
|
||||
|
||||
@PostMapping("/queryPoints")
|
||||
@Log("获取点位信息")
|
||||
public ResponseEntity<Object> queryPoints(@Validated @RequestBody PointsQueryDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.queryPoints(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/getVehicleType")
|
||||
@Log("获取载具类型")
|
||||
public ResponseEntity<Object> getVehicleType() {
|
||||
return new ResponseEntity<>(pdaService.getVehicleType(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryMaterial")
|
||||
@Log("获取物料信息")
|
||||
public ResponseEntity<Object> queryMaterial() {
|
||||
return new ResponseEntity<>(pdaService.queryMaterial(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryVehicleGroup")
|
||||
@Log("获取待配盘信息")
|
||||
public ResponseEntity<Object> queryVehicleGroup() {
|
||||
return new ResponseEntity<>(pdaService.queryVehicleGroup(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/manual")
|
||||
@Log("开始组盘")
|
||||
public ResponseEntity<PdaResponseVo> manualDiskAssembly(@Validated @RequestBody ManualGroupDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.manualCreateByPda(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/link")
|
||||
@Log("开始配盘")
|
||||
public ResponseEntity<PdaResponseVo> link(@Validated @RequestBody List<GroupLinkDto> requestParam) {
|
||||
return new ResponseEntity<>(pdaService.link(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/callEmptyVehicle")
|
||||
@Log("呼叫空托盘")
|
||||
public ResponseEntity<PdaResponseVo> callEmptyVehicle(@Validated @RequestBody CommonPointQueryDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.callEmptyVehicle(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/fullVehicleIn")
|
||||
@Log("满托入库")
|
||||
public ResponseEntity<PdaResponseVo> fullVehicleIn(@Validated @RequestBody CommonPointQueryDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.fullVehicleIn(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/fullVehicleOut")
|
||||
@Log("满托出库")
|
||||
public ResponseEntity<PdaResponseVo> fullVehicleOut(@Validated @RequestBody FullVehicleOutDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.fullVehicleOut(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/vehicleGoBack")
|
||||
@Log("余料回库")
|
||||
public ResponseEntity<PdaResponseVo> fullVehicleOut(@Validated @RequestBody VehicleGoBackDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.vehicleGoBack(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/fullVehicleOutConfirm")
|
||||
@Log("满托出库确认")
|
||||
public ResponseEntity<PdaResponseVo> fullVehicleOutConfirm(@Validated @RequestBody FullVehicleOutConfirmDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.fullVehicleOutConfirm(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryLinkMaterial")
|
||||
@Log("根据物料信息查询配盘信息")
|
||||
public ResponseEntity<Object> queryLinkMaterial(@Validated @RequestBody MaterialQueryDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.queryLinkMaterial(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/queryAllPoints")
|
||||
@Log("查询起点及其对应终点")
|
||||
public ResponseEntity<Object> queryAllPoints() {
|
||||
return new ResponseEntity<>(pdaService.queryAllPoints(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/createP2pTask")
|
||||
@Log("创建点对点流传任务")
|
||||
public ResponseEntity<PdaResponseVo> createP2pTask(@Validated @RequestBody FullVehicleOutDto requestParam) {
|
||||
return new ResponseEntity<>(pdaService.createP2pTask(requestParam), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/deviceCheck/verify")
|
||||
@Log("设备点检")
|
||||
public ResponseEntity<Object> deviceCheck(@Validated @RequestBody DasDeviceCheckRecord entity) {
|
||||
@@ -79,11 +168,6 @@ public class PdaController {
|
||||
return new ResponseEntity<>(pdaService.getDeviceInfo(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/getVehicleType")
|
||||
@Log("获取载具类型")
|
||||
public ResponseEntity<Object> getVehicleType() {
|
||||
return new ResponseEntity<>(pdaService.getVehicleType(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/getPressWorkOrder")
|
||||
@Log("获取工单编码")
|
||||
@@ -92,11 +176,6 @@ public class PdaController {
|
||||
return new ResponseEntity<>(workorderService.getDeviceProductionTask(param.getString("point_code")), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/group/manual")
|
||||
@Log("人工组盘")
|
||||
public ResponseEntity<PdaResponseVo> manualDiskAssembly(@Validated @RequestBody ManualGroupDto entity) {
|
||||
return new ResponseEntity<>(pdaService.manualCreateByPda(entity), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/move/getBlendingCode")
|
||||
@Log("获取混碾机编码")
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.wms.pda.service;
|
||||
|
||||
import org.nl.wms.pda.service.dao.dto.*;
|
||||
import org.nl.wms.pda.service.dao.vo.*;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -11,6 +12,129 @@ import java.util.List;
|
||||
* @Date: 2023/8/1
|
||||
*/
|
||||
public interface PdaService {
|
||||
|
||||
|
||||
/**
|
||||
* 获取入库对接位和出库对接位点位信息
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
List<PointVo> queryPoints(PointsQueryDto requestParam);
|
||||
|
||||
/**
|
||||
* 获取载具类型
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<DropdownListVo> getVehicleType();
|
||||
|
||||
|
||||
/**
|
||||
* 获取物料信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<MaterialInfoVo> queryMaterial();
|
||||
|
||||
|
||||
/**
|
||||
* 获取待配盘信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<VehicleLinkVo> queryVehicleGroup();
|
||||
|
||||
|
||||
/**
|
||||
* 手持开始组盘
|
||||
*
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo manualCreateByPda(ManualGroupDto entity);
|
||||
|
||||
/**
|
||||
* 手持开始配盘
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo link(List<GroupLinkDto> requestParam);
|
||||
|
||||
|
||||
/**
|
||||
* 呼叫空托
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo callEmptyVehicle(CommonPointQueryDto requestParam);
|
||||
|
||||
/**
|
||||
* 满托入库
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo fullVehicleIn(CommonPointQueryDto requestParam);
|
||||
|
||||
/**
|
||||
* 满托出库
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo fullVehicleOut(FullVehicleOutDto requestParam);
|
||||
|
||||
/**
|
||||
* 余料回库
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo vehicleGoBack(VehicleGoBackDto requestParam);
|
||||
|
||||
/**
|
||||
* 满托出库确认
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo fullVehicleOutConfirm(FullVehicleOutConfirmDto requestParam);
|
||||
|
||||
/**
|
||||
* 根据物料信息查询配盘信息
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
List<VehicleLinkVo> queryLinkMaterial(MaterialQueryDto requestParam);
|
||||
|
||||
/**
|
||||
* 查询所有定点任务的起点及其对应终点
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<PointVo> queryAllPoints();
|
||||
|
||||
/**
|
||||
* 创建点对点的任务
|
||||
*
|
||||
* @param requestParam
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo createP2pTask(FullVehicleOutDto requestParam);
|
||||
|
||||
/**
|
||||
* 转成PointVo
|
||||
*
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
List<PointVo> copyPointVoList(List<SchBasePoint> list);
|
||||
|
||||
|
||||
/**
|
||||
* 获取设备信息
|
||||
*
|
||||
@@ -32,13 +156,6 @@ public interface PdaService {
|
||||
*/
|
||||
List<DropdownListVo> deviceAction();
|
||||
|
||||
/**
|
||||
* 人工通过手持组盘
|
||||
*
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo manualCreateByPda(ManualGroupDto entity);
|
||||
|
||||
/**
|
||||
* 获取混碾机编码
|
||||
@@ -70,12 +187,6 @@ public interface PdaService {
|
||||
*/
|
||||
List<StandTimeShowVo> forcedRestingShow();
|
||||
|
||||
/**
|
||||
* 获取载具类型
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<DropdownListVo> getVehicleType();
|
||||
|
||||
/**
|
||||
* 人工分拣-显示工单
|
||||
@@ -225,4 +336,6 @@ public interface PdaService {
|
||||
* @return
|
||||
*/
|
||||
PdaResponseVo deleteMaterialInfo(RequestMaterialInfoVo requestMaterialInfoVo);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class CommonPointQueryDto {
|
||||
private String point_code;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class FullVehicleOutConfirmDto {
|
||||
private String point_code;
|
||||
private String vehicle_code;
|
||||
private String residue_num;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class FullVehicleOutDto {
|
||||
private String point_code1;
|
||||
private String point_code2;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class GroupLinkDto {
|
||||
private String group_id;
|
||||
private String vehicle_code;
|
||||
}
|
||||
@@ -14,9 +14,8 @@ public class ManualGroupDto {
|
||||
private String vehicle_code;
|
||||
private String vehicle_type;
|
||||
private String point_code;
|
||||
/**
|
||||
* 不需要的参数
|
||||
*/
|
||||
private String order_code;
|
||||
private BigDecimal material_weight;
|
||||
private String material_id;
|
||||
private String material_code;
|
||||
private String material_qty;
|
||||
private boolean is_link;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class MaterialQueryDto {
|
||||
private String material_id;
|
||||
private String material_code;
|
||||
private String material_name;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class PointsQueryDto {
|
||||
/**
|
||||
* 1、代表获取入库点位信息
|
||||
* 2、代表获取出库点位信息
|
||||
*/
|
||||
private String type;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.nl.wms.pda.service.dao.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class VehicleGoBackDto {
|
||||
private String point_code;
|
||||
private String vehicle_code;
|
||||
private String vehicle_type;
|
||||
private String residue_num;
|
||||
}
|
||||
@@ -12,10 +12,19 @@ import java.util.List;
|
||||
* @Date: 2023/8/1
|
||||
*/
|
||||
public interface PdaMapper {
|
||||
List<DropdownListVo> getDeviceInfo();
|
||||
|
||||
List<PointVo> queryPoints(String region_code);
|
||||
|
||||
List<DropdownListVo> getDictByCode(String code);
|
||||
|
||||
List<MaterialInfoVo> queryMaterial();
|
||||
|
||||
List<VehicleLinkVo> queryVehicleGroup();
|
||||
|
||||
|
||||
|
||||
List<DropdownListVo> getDeviceInfo();
|
||||
|
||||
/**
|
||||
* 根据区域编码和点位名称获取信息
|
||||
*
|
||||
@@ -86,4 +95,7 @@ public interface PdaMapper {
|
||||
* @return
|
||||
*/
|
||||
List<RequestMaterialInfoVo> requestInfo();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,41 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.pda.service.dao.mapper.PdaMapper">
|
||||
|
||||
<select id="queryPoints" resultType="org.nl.wms.pda.service.dao.vo.PointVo">
|
||||
select p.point_code,
|
||||
p.point_name
|
||||
from `sch_base_point` p
|
||||
where p.region_code = #{region_code}
|
||||
</select>
|
||||
|
||||
<select id="getDictByCode" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
|
||||
SELECT `value`,
|
||||
label AS text
|
||||
FROM `sys_dict`
|
||||
WHERE `code` = #{code}
|
||||
</select>
|
||||
|
||||
<select id="queryMaterial" resultType="org.nl.wms.pda.service.dao.vo.MaterialInfoVo">
|
||||
select m.material_id,
|
||||
m.material_code,
|
||||
m.material_name
|
||||
from md_base_material m
|
||||
</select>
|
||||
|
||||
<select id="queryVehicleGroup" resultType="org.nl.wms.pda.service.dao.vo.VehicleLinkVo">
|
||||
select group_id,
|
||||
material_id,
|
||||
material_name,
|
||||
point_code,
|
||||
vehicle_code,
|
||||
vehicle_type
|
||||
from `sch_base_vehiclematerialgroup`
|
||||
where link_status = '0'
|
||||
and group_status = '2'
|
||||
and group_bind_material_status = '2'
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getDeviceInfo" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
|
||||
SELECT p.point_code AS `value`,
|
||||
p.point_name AS text
|
||||
@@ -10,12 +45,7 @@
|
||||
AND p.point_type = '1'
|
||||
AND p.point_code = p.parent_point_code
|
||||
</select>
|
||||
<select id="getDictByCode" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
|
||||
SELECT `value`,
|
||||
label AS text
|
||||
FROM `sys_dict`
|
||||
WHERE `code` = #{code}
|
||||
</select>
|
||||
|
||||
<select id="getDeviceInfos" resultType="org.nl.wms.pda.service.dao.vo.DropdownListVo">
|
||||
SELECT p.point_code AS `value`,
|
||||
p.point_name AS text
|
||||
@@ -36,11 +66,11 @@
|
||||
<select id="forcedRestingShow" resultType="org.nl.wms.pda.service.dao.vo.StandTimeShowVo">
|
||||
SELECT vg.group_id,
|
||||
vg.point_code,
|
||||
p2.point_name AS device_code,
|
||||
p2.point_name AS device_code,
|
||||
vg.standing_time,
|
||||
TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE)) AS timeDifferenceMinutes,
|
||||
TIMESTAMPDIFF(MINUTE, NOW(), DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE)) AS timeDifferenceMinutes,
|
||||
DATE_FORMAT(DATE_ADD(vg.instorage_time, INTERVAL vg.standing_time MINUTE),
|
||||
'%Y-%m-%d %H:%i:%s') AS estimatedCompletionTimeString
|
||||
'%Y-%m-%d %H:%i:%s') AS estimatedCompletionTimeString
|
||||
FROM `sch_base_vehiclematerialgroup` vg
|
||||
LEFT JOIN sch_base_point p1 ON p1.point_code = vg.point_code
|
||||
LEFT JOIN sch_base_point p2 ON p2.point_code = p1.parent_point_code
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.nl.wms.pda.service.dao.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class LinkMaterialVo {
|
||||
private String point_code;
|
||||
private String point_name;
|
||||
private String vehicle_code;
|
||||
private String material_id;
|
||||
private String material_code;
|
||||
private String material_name;
|
||||
private String pcsn;
|
||||
private String material_qty;
|
||||
}
|
||||
@@ -12,6 +12,4 @@ public class MaterialInfoVo {
|
||||
private String material_id;
|
||||
private String material_code;
|
||||
private String material_name;
|
||||
private String material_spec;
|
||||
private String material_model;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.nl.wms.pda.service.dao.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class PointVo {
|
||||
private String point_code;
|
||||
private String point_name;
|
||||
private List<PointVo> end_points = new ArrayList<>();
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.nl.wms.pda.service.dao.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description TODO
|
||||
* @Author Gengby
|
||||
* @Date 2024/1/27
|
||||
*/
|
||||
@Data
|
||||
public class VehicleLinkVo {
|
||||
private String group_id;
|
||||
private String material_code;
|
||||
private String material_id;
|
||||
private String material_name;
|
||||
private String point_code;
|
||||
private String vehicle_code;
|
||||
private String vehicle_type;
|
||||
}
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.nl.wms.pda.service.impl;
|
||||
|
||||
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.LambdaQueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.database.material.service.IMdBaseMaterialService;
|
||||
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
|
||||
@@ -29,10 +33,7 @@ import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.GroupStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.*;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -40,7 +41,10 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -69,6 +73,307 @@ public class PdaServiceImpl implements PdaService {
|
||||
@Autowired
|
||||
private IPdmBdRequestMaterialRecordService requestMaterialRecordService;
|
||||
|
||||
@Override
|
||||
public List<PointVo> queryPoints(PointsQueryDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
String region_code = null;
|
||||
if (StrUtil.equals(requestParam.getType(), "1")) {
|
||||
region_code = "ZP";
|
||||
} else if (StrUtil.equals(requestParam.getType(), "2")) {
|
||||
region_code = "JLHC";
|
||||
}
|
||||
Assert.notBlank(region_code, "传入参数有误!");
|
||||
return pdaMapper.queryPoints(region_code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DropdownListVo> getVehicleType() {
|
||||
return pdaMapper.getDictByCode("vehicle_type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MaterialInfoVo> queryMaterial() {
|
||||
return pdaMapper.queryMaterial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VehicleLinkVo> queryVehicleGroup() {
|
||||
return pdaMapper.queryVehicleGroup();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo manualCreateByPda(ManualGroupDto entity) {
|
||||
Assert.notNull(entity, "参数不能为空!");
|
||||
SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(entity.getVehicle_code(),
|
||||
entity.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue());
|
||||
Assert.isFalse(ObjectUtil.isNotEmpty(groupInfo), "组盘信息已存在");
|
||||
// 获取点位
|
||||
SchBasePoint basePoint = pointService.getById(entity.getPoint_code());
|
||||
// 获取物料
|
||||
MdBaseMaterial material = materialService.getById(entity.getMaterial_id());
|
||||
SchBaseVehiclematerialgroup group = new SchBaseVehiclematerialgroup();
|
||||
group.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
group.setVehicle_type(entity.getVehicle_type());
|
||||
group.setVehicle_code(entity.getVehicle_code());
|
||||
group.setMaterial_id(material.getMaterial_id());
|
||||
group.setSource_vehicle_code(entity.getPoint_code());
|
||||
group.setPoint_code(entity.getPoint_code());
|
||||
group.setPoint_name(basePoint.getPoint_name());
|
||||
group.setInstorage_time(DateUtil.now());
|
||||
group.setMaterial_qty(entity.getMaterial_qty());
|
||||
group.setInstorage_time(DateUtil.now());
|
||||
group.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
|
||||
//判断是否需要配盘
|
||||
group.setLink_status(!entity.is_link() ? LinkStatusEnum.LINK_FINISH.getType() : LinkStatusEnum.LINK_READY.getType());
|
||||
group.setPcsn(!entity.is_link() ? CodeUtil.getNewCode("PCSN_CODE") : null);
|
||||
group.setMove_way(basePoint.getPoint_code());
|
||||
group.setBuss_move_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
group.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
group.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
group.setCreate_time(DateUtil.now());
|
||||
vehiclematerialgroupService.save(group);
|
||||
return PdaResponseVo.pdaResultOk("组盘成功");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponseVo link(List<GroupLinkDto> requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
List<String> groups = requestParam.stream().map(GroupLinkDto::getGroup_id)
|
||||
.collect(Collectors.toList());
|
||||
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lqw =
|
||||
new LambdaQueryWrapper<>();
|
||||
lqw.in(SchBaseVehiclematerialgroup::getGroup_id, groups);
|
||||
List<SchBaseVehiclematerialgroup> list = vehiclematerialgroupService.list(lqw);
|
||||
String pcsn_code = CodeUtil.getNewCode("PCSN_CODE");
|
||||
for (SchBaseVehiclematerialgroup vehiclematerialgroup : list) {
|
||||
vehiclematerialgroup.setLink_status(LinkStatusEnum.LINK_FINISH.getType());
|
||||
vehiclematerialgroup.setPcsn(pcsn_code);
|
||||
vehiclematerialgroup.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
vehiclematerialgroup.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
vehiclematerialgroup.setUpdate_time(DateUtil.now());
|
||||
vehiclematerialgroupService.update(vehiclematerialgroup);
|
||||
}
|
||||
return PdaResponseVo.pdaResultOk("配盘完成");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo callEmptyVehicle(CommonPointQueryDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", requestParam.getPoint_code());
|
||||
param.put("config_code", "ZPQKTask");
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
return PdaResponseVo.pdaResultOk("呼叫空托请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo fullVehicleIn(CommonPointQueryDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", requestParam.getPoint_code());
|
||||
param.put("config_code", "ZPRKTask");
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
return PdaResponseVo.pdaResultOk("满托入库请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo fullVehicleOut(FullVehicleOutDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", requestParam.getPoint_code1());
|
||||
param.put("device_code2", requestParam.getPoint_code2());
|
||||
param.put("config_code", "JLHCQMTask");
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
return PdaResponseVo.pdaResultOk("满托出库请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo vehicleGoBack(VehicleGoBackDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
String vehicle_code = requestParam.getVehicle_code();
|
||||
Assert.notNull(vehicle_code, "载具号不能为空!");
|
||||
String residue_num = requestParam.getResidue_num();
|
||||
Assert.notNull(residue_num, "余料数量不能为空!");
|
||||
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lqw =
|
||||
new LambdaQueryWrapper<>();
|
||||
lqw.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicle_code)
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_status, GroupStatusEnum.IN_STORAGE.getType())
|
||||
.eq(SchBaseVehiclematerialgroup::getLink_status, LinkStatusEnum.LINK_FINISH);
|
||||
SchBaseVehiclematerialgroup groupOne = vehiclematerialgroupService.getOne(lqw);
|
||||
Assert.notNull(groupOne, "载具号:'" + vehicle_code + "',对应的组盘信息不存在!");
|
||||
this.checkQty(groupOne, residue_num);
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", requestParam.getPoint_code());
|
||||
param.put("config_code", "JLHCHKTask");
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
return PdaResponseVo.pdaResultOk("余料回库请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo fullVehicleOutConfirm(FullVehicleOutConfirmDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
String point_code = requestParam.getPoint_code();
|
||||
Assert.notBlank(point_code, "点位编码不能为空!");
|
||||
String vehicle_code = requestParam.getVehicle_code();
|
||||
Assert.notBlank(vehicle_code, "载具号不能为空!");
|
||||
String residue_num = requestParam.getResidue_num();
|
||||
Assert.notBlank(residue_num, "余料数量不能为空!");
|
||||
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lqw =
|
||||
new LambdaQueryWrapper<>();
|
||||
lqw.eq(SchBaseVehiclematerialgroup::getVehicle_code, vehicle_code)
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_status, GroupStatusEnum.IN_STORAGE.getType())
|
||||
.eq(SchBaseVehiclematerialgroup::getLink_status, LinkStatusEnum.LINK_FINISH);
|
||||
SchBaseVehiclematerialgroup groupOne = vehiclematerialgroupService.getOne(lqw);
|
||||
Assert.notNull(groupOne, "载具号:'" + vehicle_code + "',对应的组盘信息不存在!");
|
||||
this.checkQty(groupOne, residue_num);
|
||||
//如果余料数量为0
|
||||
if (residue_num.matches("^0*(\\.\\d+)?$")) {
|
||||
groupOne.setLink_status(LinkStatusEnum.LINK_READY.getType());
|
||||
groupOne.setPcsn("");
|
||||
groupOne.setMaterial_code("");
|
||||
groupOne.setMaterial_id("");
|
||||
groupOne.setMaterial_name("");
|
||||
groupOne.setInstorage_time(DateUtil.now());
|
||||
groupOne.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
groupOne.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
groupOne.setUpdate_time(DateUtil.now());
|
||||
groupOne.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue());
|
||||
vehiclematerialgroupService.update(groupOne);
|
||||
} else {
|
||||
//如果余料数量不为0
|
||||
groupOne.setMaterial_qty(residue_num);
|
||||
groupOne.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
groupOne.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
groupOne.setUpdate_time(DateUtil.now());
|
||||
vehiclematerialgroupService.update(groupOne);
|
||||
}
|
||||
return PdaResponseVo.pdaResultOk("满托出库确认请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VehicleLinkVo> queryLinkMaterial(MaterialQueryDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
LambdaQueryWrapper<SchBaseVehiclematerialgroup> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.eq(SchBaseVehiclematerialgroup::getMaterial_id, requestParam.getMaterial_id())
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue())
|
||||
.eq(SchBaseVehiclematerialgroup::getGroup_status, GroupStatusEnum.IN_STORAGE.getType())
|
||||
.eq(SchBaseVehiclematerialgroup::getLink_status, LinkStatusEnum.LINK_FINISH.getType())
|
||||
.orderByDesc(SchBaseVehiclematerialgroup::getPcsn, SchBaseVehiclematerialgroup::getUpdate_time);
|
||||
List<SchBaseVehiclematerialgroup> list = vehiclematerialgroupService.list(lqw);
|
||||
List<VehicleLinkVo> vehicleLinkVoList = new ArrayList<>();
|
||||
for (SchBaseVehiclematerialgroup group : list) {
|
||||
VehicleLinkVo vehicleLinkVo = new VehicleLinkVo();
|
||||
vehicleLinkVo.setMaterial_id(group.getMaterial_id());
|
||||
vehicleLinkVo.setGroup_id(group.getGroup_id());
|
||||
vehicleLinkVo.setVehicle_code(group.getVehicle_code());
|
||||
vehicleLinkVo.setMaterial_name(group.getMaterial_name());
|
||||
vehicleLinkVo.setPoint_code(group.getPoint_code());
|
||||
vehicleLinkVo.setVehicle_type(group.getVehicle_type());
|
||||
vehicleLinkVo.setMaterial_code(group.getMaterial_code());
|
||||
vehicleLinkVoList.add(vehicleLinkVo);
|
||||
}
|
||||
return vehicleLinkVoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PointVo> queryAllPoints() {
|
||||
LambdaQueryWrapper<SchBasePoint> lqw = new LambdaQueryWrapper<>();
|
||||
//除这些区域外 其它区域都存在定点流转任务
|
||||
//叫料缓存区、组盘区、空托盘缓存区1、空托盘缓存区2、原材料
|
||||
lqw.notIn(SchBasePoint::getRegion_code, "JLHC", "ZP", "KTPHC1", "KTPHC2", "YCL")
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<PointVo> list = this.copyPointVoList(pointService.list(lqw));
|
||||
for (PointVo pointVo : list) {
|
||||
List<PointVo> end_points = pointVo.getEnd_points();
|
||||
SchBasePoint point = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, pointVo.getPoint_code()).eq(SchBasePoint::getIs_used, true));
|
||||
String[] nextPointCodes = point.getNext_point_code().split(",");
|
||||
for (int i = 0; i < nextPointCodes.length; i++) {
|
||||
String nextPointCode = nextPointCodes[i];
|
||||
SchBasePoint one = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, nextPointCode).eq(SchBasePoint::getIs_used, true));
|
||||
PointVo pv = new PointVo();
|
||||
pv.setPoint_code(one.getPoint_code());
|
||||
pv.setPoint_name(one.getPoint_name());
|
||||
end_points.add(pv);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo createP2pTask(FullVehicleOutDto requestParam) {
|
||||
Assert.notNull(requestParam, "参数不能为空!");
|
||||
this.checkNextPoint(requestParam.getPoint_code1(), requestParam.getPoint_code2());
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("device_code", requestParam.getPoint_code1());
|
||||
param.put("device_code2", requestParam.getPoint_code2());
|
||||
param.put("config_code", "P2PTask");
|
||||
param.put("requestNo", IdUtil.simpleUUID());
|
||||
param.put("user_id", "1");
|
||||
taskService.apply(param);
|
||||
return PdaResponseVo.pdaResultOk("创建点对点任务请求成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PointVo> copyPointVoList(List<SchBasePoint> list) {
|
||||
List<PointVo> pointVoList = new ArrayList<>();
|
||||
for (SchBasePoint point : list) {
|
||||
PointVo pointVo = new PointVo();
|
||||
pointVo.setPoint_code(point.getPoint_code());
|
||||
pointVo.setPoint_name(point.getPoint_name());
|
||||
pointVoList.add(pointVo);
|
||||
}
|
||||
return pointVoList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 定点任务判断是否配置下一点位
|
||||
*
|
||||
* @param start_point_code
|
||||
*/
|
||||
private void checkNextPoint(String start_point_code, String end_point_code) {
|
||||
SchBasePoint point = pointService.getById(start_point_code);
|
||||
Assert.notNull(point, "起点有误,起点不存在!");
|
||||
String next_point_code = point.getNext_point_code();
|
||||
Assert.notBlank(next_point_code, "起点未配置下一点位信息!");
|
||||
if (StrUtil.isNotEmpty(end_point_code)) {
|
||||
List<String> next_point_code_list = Arrays.stream(end_point_code.split(",")).collect(Collectors.toList());
|
||||
if (!next_point_code_list.contains(end_point_code)) {
|
||||
throw new BadRequestException("该定点任务有误,所选终点在下一点位配置信息中不存在!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验余料数量是否是0.5的整数倍数
|
||||
*
|
||||
* @param groupOne
|
||||
* @param residue_num
|
||||
*/
|
||||
private void checkQty(SchBaseVehiclematerialgroup groupOne, String residue_num) {
|
||||
String regex = "^\\d+(\\.\\d+)?0*$";
|
||||
Assert.isFalse(Pattern.matches(regex, residue_num), "余料数量有误,不是0.5的整数倍");
|
||||
try {
|
||||
double residueNum = Double.parseDouble(residue_num);
|
||||
double material_qty = Double.parseDouble(groupOne.getMaterial_qty());
|
||||
if (residueNum < 0 || residueNum > material_qty) {
|
||||
throw new BadRequestException("回库余料数量不符合要求,大于原有数量或者小于0!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException("输入数据有误: " + residue_num, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<DropdownListVo> getDeviceInfo() {
|
||||
// 暂定压机区域
|
||||
@@ -85,44 +390,6 @@ public class PdaServiceImpl implements PdaService {
|
||||
return pdaMapper.getDictByCode("device_action");
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponseVo manualCreateByPda(ManualGroupDto entity) {
|
||||
if (ObjectUtil.isEmpty(entity)) {
|
||||
throw new BadRequestException("组盘不能为空");
|
||||
}
|
||||
SchBaseVehiclematerialgroup groupInfo = vehiclematerialgroupService.getGroupInfo(entity.getVehicle_code(),
|
||||
entity.getVehicle_type(), GroupBindMaterialStatusEnum.BOUND.getValue());
|
||||
if (ObjectUtil.isNotEmpty(groupInfo)) {
|
||||
throw new BadRequestException("组盘信息已存在");
|
||||
}
|
||||
// 获取压机工单
|
||||
PdmBdWorkorder bdWorkorder = workorderService.getDeviceProductionTask(entity.getPoint_code());
|
||||
// 获取点位
|
||||
SchBasePoint basePoint = pointService.getById(entity.getPoint_code());
|
||||
// 获取物料
|
||||
MdBaseMaterial material = materialService.getById(bdWorkorder.getMaterial_id());
|
||||
SchBaseVehiclematerialgroup group = new SchBaseVehiclematerialgroup();
|
||||
group.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
group.setVehicle_type(entity.getVehicle_type());
|
||||
group.setVehicle_code(entity.getVehicle_code());
|
||||
group.setMaterial_id(bdWorkorder.getMaterial_id());
|
||||
group.setRedundance_material_code(bdWorkorder.getRaw_material_code());
|
||||
group.setSource_vehicle_code(entity.getPoint_code());
|
||||
group.setPoint_code(entity.getPoint_code());
|
||||
group.setPoint_name(basePoint.getPoint_name());
|
||||
group.setInstorage_time(DateUtil.now());
|
||||
group.setStanding_time(material.getStanding_time());
|
||||
group.setMaterial_weight(entity.getMaterial_weight());
|
||||
group.setWorkorder_code(bdWorkorder.getWorkorder_code());
|
||||
group.setGroup_status(GroupStatusEnum.IN_STORAGE.getType());
|
||||
group.setMove_way(basePoint.getPoint_code());
|
||||
group.setBuss_move_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
group.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
group.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
group.setCreate_time(DateUtil.now());
|
||||
vehiclematerialgroupService.save(group);
|
||||
return PdaResponseVo.pdaResultOk("组盘成功");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DropdownListVo> getBlendingCode() {
|
||||
@@ -171,10 +438,6 @@ public class PdaServiceImpl implements PdaService {
|
||||
return pdaMapper.forcedRestingShow();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DropdownListVo> getVehicleType() {
|
||||
return pdaMapper.getDictByCode("vehicle_type");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ManualWorkOrderVo> manualOrders() {
|
||||
@@ -418,6 +681,7 @@ public class PdaServiceImpl implements PdaService {
|
||||
return PdaResponseVo.pdaResultOk("删除成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 保存组盘信息
|
||||
*
|
||||
@@ -435,7 +699,7 @@ public class PdaServiceImpl implements PdaService {
|
||||
group = new SchBaseVehiclematerialgroup();
|
||||
group.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||
}
|
||||
group.setMaterial_qty(Integer.valueOf(shelfSaveDto.getMaterial_qty()));
|
||||
group.setMaterial_qty(shelfSaveDto.getMaterial_qty());
|
||||
group.setMaterial_id(shelfSaveDto.getMaterial_id());
|
||||
group.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue());
|
||||
group.setVehicle_code(shelfSaveDto.getVehicle_code());
|
||||
|
||||
@@ -66,7 +66,7 @@ public class SchBaseVehiclematerialgroup implements Serializable {
|
||||
private Integer standing_time;
|
||||
|
||||
|
||||
private Integer material_qty;
|
||||
private String material_qty;
|
||||
|
||||
|
||||
private BigDecimal material_weight;
|
||||
@@ -89,6 +89,8 @@ public class SchBaseVehiclematerialgroup implements Serializable {
|
||||
|
||||
private String group_status;
|
||||
|
||||
private String link_status;
|
||||
|
||||
private String move_way;
|
||||
|
||||
|
||||
|
||||
@@ -209,4 +209,9 @@ public class SchBaseVehiclematerialgroupDto implements Serializable {
|
||||
* 泥料编码
|
||||
*/
|
||||
private String raw_material_code;
|
||||
|
||||
/**
|
||||
* 配盘状态 0待配盘 1配盘完成
|
||||
*/
|
||||
private String link_status;
|
||||
}
|
||||
|
||||
@@ -86,6 +86,8 @@ public class SchBasePoint implements Serializable {
|
||||
|
||||
private String parent_point_code;
|
||||
|
||||
private String next_point_code;
|
||||
|
||||
|
||||
private String ext_point_code;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ 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 cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -250,6 +251,7 @@ public abstract class AbstractTask {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
// 请求点
|
||||
String apply_point_code = param.getString("device_code");
|
||||
String device_code2 = param.getString("device_code2");
|
||||
String config_code = param.getString("config_code");
|
||||
String requestNo = param.getString("requestNo");
|
||||
String vehicleType = param.getString("vehicle_type");
|
||||
@@ -308,6 +310,10 @@ public abstract class AbstractTask {
|
||||
task.setRequest_param(JSONObject.toJSONString(param));
|
||||
// 设置创建人信息
|
||||
TaskUtils.setCreateByAcsOrPda(task, param);
|
||||
//定点任务point_code2确定
|
||||
if (StrUtil.isNotEmpty(device_code2)) {
|
||||
task.setPoint_code2(device_code2);
|
||||
}
|
||||
// 3、判断是否直接找点下发
|
||||
// 立即创建吧组盘放到具体位置,免得重复创建
|
||||
if (taskConfig.getIs_immediate_create()) {
|
||||
|
||||
@@ -57,6 +57,14 @@ public class GeneralDefinition {
|
||||
* 钢托盘
|
||||
*/
|
||||
public static final String STEEL_TRAY = "GTP";
|
||||
/**
|
||||
* 1500*1500载具
|
||||
*/
|
||||
public static final String VEHICLE_TYPE_1500_1500 = "1";
|
||||
/**
|
||||
* 1500*1800载具
|
||||
*/
|
||||
public static final String VEHICLE_TYPE_1500_1800 = "2";
|
||||
// 账号定义
|
||||
/**
|
||||
* acs系统
|
||||
|
||||
@@ -14,7 +14,7 @@ public enum GroupBindMaterialStatusEnum {
|
||||
/**
|
||||
* 待绑定
|
||||
*/
|
||||
WAIT_BIND("1", "带绑定"),
|
||||
WAIT_BIND("1", "待绑定"),
|
||||
/**
|
||||
* 已绑定
|
||||
*/
|
||||
|
||||
@@ -12,29 +12,14 @@ import lombok.Getter;
|
||||
@AllArgsConstructor
|
||||
public enum GroupStatusEnum {
|
||||
/**
|
||||
* 系统外
|
||||
* 组盘中
|
||||
*/
|
||||
OUT_SYSTEM("1", "系统外"),
|
||||
OUT_SYSTEM("1", "未组盘"),
|
||||
/**
|
||||
* 存储中
|
||||
* 组盘完成
|
||||
*/
|
||||
IN_STORAGE("2", "存储中"),
|
||||
/**
|
||||
* 处理中
|
||||
*/
|
||||
IN_PROCESS("3", "处理中"),
|
||||
/**
|
||||
* 搬运中
|
||||
*/
|
||||
IN_CARRY("4", "搬运中"),
|
||||
/**
|
||||
* 可放料
|
||||
*/
|
||||
DISCHARGE_MATERIAL("5", "可放料"),
|
||||
/**
|
||||
* 可取料
|
||||
*/
|
||||
CABLE_RETRIEVABLE_MATERIAL("6", "可取料");
|
||||
IN_STORAGE("2", "组盘完成");
|
||||
|
||||
|
||||
private final String type;
|
||||
private final String name;
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.nl.wms.sch.task_manage.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 配盘状态枚举
|
||||
* @Date: 2023/5/24
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum LinkStatusEnum {
|
||||
/**
|
||||
* 未配盘
|
||||
*/
|
||||
LINK_READY("0", "未配盘"),
|
||||
/**
|
||||
* 配盘完成
|
||||
*/
|
||||
LINK_FINISH("1", "配盘完成");
|
||||
|
||||
private final String type;
|
||||
private final String name;
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.lmzb;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 蜡模制备区呼叫空托
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "LMZBQKTask")
|
||||
@TaskType("LMZBQKTask")
|
||||
public class LMZBQKTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "LMZBQKTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("空托缓存2区暂无空托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("空托缓存2区暂无空托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从起点区域获取空托位
|
||||
*
|
||||
* @param startRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, startRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//终点不需要记录点位状态和载具信息
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.lmzp;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 蜡模组盘区呼叫空托
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "LMZPQKTask")
|
||||
@TaskType("LMZPQKTask")
|
||||
public class LMZPQKTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "LMZPQKTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("空托缓存1区暂无空托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("空托缓存1区暂无空托盘!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从起点区域获取空托位
|
||||
*
|
||||
* @param startRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, startRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//终点不需要记录点位状态和载具信息
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,210 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.p2p;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.PointStatusEnum;
|
||||
import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 手持点对点任务
|
||||
* 流转点位
|
||||
* 如果手持指定终点则使用该终点
|
||||
* 如果手持未指定终点,则根据点位表中配置的下一点位信息进行查找
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "P2PTask")
|
||||
@TaskType("P2PTask")
|
||||
public class P2PTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "P2PTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
String point_code2 = task.getPoint_code2();
|
||||
SchBasePoint endPoint = null;
|
||||
if (StrUtil.isEmpty(point_code2)) {
|
||||
endPoint = findEndPoint(task.getPoint_code1());
|
||||
} else {
|
||||
LambdaQueryWrapper<SchBasePoint> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.eq(SchBasePoint::getPoint_code, point_code2)
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
endPoint = pointService.getOne(lqw);
|
||||
}
|
||||
if (ObjectUtil.isEmpty(endPoint)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("任务创建失败,该点位存在任务!", TASK_CONFIG_CODE + task.getPoint_code1(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("任务创建失败,该点位存在任务!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(endPoint.getVehicle_qty());
|
||||
task.setVehicle_type(endPoint.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
endPoint.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(endPoint);
|
||||
pointService.updateById(endPoint);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据起点去找终点
|
||||
* 为了方便点对点任务
|
||||
* 需要在对应起点配置下一点位
|
||||
*
|
||||
* @param startPointCode
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findEndPoint(String startPointCode) {
|
||||
SchBasePoint startPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, startPointCode));
|
||||
if (startPoint != null) {
|
||||
List<String> nextPointCodes = Arrays.stream(startPoint.getNext_point_code().split(",")).collect(Collectors.toList());
|
||||
LambdaQueryWrapper<SchBasePoint> lqw = new LambdaQueryWrapper();
|
||||
lqw.in(SchBasePoint::getPoint_code, nextPointCodes)
|
||||
.and(la -> la.isNull(SchBasePoint::getPoint_status)
|
||||
.or()
|
||||
.eq(SchBasePoint::getPoint_status, "")
|
||||
.or()
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT))
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lqw);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//终点不需要记录点位状态和载具信息
|
||||
//如果终点是空托盘缓存1区或者空托盘缓存2区 则更改终点点位的状态
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
if ("KTPHC1".equals(endPointObj.getRegion_code()) || "KTPHC2".equals(endPointObj.getRegion_code())) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
|
||||
//endPointObj.setVehicle_type(GeneralDefinition.VEHICLE_TYPE_1500_1500);
|
||||
//endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.ycl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
|
||||
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.*;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 叫料缓存区回库任务(剩余物料或空托盘)
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "JLHCHKTask")
|
||||
@TaskType("JLHCHKTask")
|
||||
public class JLHCHKTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "JLHCHKTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findNextPoint(nextRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("原材料库没有空位!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("原材料库没有空位!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从终点区域查询空位
|
||||
*
|
||||
* @param nextRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findNextPoint(List<String> nextRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, nextRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//更新终点的点位信息
|
||||
//更新组盘表载具对应的点位信息
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode());
|
||||
endPointObj.setVehicle_type(endPointObj.getCan_vehicle_type());
|
||||
endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
|
||||
SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id());
|
||||
TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType);
|
||||
vehiclematerialgroup.setTask_code(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code());
|
||||
vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name());
|
||||
vehiclematerialgroup.setMove_way(taskObj.getPoint_code1() + "->" + taskObj.getPoint_code2());
|
||||
vehiclematerialgroupService.updateById(vehiclematerialgroup);
|
||||
}
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.ycl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
|
||||
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.*;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 叫料缓存区取满托任务
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "JLHCQMTask")
|
||||
@TaskType("JLHCQMTask")
|
||||
public class JLHCQMTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "JLHCQMTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("原材料库没有满托!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("原材料库没有满托!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从起点区域获取空托位
|
||||
*
|
||||
* @param startRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, startRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//终点不需要记录点位状态和载具信息
|
||||
//但是需要更新组盘表中载具所在的点位信息
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id());
|
||||
TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType);
|
||||
vehiclematerialgroup.setTask_code(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code());
|
||||
vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name());
|
||||
vehiclematerialgroup.setMove_way(taskObj.getPoint_code1() + "->" + taskObj.getPoint_code2());
|
||||
vehiclematerialgroupService.updateById(vehiclematerialgroup);
|
||||
}
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.ycl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
|
||||
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.*;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 组盘区取空托任务
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "ZPQKTask")
|
||||
@TaskType("ZPQKTask")
|
||||
public class ZPQKTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "ZPQKTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找起点
|
||||
SchBasePoint point = findStartPoint(startRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("原材料库中未查询到空托盘!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("原材料库中未查询到空托盘!");
|
||||
}
|
||||
// 设置起点并修改创建成功状态
|
||||
task.setPoint_code1(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从起点区域获取空托位
|
||||
*
|
||||
* @param startRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findStartPoint(List<String> startRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, startRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_VEHICLE.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//终点不需要记录点位状态和载具信息
|
||||
//但是需要更新组盘表中载具所在的点位信息
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id());
|
||||
TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType);
|
||||
vehiclematerialgroup.setTask_code(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code());
|
||||
vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name());
|
||||
vehiclematerialgroup.setMove_way(taskObj.getPoint_code1() + "->" + taskObj.getPoint_code2());
|
||||
vehiclematerialgroupService.updateById(vehiclematerialgroup);
|
||||
}
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
package org.nl.wms.sch.task_manage.task.tasks.ycl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService;
|
||||
import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.enums.*;
|
||||
import org.nl.wms.sch.task_manage.task.TaskType;
|
||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 组盘区组盘完成入库任务
|
||||
*
|
||||
* @author onepiece
|
||||
*/
|
||||
@Component(value = "ZPRKTask")
|
||||
@TaskType("ZPRKTask")
|
||||
public class ZPRKTask extends AbstractTask {
|
||||
private static final String TASK_CONFIG_CODE = "ZPRKTask";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBaseTaskconfigService taskConfigService;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
@Autowired
|
||||
private ISchBaseVehiclematerialgroupService vehiclematerialgroupService;
|
||||
|
||||
@Override
|
||||
public void create() throws BadRequestException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 配置信息
|
||||
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
|
||||
TaskUtils.setUpdateByAcs(task);
|
||||
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
|
||||
.collect(Collectors.toList());
|
||||
// 找终点
|
||||
SchBasePoint point = findEndPoint(nextRegionStr);
|
||||
if (ObjectUtil.isEmpty(point)) {
|
||||
// 消息通知
|
||||
noticeService.createNotice("原材料库未找到终点空位!", TASK_CONFIG_CODE + task.getPoint_code2(),
|
||||
NoticeTypeEnum.WARN.getCode());
|
||||
throw new BadRequestException("原材料库未找到终点空位!");
|
||||
}
|
||||
// 设置终点并修改创建成功状态
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
task.setRemark("");
|
||||
task.setVehicle_qty(point.getVehicle_qty());
|
||||
task.setVehicle_type(point.getCan_vehicle_type());
|
||||
task.setTask_status(TaskStatus.CREATED.getCode());
|
||||
taskService.save(task);
|
||||
// 点位更新
|
||||
point.setIng_task_code(task.getTask_code());
|
||||
PointUtils.setUpdateByAcs(point);
|
||||
pointService.updateById(point);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从原材料库找空位
|
||||
*
|
||||
* @param nextRegionStr
|
||||
* @return
|
||||
*/
|
||||
private SchBasePoint findEndPoint(List<String> nextRegionStr) {
|
||||
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
|
||||
// 默认一直都有载具
|
||||
lam.in(SchBasePoint::getRegion_code, nextRegionStr)
|
||||
// 点位状态是空托
|
||||
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
|
||||
// 当前执行的任务为空或者NULL,有数据表示锁住
|
||||
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
|
||||
.or()
|
||||
.eq(SchBasePoint::getIng_task_code, ""))
|
||||
.eq(SchBasePoint::getIs_used, true);
|
||||
List<SchBasePoint> schBasePoints = pointService.list(lam);
|
||||
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateStatus(String task_code, TaskStatus status) {
|
||||
// 校验任务
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) {
|
||||
throw new BadRequestException("该任务已完成!");
|
||||
}
|
||||
if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) {
|
||||
throw new BadRequestException("该任务已取消!");
|
||||
}
|
||||
// 根据传来的类型去对任务进行操作
|
||||
if (status.equals(TaskStatus.EXECUTING)) {
|
||||
taskObj.setTask_status(TaskStatus.EXECUTING.getCode());
|
||||
taskObj.setRemark("执行中");
|
||||
TaskUtils.setUpdateByAcs(taskObj);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
if (status.equals(TaskStatus.FINISHED)) {
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
if (status.equals(TaskStatus.CANCELED)) {
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceFinish(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String task_code) {
|
||||
SchBaseTask taskObj = taskService.getByCode(task_code);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点清空
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
PointUtils.clearPoint(startPointObj);
|
||||
//更新终点的点位信息
|
||||
//更新组盘表载具对应的点位信息
|
||||
SchBasePoint endPointObj = pointService.getById(taskObj.getPoint_code2());
|
||||
if (ObjectUtil.isNotEmpty(endPointObj)) {
|
||||
endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode());
|
||||
endPointObj.setVehicle_type(endPointObj.getCan_vehicle_type());
|
||||
endPointObj.setVehicle_qty(taskObj.getVehicle_qty());
|
||||
endPointObj.setUpdate_time(DateUtil.now());
|
||||
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
|
||||
pointService.updateById(endPointObj);
|
||||
|
||||
SchBaseVehiclematerialgroup vehiclematerialgroup = vehiclematerialgroupService.getById(taskObj.getGroup_id());
|
||||
TaskUtils.setGroupUpdateByType(vehiclematerialgroup, taskFinishedType);
|
||||
vehiclematerialgroup.setTask_code(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setBuss_move_id(taskObj.getTask_code());
|
||||
vehiclematerialgroup.setPoint_code(endPointObj.getPoint_code());
|
||||
vehiclematerialgroup.setPoint_name(endPointObj.getPoint_name());
|
||||
vehiclematerialgroup.setMove_way(taskObj.getPoint_code1() + "->" + taskObj.getPoint_code2());
|
||||
vehiclematerialgroupService.updateById(vehiclematerialgroup);
|
||||
}
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_FINISH);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
// 获取参数
|
||||
SchBasePoint startPointObj = pointService.getById(taskObj.getPoint_code1());
|
||||
// 起点解锁
|
||||
if (ObjectUtil.isNotEmpty(startPointObj)) {
|
||||
startPointObj.setIng_task_code("");
|
||||
PointUtils.setUpdateByType(startPointObj, taskFinishedType);
|
||||
pointService.updateById(startPointObj);
|
||||
}
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
}
|
||||
@@ -69,7 +69,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<appender-ref ref="FILE"/>
|
||||
</appender>
|
||||
<!--开发环境:打印控制台-->
|
||||
<springProfile name="dev">
|
||||
<springProfile name="dev2">
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="asyncLuceneAppender"/>
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
package org.nl;
|
||||
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
|
||||
/**
|
||||
@@ -9,5 +17,27 @@ import org.springframework.boot.test.context.SpringBootTest;
|
||||
* @Date: 2023/5/15
|
||||
*/
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
public class ApplicationTest {
|
||||
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
for (int i = 1; i < 7; i++) {
|
||||
for (int i1 = 1; i1 < 9; i1++) {
|
||||
for (int i2 = 1; i2 < 4; i2++) {
|
||||
SchBasePoint point = new SchBasePoint();
|
||||
point.setPoint_code("0" + i + "-0" + i1 + "-0" + i2);
|
||||
point.setPoint_name("0" + i + "排-0" + i1 + "列-0" + i2 + "层");
|
||||
point.setRegion_code("YCL");
|
||||
point.setPoint_status("1");
|
||||
point.setPoint_type("1");
|
||||
point.setIs_has_workder(false);
|
||||
pointService.create(point);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user