add:手持接口增加空料位送空蛊到下料位、困料货架任务;压制看板修改查询当班生产接口;分拣看板修改顶部分拣线、查询已码垛数据

This commit is contained in:
songxiaopeng
2024-04-23 17:12:08 +08:00
parent a52c182a47
commit de871c3947
14 changed files with 445 additions and 64 deletions

View File

@@ -0,0 +1,12 @@
package org.nl.wms.cockpit.service.dao;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class RgSortingLineVo {
private String pointName;
private String materialName;
}

View File

@@ -13,4 +13,7 @@ public class ShiftProductionVo {
private String qualifiedQty;
private String unqualifiedQty;
private String lastQty;
private String workOrderCode;
private String pointCode;
private String planQty;
}

View File

@@ -0,0 +1,16 @@
package org.nl.wms.cockpit.service.dao;
import lombok.Data;
import java.util.List;
/**
* @author Administrator
*/
@Data
public class SortingLineRes {
private List<SortingLineVo> sortingLines;
private List<RgSortingLineVo> rgSortingLine;
private String rgPlanQty;
private String rgRealQty;
}

View File

@@ -50,7 +50,23 @@ public class CockpitServiceImpl implements CockpitService {
});
// 2、当班生产
CompletableFuture<List<ShiftProductionVo>> listShiftProductionFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getShiftProductionList(), pool);
() -> {
List<ShiftProductionVo> shiftProductionList = cockPitMapper.getShiftProductionList();
if (shiftProductionList.isEmpty()) {
return null;
}
for (ShiftProductionVo productionVo : shiftProductionList) {
ShiftProductionVo res = cockPitMapper.selectQtByVo(productionVo);
productionVo.setQualifiedQty(res.getQualifiedQty());
productionVo.setUnqualifiedQty(res.getUnqualifiedQty());
int plan = Integer.parseInt(productionVo.getPlanQty());
int unqualified = Integer.parseInt(productionVo.getUnqualifiedQty());
int qualified = Integer.parseInt(productionVo.getQualifiedQty());
int lastQty = plan - unqualified - qualified;
productionVo.setLastQty(String.valueOf(Math.max(lastQty, 0)));
}
return shiftProductionList;
}, pool);
listShiftProductionFuture.thenAccept(result -> {
map.put("ShiftProductionList", result);
}).exceptionally((e) -> {
@@ -98,8 +114,18 @@ public class CockpitServiceImpl implements CockpitService {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
ConcurrentHashMap<String, Object> resultMap = new ConcurrentHashMap<>();
//查询分拣线信息
CompletableFuture<List<SortingLineVo>> sortingLineCompletableFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getSortingLine(), pool);
CompletableFuture<SortingLineRes> sortingLineCompletableFuture = CompletableFuture.supplyAsync(
() -> {
SortingLineRes res = new SortingLineRes();
List<SortingLineVo> sortingLine = cockPitMapper.getSortingLine();
List<RgSortingLineVo> rgSortingLine = cockPitMapper.getRgSortingLineVo();
SortingLineRes sortCount = cockPitMapper.selectRgSortCount();
res.setRgRealQty(sortCount.getRgRealQty());
res.setRgPlanQty(sortCount.getRgPlanQty());
res.setRgSortingLine(rgSortingLine);
res.setSortingLines(sortingLine);
return res;
}, pool);
sortingLineCompletableFuture.thenAccept(res -> {
resultMap.put("sortingLine", res);
}).exceptionally((e) -> {
@@ -107,7 +133,7 @@ public class CockpitServiceImpl implements CockpitService {
resultMap.put("sortingLine", null);
return null;
});
//查询当日拆垛信息 todo
//查询当日拆垛信息
CompletableFuture<List<StackVo>> unstackingCompletableFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getUnstackingList(), pool);
unstackingCompletableFuture.thenAccept(res -> {
@@ -117,6 +143,16 @@ public class CockpitServiceImpl implements CockpitService {
resultMap.put("unstackingList", null);
return null;
});
//查询当日码垛信息
CompletableFuture<List<StackVo>> stackingCompletableFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getStackingList(), pool);
unstackingCompletableFuture.thenAccept(res -> {
resultMap.put("stackingList", res);
}).exceptionally((e) -> {
log.error("获取当日已拆垛信息: {}", e.getMessage(), e);
resultMap.put("stackingList", null);
return null;
});
//查询剩余工单列表
CompletableFuture<List<WorkOrderVo>> lastWorkOrderCompletableFuture = CompletableFuture.supplyAsync(
() -> cockPitMapper.getLastWorkOrderList(), pool);
@@ -129,6 +165,7 @@ public class CockpitServiceImpl implements CockpitService {
});
CompletableFuture<Void> allQuery = CompletableFuture.allOf(
sortingLineCompletableFuture,
stackingCompletableFuture,
unstackingCompletableFuture,
lastWorkOrderCompletableFuture);
CompletableFuture<ConcurrentHashMap<String, Object>> future
@@ -289,7 +326,7 @@ public class CockpitServiceImpl implements CockpitService {
object.remove("error");
for (PressPointInfo pointInfo : yjPoints) {
String deviceCode = object.getString("device_code");
if (StringUtils.isNotEmpty(deviceCode) && pointInfo.getPointCode().equals(deviceCode.substring(0, 4))){
if (StringUtils.isNotEmpty(deviceCode) && pointInfo.getPointCode().equals(deviceCode.substring(0, 4))) {
object.put("materialCode", pointInfo.getMaterialCode());
}
}

View File

@@ -19,9 +19,14 @@ public interface CockPitMapper {
List<ProductTaskVo> getProductionTaskList();
List<SortingLineVo> getSortingLine();
List<RgSortingLineVo> getRgSortingLineVo();
List<StackVo> getUnstackingList();
List<StackVo> getStackingList();
SortingLineRes selectRgSortCount();
List<WorkOrderVo> getLastWorkOrderList();
List<MixingVo> getMixingList();
@@ -63,4 +68,7 @@ public interface CockPitMapper {
List<String> selectYzslwPoint();
FjPintInfoVo selectFJJXSMaterialInfo(String pointCode);
ShiftProductionVo selectQtByVo(ShiftProductionVo productionVo);
}

View File

@@ -2,26 +2,31 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.cockpit.service.mapper.CockPitMapper">
<select id="getPressProductHeaderList" resultType="org.nl.wms.cockpit.service.dao.PressProductHeaderVo">
SELECT SUM(w.plan_qty) AS planQty,
SUM(w.real_qty) AS realQty,
SUM(w.qualified_qty) AS qualifiedQty,
SUM(w.unqualified_qty) AS unqualifiedQty
SELECT SUM(w.plan_qty) AS planQty,
SUM(w.real_qty) AS realQty,
(SELECT COUNT(1)
FROM `md_base_brick_info` mi
WHERE mi.workorder_code IN
(SELECT workorder_code FROM pdm_bd_workorder WHERE region_code = 'YZ' AND workorder_status = '3')
AND mi.is_qualified = '1') AS qualifiedQty,
(SELECT COUNT(1)
FROM `md_base_brick_info` mi
WHERE mi.workorder_code IN
(SELECT workorder_code FROM pdm_bd_workorder WHERE region_code = 'YZ' AND workorder_status = '3')
AND mi.is_qualified = '0') AS unqualifiedQty
FROM pdm_bd_workorder w
WHERE w.region_code = 'YZ'
AND workorder_status='3'
AND w.workorder_status = '3'
</select>
<select id="getShiftProductionList" resultType="org.nl.wms.cockpit.service.dao.ShiftProductionVo">
SELECT w.point_name AS columnName,
SUM(w.qualified_qty) AS qualifiedQty,
SUM(w.unqualified_qty) AS unqualifiedQty,
SUM(w.plan_qty - w.qualified_qty - w.unqualified_qty) AS lastQty
SELECT w.point_name AS columnName,
w.workorder_code as workOrderCode,
w.point_code as pointCode,
w.plan_qty as planQty
FROM `pdm_bd_workorder` w
WHERE w.region_code = 'YZ'
AND w.workorder_status='3'
GROUP BY
w.point_name
ORDER BY
w.point_name
AND w.workorder_status = '3'
order by point_code
</select>
<select id="getPressOrderVoList" resultType="org.nl.wms.cockpit.service.dao.PressOrderVo">
@@ -36,15 +41,14 @@
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
WHERE w.region_code = 'YZ'
AND w.workorder_status='3'
GROUP BY
m.order_number
AND w.workorder_status = '3'
GROUP BY m.order_number
</select>
<select id="getProductionTaskList" resultType="org.nl.wms.cockpit.service.dao.ProductTaskVo">
SELECT w.point_name AS device,
w.workorder_code as workorderCode,
w.team,
m.material_name as materialName,
m.material_code as materialName,
w.planproducestart_date as planproducestartDate,
w.plan_qty as planQty,
w.real_qty as realQty,
@@ -75,34 +79,64 @@
w.plan_qty AS planQty,
w.real_qty AS realQty,
c.cust_name AS customer,
m.material_name AS materialName,
m.material_code AS materialName,
m.material_spec AS materialSpec
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
LEFT JOIN md_cs_customerbase c ON w.customer = c.cust_id
WHERE w.region_code in ('FJ', 'RGFJ')
WHERE w.region_code = 'FJ'
AND w.workorder_status = '3'
ORDER BY w.create_time
</select>
<select id="getRgSortingLineVo" resultType="org.nl.wms.cockpit.service.dao.RgSortingLineVo">
SELECT w.point_name AS pointName,
m.material_code AS materialName
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
WHERE w.region_code = 'RGFJ'
AND w.workorder_status = '3'
ORDER BY w.point_code
</select>
<select id="getUnstackingList" resultType="org.nl.wms.cockpit.service.dao.StackVo">
SELECT t.create_time AS createTime,
t.vehicle_code AS vehicleCode,
m.material_name AS materialName,
SELECT g.create_time AS createTime,
g.vehicle_code AS vehicleCode,
g.material_qty AS materialQty,
g.material_weight AS materialWeight
FROM `sch_base_task` t
LEFT JOIN sch_base_vehiclematerialgroup g ON t.group_id = g.group_id
g.material_weight AS materialWeight,
m.material_code AS materialName
FROM sch_base_vehiclematerialgroup g
LEFT JOIN md_base_material m ON g.material_id = m.material_id
WHERE t.config_code = 'FJQLTask'
AND t.task_status = '5'
AND DATE (t.create_time) = CURDATE()
order by t.create_time desc
WHERE g.point_code LIKE ('%CDW%')
AND DATE (g.update_time) = CURDATE()
ORDER BY g.update_time DESC
</select>
<select id="getStackingList" resultType="org.nl.wms.cockpit.service.dao.StackVo">
SELECT g.create_time as createTime,
g.vehicle_code as vehicleCode,
g.material_qty as materialQty,
g.material_weight as materialWeight,
m.material_code as materialName
FROM sch_base_vehiclematerialgroup g
LEFT JOIN pdm_bd_workorder w ON g.workorder_code = w.workorder_code
left join md_base_material m on g.material_id = m.material_id
WHERE w.region_code = 'FJ'
AND DATE (g.update_time) = CURDATE()
order by g.create_time desc
</select>
<select id="selectRgSortCount" resultType="org.nl.wms.cockpit.service.dao.SortingLineRes">
SELECT sum(plan_qty) as rgPlanQty,
sum(real_qty) as rgRealQty
FROM pdm_bd_workorder
WHERE region_code = 'RGFJ'
AND workorder_status = '3'
</select>
<select id="getLastWorkOrderList" resultType="org.nl.wms.cockpit.service.dao.WorkOrderVo">
SELECT w.workorder_code as workorderCode,
m.material_name as materialName,
m.material_code as materialName,
m.material_spec as materialSpec,
w.plan_qty as planQty,
w.plan_weight as planWeight,
@@ -116,19 +150,19 @@
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
LEFT JOIN md_cs_customerbase c ON w.customer = c.cust_id
WHERE w.region_code = 'FJ'
WHERE w.region_code in ('FJ', 'RGFJ')
AND w.workorder_status <![CDATA[ <> ]]> '5'
ORDER BY w.create_time
</select>
<select id="getMixingList" resultType="org.nl.wms.cockpit.service.dao.MixingVo">
SELECT m.material_code AS materialName,
SELECT m.material_code AS materialName,
SUM(w.plan_weight) AS planQty,
SUM(w.real_weight) AS realQty
FROM pdm_bd_workorder w
LEFT JOIN md_base_material m ON m.material_id = w.material_id
WHERE w.region_code = 'HN'
AND w.workorder_status='3'
AND w.workorder_status = '3'
GROUP BY m.material_code
order by m.material_code
</select>
@@ -152,11 +186,8 @@
SUM(qualified_qty) AS suppressedNum
FROM pdm_bd_workorder
WHERE region_code = 'YZ'
GROUP BY
produceDate
ORDER BY
produceDate DESC
limit 7
GROUP BY produceDate
ORDER BY produceDate DESC limit 7
</select>
<select id="selectAllDevice" resultType="java.lang.String">
@@ -188,9 +219,7 @@
from sch_base_task
where config_code = 'CYHCXMLTask'
and task_status = '5'
and DATE ( create_time ) = CURDATE()) as palletNum,
sum(material_qty) as deliveredMaterialNum,
sum(CASE WHEN point_code = 'CYHCX01' THEN material_qty ELSE 0 END) AS materialNum
and DATE ( create_time ) = CURDATE()) as palletNum, sum (material_qty) as deliveredMaterialNum, sum (CASE WHEN point_code = 'CYHCX01' THEN material_qty ELSE 0 END) AS materialNum
from sch_base_vehiclematerialgroup
where out_kiln_time is not null
and DATE ( create_time ) = CURDATE()
@@ -264,9 +293,9 @@
ORDER BY p.point_code
</select>
<select id="queryRecord" resultType="org.nl.wms.cockpit.service.dao.ErrorRecordVo">
SELECT r.device_code as deviceCode,
r.error as errorInfo,
r.record_time as errorTime,
SELECT r.device_code as deviceCode,
r.error as errorInfo,
r.record_time as errorTime,
if(LENGTH(p.point_name) <![CDATA[ > ]]> 0, p.point_name, r.device_code) as deviceName
FROM `das_device_error_record` r
LEFT JOIN sch_base_point p ON r.device_code = p.point_code
@@ -329,7 +358,7 @@
<select id="selectYzslwPoint" resultType="java.lang.String">
SELECT point_code AS device_code
FROM `sch_base_point`
WHERE point_type in ('3','4')
WHERE point_type in ('3', '4')
and region_code = 'YZ'
</select>
<select id="selectFJJXSMaterialInfo" resultType="org.nl.wms.cockpit.service.dao.FjPintInfoVo">
@@ -338,8 +367,14 @@
FROM pdm_bd_workorder p
LEFT JOIN md_base_material m ON p.material_id = m.material_id
WHERE p.workorder_status = '3'
and p.point_code = #{pointCode}
limit 1
and p.point_code = #{pointCode} limit 1
</select>
<select id="selectQtByVo" resultType="org.nl.wms.cockpit.service.dao.ShiftProductionVo">
SELECT COUNT(CASE WHEN is_qualified = '1' THEN 1 END) AS qualifiedQty,
COUNT(CASE WHEN is_qualified = '0' THEN 1 END) AS unqualifiedQty
FROM md_base_brick_info
WHERE workorder_code = #{workOrderCode}
AND get_station = #{pointCode}
</select>
</mapper>

View File

@@ -581,10 +581,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return BaseResponse.responseError(requestNo, "未找到工单号[" + workorderCode + "]的记录!");
}
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.COMPLETE.getCode());
//如果是混碾工单则先暂存手持或者lms那边再手动进行工单完成
if("HN".equals(bdWorkorder.getRegion_code())){
bdWorkorder.setWorkorder_status(WorkOrderStatusEnum.STAGING.getCode());
}
bdWorkorder.setRealproduceend_date(DateUtil.now());
TaskUtils.setWorkOrderUpdateByAcs(bdWorkorder);
// 统计合不合格数量到工单字段中

View File

@@ -78,6 +78,13 @@ public class PdaController {
return new ResponseEntity<>(pdaService.cbjmlTask(req), HttpStatus.OK);
}
@PostMapping("/cbjskTask")
@Log("拆包机空料位送空蛊")
@ApiOperation("拆包机空料位送空蛊")
public ResponseEntity<Object> cbjskTask(@RequestBody TaskReq req) {
return new ResponseEntity<>(pdaService.cbjskTask(req), HttpStatus.OK);
}
@PostMapping("/cbjqkTask")
@Log("拆包机下料位叫空蛊")
@ApiOperation("拆包机下料位叫空蛊")

View File

@@ -74,6 +74,8 @@ public interface PdaService {
PdaResponseVo cbjmlTask(TaskReq req);
PdaResponseVo cbjskTask(TaskReq req);
PdaResponseVo cbjqkTask(TaskReq req);
PdaResponseVo yzqlTask(TaskReq req);

View File

@@ -11,4 +11,5 @@ public class TaskReq {
private String startPoint;
private String endPoint;
private String barCode;
private String nextType;
}

View File

@@ -36,12 +36,12 @@
<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,
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
@@ -167,7 +167,8 @@
<select id="selectUnpackShelfInfo" resultType="org.nl.wms.pda.service.dao.vo.ShelfInfoVo">
select p.point_code as pointCode, m.material_code as materialCode, g.instorage_time as instorageTime
from sch_base_point p
left join sch_base_vehiclematerialgroup g on p.point_code = g.point_code
left join sch_base_vehiclematerialgroup g
on p.point_code = g.point_code and g.group_bind_material_status = '2'
left join md_base_material m on g.material_id = m.material_id
where p.region_code = 'KL'
and p.is_used = '1'
@@ -187,7 +188,8 @@
<select id="selectPackShelfInfo" resultType="org.nl.wms.pda.service.dao.vo.ShelfInfoVo">
select p.point_code as pointCode, m.material_code as materialCode, g.instorage_time as instorageTime
from sch_base_point p
left join sch_base_vehiclematerialgroup g on p.point_code = g.point_code
left join sch_base_vehiclematerialgroup g
on p.point_code = g.point_code and g.group_bind_material_status = '2'
left join md_base_material m on g.material_id = m.material_id
where p.region_code = 'KL'
and p.is_used = '1'

View File

@@ -451,6 +451,23 @@ public class PdaServiceImpl implements PdaService {
return PdaResponseVo.pdaResultOk("拆包机下料位满料请求成功");
}
@Override
public PdaResponseVo cbjskTask(TaskReq req) {
if (StringUtils.isEmpty(req.getStartPoint())) {
throw new BadRequestException("拆包机点位不能为空");
}
if (StringUtils.isEmpty(req.getNextType())) {
throw new BadRequestException("任务类型不能为空");
}
JSONObject param = new JSONObject();
// param.put("vehicle_code",req.getBarCode());
param.put("device_code", req.getStartPoint());
param.put("next_type",req.getNextType());
param.put("config_code","CBJSKTask");
taskService.apply(param);
return PdaResponseVo.pdaResultOk("拆包机空料位送空请求成功");
}
@Override
public PdaResponseVo cbjqkTask(TaskReq req) {
if (StringUtils.isEmpty(req.getEndPoint())) {

View File

@@ -15,8 +15,7 @@ public enum WorkOrderStatusEnum {
ISSUED("2", "已下发"),
PRODUCING("3", "生产中"),
STOP("4", "暂停"),
COMPLETE("5", "完成"),
STAGING("6", "暂存中");
COMPLETE("5", "完成");
private final String code;
private final String name;
}

View File

@@ -0,0 +1,246 @@
package org.nl.wms.sch.task_manage.task.tasks.hn;
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 com.alibaba.fastjson.JSONObject;
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.database.material.service.IMdBaseMaterialService;
import org.nl.wms.database.material.service.dao.MdBaseMaterial;
import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService;
import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder;
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.constant.ExceptionConstant;
import org.nl.wms.sch.task_manage.constant.GeneralDefinition;
import org.nl.wms.sch.task_manage.constant.PointTypeConstant;
import org.nl.wms.sch.task_manage.constant.RegionConstant;
import org.nl.wms.sch.task_manage.enums.*;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper;
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.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author sxp
* @desc 拆包机空料位送空蛊任务: 拆包机空料位 -> 困料货架或拆包机下料位
*/
@Component("CBJSKTask")
public class CBJSKTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "CBJSKTask";
@Autowired
private ISchBasePointService pointService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBaseTaskconfigService taskConfigService;
@Autowired
private ISysNoticeService noticeService;
@Override
@Transactional(rollbackFor = Exception.class)
protected 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, task.getRequest_param());
if (ObjectUtil.isEmpty(point)) {
// 消息通知
noticeService.createNotice("送空盅任务未找到空位!", TASK_CONFIG_CODE + task.getPoint_code1(),
NoticeTypeEnum.WARN.getCode());
throw new BadRequestException("送空盅任务未找到空位!");
}
// 设置终点并修改创建成功状态
task.setPoint_code2(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
if (task.getVehicle_type() == null) {
task.setVehicle_type(GeneralDefinition.MATERIAL_CUP);
}
taskService.save(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
@Override
@Transactional(rollbackFor = Exception.class)
protected void create() throws BadRequestException {
// 获取任务
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
// 配置信息
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
.eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE));
for (SchBaseTask task : tasks) {
TaskUtils.setUpdateByAcs(task); // 修改修改者
List<String> nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(","))
.collect(Collectors.toList());
// 找终点
String requestParam = task.getRequest_param();
JSONObject jsonObject = JSONObject.parseObject(requestParam);
SchBasePoint point = findNextPoint(nextRegionStr,requestParam);
String vehicleType = jsonObject.getString("vehicle_type");
if (ObjectUtil.isEmpty(point)) {
task.setRemark("送空盅任务未找到混料机空位!");
taskService.updateById(task);
// 消息通知
noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(),
NoticeTypeEnum.WARN.getCode());
continue;
}
// 设置终点并修改创建成功状态
task.setPoint_code2(point.getPoint_code());
task.setTask_status(TaskStatus.CREATED.getCode());
if (task.getVehicle_type() == null) {
task.setVehicle_type(vehicleType != null ? vehicleType : GeneralDefinition.MATERIAL_CUP);
}
taskService.updateById(task);
point.setIng_task_code(task.getTask_code());
PointUtils.setUpdateByAcs(point);
pointService.updateById(point);
}
}
/**
* 查找下个点位
*
* @param nextRegionStr
* @return
*/
private SchBasePoint findNextPoint(List<String> nextRegionStr, String req) {
JSONObject jsonObject = JSONObject.parseObject(req);
if ("CBJXLW".equals(jsonObject.getString("next_type"))) {
//如果选择下个点位为下料位
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.eq(SchBasePoint::getPoint_code, "CBJXLW")
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.and(la -> la.isNull(SchBasePoint::getIng_task_code)
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.orderByAsc(SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
if ("KLHW".equals(jsonObject.getString("next_type"))) {
//如果选择困料货架
LambdaQueryWrapper<SchBasePoint> lam = new LambdaQueryWrapper<>();
lam.in(SchBasePoint::getRegion_code, nextRegionStr)
.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode())
.and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL有数据表示锁住
.or()
.eq(SchBasePoint::getIng_task_code, ""))
.notLike(SchBasePoint::getPoint_code, "CBJ%")
.eq(SchBasePoint::getIs_used, true)
.orderByAsc(SchBasePoint::getIn_order_seq)
.orderByAsc(SchBasePoint::getPoint_code);
List<SchBasePoint> schBasePoints = pointService.list(lam);
return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null;
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
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);
}
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String endPoint = taskObj.getPoint_code2(); // 获取终点
SchBasePoint endPointObj = pointService.getById(endPoint);
// 设置载具类型、点位状态、释放点位
if (ObjectUtil.isNotEmpty(endPoint)) {
endPointObj.setIng_task_code("");
endPointObj.setVehicle_type(taskObj.getVehicle_type());
endPointObj.setVehicle_qty(1);
endPointObj.setVehicle_code(taskObj.getVehicle_code());
endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode());
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);
}
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
// 获取参数
String endPoint = taskObj.getPoint_code2(); // 获取终点
SchBasePoint endPointObj = pointService.getById(endPoint);
// 释放点位
if (ObjectUtil.isNotEmpty(endPoint)) {
endPointObj.setIng_task_code("");
PointUtils.setUpdateByType(endPointObj, taskFinishedType);
pointService.updateById(endPointObj);
}
taskObj.setRemark(GeneralDefinition.TASK_CANCEL);
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setFinished_type(taskFinishedType.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj);
}
}