rev:更新

This commit is contained in:
2024-02-18 11:09:46 +08:00
parent bbb76ddc84
commit 8e04672090
50 changed files with 2615 additions and 414 deletions

View File

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

View File

@@ -20,4 +20,12 @@ public interface AcsToWmsService {
*/
BaseResponse acsApply(JSONObject param);
/**
* 任务:申请补空料盅托盘(叫空盘)
*
* @param param
* @return
*/
ApplyTaskResponse applyPutEmptyVehicle(JSONObject param);
}

View File

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

View File

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

View File

@@ -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("获取混碾机编码")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -209,4 +209,9 @@ public class SchBaseVehiclematerialgroupDto implements Serializable {
* 泥料编码
*/
private String raw_material_code;
/**
* 配盘状态 0待配盘 1配盘完成
*/
private String link_status;
}

View File

@@ -86,6 +86,8 @@ public class SchBasePoint implements Serializable {
private String parent_point_code;
private String next_point_code;
private String ext_point_code;

View File

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

View File

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

View File

@@ -14,7 +14,7 @@ public enum GroupBindMaterialStatusEnum {
/**
* 待绑定
*/
WAIT_BIND("1", "绑定"),
WAIT_BIND("1", "绑定"),
/**
* 已绑定
*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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