add:手持接口增加空料位送空蛊到下料位、困料货架任务;压制看板修改查询当班生产接口;分拣看板修改顶部分拣线、查询已码垛数据
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
// 统计合不合格数量到工单字段中
|
||||
|
||||
@@ -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("拆包机下料位叫空蛊")
|
||||
|
||||
@@ -74,6 +74,8 @@ public interface PdaService {
|
||||
|
||||
PdaResponseVo cbjmlTask(TaskReq req);
|
||||
|
||||
PdaResponseVo cbjskTask(TaskReq req);
|
||||
|
||||
PdaResponseVo cbjqkTask(TaskReq req);
|
||||
|
||||
PdaResponseVo yzqlTask(TaskReq req);
|
||||
|
||||
@@ -11,4 +11,5 @@ public class TaskReq {
|
||||
private String startPoint;
|
||||
private String endPoint;
|
||||
private String barCode;
|
||||
private String nextType;
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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())) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user