Commit f798a3a543ea286e0a998d0dc73c131829adf7bf

Authored by 谭毅彬
2 parents cc6fd51c a5e1eab8

Merge branch 'develop' of http://www.huahengrobot.com:90/wms/wms4.git into develop

Showing 17 changed files with 368 additions and 53 deletions
ant-design-vue-jeecg/src/views/system/config/ZoneList.vue
@@ -90,6 +90,12 @@ @@ -90,6 +90,12 @@
90 </a-tag> 90 </a-tag>
91 </span> 91 </span>
92 92
  93 + <span slot="type_dictText" slot-scope="type_dictText">
  94 + <a-tag :key="type_dictText" :color="getStatusColor(type_dictText)">
  95 + {{ type_dictText }}
  96 + </a-tag>
  97 + </span>
  98 +
93 <template slot="htmlSlot" slot-scope="text"> 99 <template slot="htmlSlot" slot-scope="text">
94 <div v-html="text"></div> 100 <div v-html="text"></div>
95 </template> 101 </template>
@@ -173,6 +179,12 @@ export default { @@ -173,6 +179,12 @@ export default {
173 dataIndex: 'name' 179 dataIndex: 'name'
174 }, 180 },
175 { 181 {
  182 + title: '类型',
  183 + align: 'center',
  184 + dataIndex: 'type_dictText',
  185 + scopedSlots: {customRender: 'type_dictText'}
  186 + },
  187 + {
176 title: '包含库位类型', 188 title: '包含库位类型',
177 align: 'center', 189 align: 'center',
178 dataIndex: 'locationTypeCodes', 190 dataIndex: 'locationTypeCodes',
@@ -229,6 +241,12 @@ export default { @@ -229,6 +241,12 @@ export default {
229 } 241 }
230 }, 242 },
231 methods: { 243 methods: {
  244 + getStatusColor(status) {
  245 + const colors = {
  246 + default: 'blue'
  247 + };
  248 + return colors[status] || colors.default;
  249 + },
232 initDictConfig() { 250 initDictConfig() {
233 }, 251 },
234 getSuperFieldList() { 252 getSuperFieldList() {
ant-design-vue-jeecg/src/views/system/config/modules/LocationForm.vue
@@ -158,9 +158,6 @@ export default { @@ -158,9 +158,6 @@ export default {
158 rowFlag: [ 158 rowFlag: [
159 {required: true, message: '请输入内外侧!'}, 159 {required: true, message: '请输入内外侧!'},
160 ], 160 ],
161 - materialAreaCode: [  
162 - {required: true, message: '请输入物料分区存放!'},  
163 - ],  
164 enable: [ 161 enable: [
165 {required: true, message: '请输入是否可用!'}, 162 {required: true, message: '请输入是否可用!'},
166 ], 163 ],
ant-design-vue-jeecg/src/views/system/config/modules/ZoneForm.vue
@@ -14,6 +14,11 @@ @@ -14,6 +14,11 @@
14 </a-form-model-item> 14 </a-form-model-item>
15 </a-col> 15 </a-col>
16 <a-col :span="24"> 16 <a-col :span="24">
  17 + <a-form-model-item label="类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="type">
  18 + <j-dict-select-tag type="list" v-model="model.type" dictCode="zoneType" placeholder="请选择类型"/>
  19 + </a-form-model-item>
  20 + </a-col>
  21 + <a-col :span="24">
17 <a-form-model-item label="绑定的库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationTypeCode"> 22 <a-form-model-item label="绑定的库位类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationTypeCode">
18 <j-select-multiple 23 <j-select-multiple
19 v-model="model.locationTypeCode" 24 v-model="model.locationTypeCode"
@@ -65,6 +70,9 @@ export default { @@ -65,6 +70,9 @@ export default {
65 name: [ 70 name: [
66 {required: true, message: '请输入名称!'}, 71 {required: true, message: '请输入名称!'},
67 ], 72 ],
  73 + type: [
  74 + {required: true, message: '请输入类型!'},
  75 + ],
68 }, 76 },
69 url: { 77 url: {
70 add: "/config/zone/add", 78 add: "/config/zone/add",
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java
1 package org.jeecg.modules.wms.api.acs.controller; 1 package org.jeecg.modules.wms.api.acs.controller;
2 2
3 -import java.util.Map;  
4 -  
5 import javax.annotation.Resource; 3 import javax.annotation.Resource;
6 -import javax.servlet.http.HttpServletRequest;  
7 4
8 import org.jeecg.common.api.vo.Result; 5 import org.jeecg.common.api.vo.Result;
9 import org.jeecg.modules.wms.api.acs.entity.AcsStatus; 6 import org.jeecg.modules.wms.api.acs.entity.AcsStatus;
  7 +import org.jeecg.modules.wms.api.acs.entity.AgvWarecell;
10 import org.jeecg.modules.wms.api.acs.service.IAcsService; 8 import org.jeecg.modules.wms.api.acs.service.IAcsService;
11 import org.jeecg.modules.wms.config.address.service.IAddressService; 9 import org.jeecg.modules.wms.config.address.service.IAddressService;
12 import org.jeecg.modules.wms.framework.controller.HuahengBaseController; 10 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
@@ -14,13 +12,8 @@ import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService; @@ -14,13 +12,8 @@ import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
14 import org.jeecg.utils.StringUtils; 12 import org.jeecg.utils.StringUtils;
15 import org.jeecg.utils.constant.QuantityConstant; 13 import org.jeecg.utils.constant.QuantityConstant;
16 import org.jeecg.utils.support.ApiLogger; 14 import org.jeecg.utils.support.ApiLogger;
17 -import org.springframework.web.bind.annotation.PostMapping;  
18 -import org.springframework.web.bind.annotation.RequestBody;  
19 -import org.springframework.web.bind.annotation.RequestMapping;  
20 -import org.springframework.web.bind.annotation.ResponseBody;  
21 -import org.springframework.web.bind.annotation.RestController; 15 +import org.springframework.web.bind.annotation.*;
22 16
23 -import cn.monitor4all.logRecord.annotation.OperationLog;  
24 import io.swagger.annotations.Api; 17 import io.swagger.annotations.Api;
25 import io.swagger.annotations.ApiOperation; 18 import io.swagger.annotations.ApiOperation;
26 19
@@ -38,14 +31,6 @@ public class AcsController extends HuahengBaseController { @@ -38,14 +31,6 @@ public class AcsController extends HuahengBaseController {
38 @Resource 31 @Resource
39 private IAddressService addressService; 32 private IAddressService addressService;
40 33
41 -// @PassApiAuthentication  
42 -// @ApiLogger(apiName = "API接口第三方Token校验测试", from = "TEST")  
43 -// @ResponseBody  
44 -// @PostMapping(value = "/testTokenCheck")  
45 -// public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) {  
46 -// return Result.ok();  
47 -// }  
48 -  
49 @PostMapping("/notifyAGVTask") 34 @PostMapping("/notifyAGVTask")
50 @ResponseBody 35 @ResponseBody
51 @ApiOperation("更新AGV状态") 36 @ApiOperation("更新AGV状态")
@@ -75,4 +60,33 @@ public class AcsController extends HuahengBaseController { @@ -75,4 +60,33 @@ public class AcsController extends HuahengBaseController {
75 return result; 60 return result;
76 } 61 }
77 62
  63 + @PostMapping("/agvWarecell")
  64 + @ResponseBody
  65 + @ApiOperation("分配AGV库位")
  66 + @ApiLogger(apiName = "分配AGV库位", from = "ACS")
  67 + public Result agvWarecell(@RequestBody AgvWarecell agvWarecell) {
  68 + if (agvWarecell == null) {
  69 + return Result.error("分配AGV库位,数据为空");
  70 + }
  71 + String warehouseCode = agvWarecell.getWarehouseCode();
  72 + String taskNo = agvWarecell.getTaskNo();
  73 + String zoneCode = agvWarecell.getZoneCode();
  74 + if (StringUtils.isEmpty(warehouseCode)) {
  75 + return Result.error("仓位分配, 仓库号为空");
  76 + }
  77 + if (StringUtils.isEmpty(taskNo)) {
  78 + return Result.error("仓位分配, 任务号为空");
  79 + }
  80 + if (StringUtils.isEmpty(zoneCode)) {
  81 + return Result.error("仓位分配, 目的区域为空");
  82 + }
  83 + String lockKey = warehouseCode + zoneCode;
  84 + Result result = handleMultiProcess("agvWarecell", lockKey, new MultiProcessListener() {
  85 + @Override
  86 + public Result<?> doProcess() {
  87 + return acsService.warecellAllocation(agvWarecell);
  88 + }
  89 + });
  90 + return result;
  91 + }
78 } 92 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/entity/AgvWarecell.java 0 → 100644
  1 +package org.jeecg.modules.wms.api.acs.entity;
  2 +
  3 +import io.swagger.annotations.ApiModelProperty;
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +public class AgvWarecell {
  8 +
  9 + /**
  10 + * 任务号
  11 + */
  12 + @ApiModelProperty(value = "任务号", required = true)
  13 + private String taskNo;
  14 +
  15 + /**
  16 + * 仓库编号
  17 + */
  18 + @ApiModelProperty(value = "仓库编号", required = true)
  19 + private String warehouseCode;
  20 +
  21 + /**
  22 + * 区域
  23 + */
  24 + @ApiModelProperty(value = "区域", required = true)
  25 + private String zoneCode;
  26 +
  27 + /**
  28 + * 长度
  29 + */
  30 + @ApiModelProperty(value = "长度")
  31 + private String length;
  32 +
  33 + /**
  34 + * 宽度
  35 + */
  36 + @ApiModelProperty(value = "宽度")
  37 + private String width;
  38 +
  39 + /**
  40 + * 高度
  41 + */
  42 + @ApiModelProperty(value = "高度")
  43 + private String height;
  44 +
  45 + /**
  46 + * 重量
  47 + */
  48 + @ApiModelProperty(value = "重量")
  49 + private String weight;
  50 +
  51 + /**
  52 + * 起始站点
  53 + */
  54 + @ApiModelProperty(value = "起始站点")
  55 + private String fromPortCode;
  56 +}
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/IAcsService.java
1 package org.jeecg.modules.wms.api.acs.service; 1 package org.jeecg.modules.wms.api.acs.service;
2 2
3 import org.jeecg.common.api.vo.Result; 3 import org.jeecg.common.api.vo.Result;
  4 +import org.jeecg.modules.wms.api.acs.entity.AgvWarecell;
4 import org.jeecg.modules.wms.task.agvTask.entity.AgvTask; 5 import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
5 6
6 public interface IAcsService { 7 public interface IAcsService {
@@ -12,4 +13,11 @@ public interface IAcsService { @@ -12,4 +13,11 @@ public interface IAcsService {
12 Result updateAGVTask(AgvTask agvTask); 13 Result updateAGVTask(AgvTask agvTask);
13 14
14 Result notifyAGVTask(String taskNo, String carNo, int status); 15 Result notifyAGVTask(String taskNo, String carNo, int status);
  16 +
  17 + /**
  18 + * 仓位分配
  19 + * @param agvWarecell
  20 + * @return
  21 + */
  22 + Result warecellAllocation(AgvWarecell agvWarecell);
15 } 23 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java
1 package org.jeecg.modules.wms.api.acs.service.impl; 1 package org.jeecg.modules.wms.api.acs.service.impl;
2 2
  3 +import java.util.Date;
  4 +import java.util.List;
  5 +import java.util.stream.Collectors;
  6 +
3 import javax.annotation.Resource; 7 import javax.annotation.Resource;
4 8
5 import org.jeecg.common.api.vo.Result; 9 import org.jeecg.common.api.vo.Result;
6 import org.jeecg.common.exception.JeecgBootException; 10 import org.jeecg.common.exception.JeecgBootException;
7 import org.jeecg.modules.wms.api.acs.entity.AgvEntity; 11 import org.jeecg.modules.wms.api.acs.entity.AgvEntity;
  12 +import org.jeecg.modules.wms.api.acs.entity.AgvWarecell;
8 import org.jeecg.modules.wms.api.acs.service.IAcsService; 13 import org.jeecg.modules.wms.api.acs.service.IAcsService;
  14 +import org.jeecg.modules.wms.api.wcs.entity.WcsTask;
  15 +import org.jeecg.modules.wms.api.wcs.service.LocationAllocationService;
9 import org.jeecg.modules.wms.config.address.service.IAddressService; 16 import org.jeecg.modules.wms.config.address.service.IAddressService;
  17 +import org.jeecg.modules.wms.config.container.entity.Container;
  18 +import org.jeecg.modules.wms.config.container.service.IContainerService;
  19 +import org.jeecg.modules.wms.config.containerType.entity.ContainerType;
  20 +import org.jeecg.modules.wms.config.containerType.service.IContainerTypeService;
10 import org.jeecg.modules.wms.config.location.entity.Location; 21 import org.jeecg.modules.wms.config.location.entity.Location;
11 import org.jeecg.modules.wms.config.location.service.ILocationService; 22 import org.jeecg.modules.wms.config.location.service.ILocationService;
  23 +import org.jeecg.modules.wms.config.locationHigh.entity.LocationHigh;
  24 +import org.jeecg.modules.wms.config.locationHigh.service.ILocationHighService;
  25 +import org.jeecg.modules.wms.config.locationType.entity.LocationType;
  26 +import org.jeecg.modules.wms.config.locationType.service.ILocationTypeService;
  27 +import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
  28 +import org.jeecg.modules.wms.config.zone.entity.Zone;
  29 +import org.jeecg.modules.wms.config.zone.service.IZoneService;
12 import org.jeecg.modules.wms.task.agvTask.entity.AgvTask; 30 import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
13 import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService; 31 import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
  32 +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
  33 +import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
14 import org.jeecg.utils.OkHttpUtils; 34 import org.jeecg.utils.OkHttpUtils;
15 import org.jeecg.utils.StringUtils; 35 import org.jeecg.utils.StringUtils;
16 import org.jeecg.utils.constant.QuantityConstant; 36 import org.jeecg.utils.constant.QuantityConstant;
17 import org.springframework.stereotype.Service; 37 import org.springframework.stereotype.Service;
  38 +import org.springframework.transaction.annotation.Transactional;
18 39
19 import com.alibaba.fastjson.JSON; 40 import com.alibaba.fastjson.JSON;
  41 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  42 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  43 +
  44 +import lombok.extern.slf4j.Slf4j;
20 45
  46 +/**
  47 + * @author 游杰
  48 + */
  49 +@Slf4j
21 @Service 50 @Service
22 public class AcsServiceImpl implements IAcsService { 51 public class AcsServiceImpl implements IAcsService {
23 52
@@ -27,6 +56,22 @@ public class AcsServiceImpl implements IAcsService { @@ -27,6 +56,22 @@ public class AcsServiceImpl implements IAcsService {
27 private IAgvTaskService agvTaskService; 56 private IAgvTaskService agvTaskService;
28 @Resource 57 @Resource
29 private IAddressService addressService; 58 private IAddressService addressService;
  59 + @Resource
  60 + private IZoneService zoneService;
  61 + @Resource
  62 + private ITaskHeaderService taskHeaderService;
  63 + @Resource
  64 + private IContainerService containerService;
  65 + @Resource
  66 + private IContainerTypeService containerTypeService;
  67 + @Resource
  68 + private ILocationTypeService locationTypeService;
  69 + @Resource
  70 + private ILocationHighService locationHighService;
  71 + @Resource
  72 + private IParameterConfigurationService parameterConfigurationService;
  73 + @Resource
  74 + private LocationAllocationService locationAllocationService;
30 75
31 @Override 76 @Override
32 public Result executeAGVTask(AgvTask agvTask) { 77 public Result executeAGVTask(AgvTask agvTask) {
@@ -136,4 +181,129 @@ public class AcsServiceImpl implements IAcsService { @@ -136,4 +181,129 @@ public class AcsServiceImpl implements IAcsService {
136 } 181 }
137 return Result.ok("更新任务信息成功"); 182 return Result.ok("更新任务信息成功");
138 } 183 }
  184 +
  185 + @Override
  186 + @Transactional(rollbackFor = Exception.class)
  187 + public Result warecellAllocation(AgvWarecell agvWarecell) {
  188 + String warehouseCode = agvWarecell.getWarehouseCode();
  189 + String zoneCode = agvWarecell.getZoneCode();
  190 + String height = agvWarecell.getHeight();
  191 + String taskNo = agvWarecell.getTaskNo();
  192 + String fromPortCode = agvWarecell.getFromPortCode();
  193 +
  194 + Zone zone = zoneService.getZoneByCode(zoneCode, warehouseCode);
  195 + if (zone == null) {
  196 + return Result.error("分配库位时,没有找到库区");
  197 + }
  198 + if (StringUtils.isEmpty(fromPortCode)) {
  199 + return Result.error("分配库位时,起始站台为空");
  200 + }
  201 + TaskHeader taskHeader = taskHeaderService.getById(taskNo);
  202 + if (taskHeader == null) {
  203 + return Result.error("分配库位时,根据任务号没有找到任务");
  204 + }
  205 + if (taskHeader.getStatus() == QuantityConstant.TASK_STATUS_COMPLETED) {
  206 + return Result.error("分配库位时,任务已经完成不能再分库位");
  207 + }
  208 + int taskType = taskHeader.getTaskType();
  209 + if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT || taskType == QuantityConstant.TASK_TYPE_EMPTYSHIPMENT
  210 + || taskType == QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT) {
  211 + return Result.error("分配库位时,整出类型的任务不需要分配库位");
  212 + }
  213 + String containerCode = taskHeader.getContainerCode();
  214 + if (StringUtils.isEmpty(containerCode)) {
  215 + return Result.error("分配库位时,任务托盘为空");
  216 + }
  217 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  218 + if (container == null) {
  219 + return Result.error("分配库位时,没有找到容器" + containerCode);
  220 + }
  221 + String containerTypeCode = container.getContainerTypeCode();
  222 + if (StringUtils.isEmpty(containerTypeCode)) {
  223 + return Result.error("分配库位时,任务托盘没有库位类型,托盘号为" + containerCode);
  224 + }
  225 + ContainerType containerType = containerTypeService.getContainerTypeByCode(containerTypeCode, warehouseCode);
  226 + if (containerType == null) {
  227 + return Result.error("分配库位时,托盘类型为空,托盘类型值为" + containerTypeCode);
  228 + }
  229 + List<String> locationTypeCodes = containerType.getLocationTypes();
  230 + // 查询满足条件的库位类型
  231 + LambdaQueryWrapper<LocationType> locationTypeLambdaQueryWrapper = Wrappers.lambdaQuery();
  232 + locationTypeLambdaQueryWrapper.in(LocationType::getCode, locationTypeCodes).eq(LocationType::getWarehouseCode, warehouseCode);
  233 + List<LocationType> locationTypeList = locationTypeService.list(locationTypeLambdaQueryWrapper);
  234 + if (locationTypeList.size() == 0) {
  235 + return Result.error("分配库位时,没有找到库位类型");
  236 + }
  237 + int highHeight = Float.valueOf(height).intValue();
  238 + List<String> locationTypeCodeList = locationTypeList.stream().map(t -> t.getCode()).collect(Collectors.toList());
  239 + LambdaQueryWrapper<LocationHigh> locationHighLambdaQueryWrapper = Wrappers.lambdaQuery();
  240 + locationHighLambdaQueryWrapper.eq(LocationHigh::getHighLevel, highHeight).in(LocationHigh::getLocationTypeCode, locationTypeCodeList)
  241 + .eq(LocationHigh::getZoneCode, zoneCode);
  242 + LocationHigh locationHigh = locationHighService.getOne(locationHighLambdaQueryWrapper);
  243 + if (locationHigh == null) {
  244 + return Result.error("分配库位时,高度不匹配,WCS给的高度值" + highHeight + "不在WMS系统配置范围内");
  245 + }
  246 + int high = locationHigh.getHigh();
  247 + String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_ALLOCATION, zoneCode);
  248 + if (StringUtils.isEmpty(value)) {
  249 + return Result.error("分配库位时, 未绑定定位规则");
  250 + }
  251 + int allocationRule = Integer.parseInt(value);
  252 + String materialAreaCode = null;
  253 +
  254 + String locationCode =
  255 + locationAllocationService.allocation(allocationRule, locationTypeCodeList, high, zoneCode, null, warehouseCode, containerCode, materialAreaCode, null);
  256 + if (StringUtils.isEmpty(locationCode)) {
  257 + return Result.error("分配库位时,没有库位可分配");
  258 + }
  259 +
  260 + boolean success = locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
  261 + if (!success) {
  262 + throw new JeecgBootException("分配库位时,更新库位状态失败");
  263 + }
  264 + if (StringUtils.isNotEmpty(taskHeader.getToLocationCode()) && !locationCode.equals(taskHeader.getToLocationCode())) {
  265 + success = locationService.updateStatus(taskHeader.getToLocationCode(), QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  266 + if (!success) {
  267 + throw new JeecgBootException("分配库位时,更新之前分配的库位状态失败");
  268 + }
  269 + }
  270 +
  271 + Location location = locationService.getLocationByCode(locationCode, warehouseCode);
  272 +
  273 + int agvTaskId = taskHeader.getId();
  274 + if (agvTaskId != 0) {
  275 + AgvTask agvTask = new AgvTask();
  276 + agvTask.setWarehouseCode(warehouseCode);
  277 + agvTask.setZoneCode(zoneCode);
  278 + agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE);
  279 + agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD);
  280 + agvTask.setContainerCode(containerCode);
  281 + agvTask.setFromPort(fromPortCode);
  282 + agvTask.setToPort(locationCode);
  283 + agvTask.setPriority(10);
  284 + Result result = agvTaskService.addAgvTask(agvTask, warehouseCode);
  285 + if (!result.isSuccess()) {
  286 + throw new JeecgBootException("完成分配库位, 新增AGV任务失败");
  287 + }
  288 + agvTaskId = agvTask.getId();
  289 + }
  290 +
  291 + taskHeader = new TaskHeader();
  292 + taskHeader.setId(Integer.parseInt(taskNo));
  293 + taskHeader.setZoneCode(location.getZoneCode());
  294 + taskHeader.setAgvTaskId(agvTaskId);
  295 + taskHeader.setRoadWay(location.getRoadWay());
  296 + taskHeader.setAllocationTime(new Date());
  297 + taskHeader.setWeight(Integer.parseInt(agvWarecell.getWeight()));
  298 + taskHeader.setToLocationCode(locationCode);
  299 + if (!taskHeaderService.updateById(taskHeader)) {
  300 + throw new JeecgBootException("更新任务头表目标库位失败");
  301 + }
  302 +
  303 + WcsTask wcsTask = new WcsTask();
  304 + wcsTask.setToLocationCode(locationCode);
  305 +
  306 + log.info("完成分配库位,任务号:" + taskNo + ", 库位编码:" + locationCode);
  307 + return Result.OK(wcsTask);
  308 + }
139 } 309 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/agvcall/controller/AgvCallController.java
1 package org.jeecg.modules.wms.api.agvcall.controller; 1 package org.jeecg.modules.wms.api.agvcall.controller;
2 2
  3 +import javax.annotation.Resource;
  4 +
3 import org.jeecg.modules.wms.framework.controller.HuahengBaseController; 5 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
  6 +import org.jeecg.modules.wms.receipt.receiving.service.IReceiveService;
4 import org.springframework.web.bind.annotation.RequestMapping; 7 import org.springframework.web.bind.annotation.RequestMapping;
5 import org.springframework.web.bind.annotation.RestController; 8 import org.springframework.web.bind.annotation.RestController;
6 9
@@ -14,4 +17,7 @@ import io.swagger.annotations.Api; @@ -14,4 +17,7 @@ import io.swagger.annotations.Api;
14 @Api(tags = "AGV接口") 17 @Api(tags = "AGV接口")
15 public class AgvCallController extends HuahengBaseController { 18 public class AgvCallController extends HuahengBaseController {
16 19
  20 + @Resource
  21 + private IReceiveService receiveService;
  22 +
17 } 23 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/entity/WarecellDomain.java
@@ -60,4 +60,5 @@ public class WarecellDomain { @@ -60,4 +60,5 @@ public class WarecellDomain {
60 */ 60 */
61 @ApiModelProperty(value = "可用巷道") 61 @ApiModelProperty(value = "可用巷道")
62 private List<Integer> roadWays; 62 private List<Integer> roadWays;
  63 +
63 } 64 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
@@ -121,7 +121,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -121,7 +121,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
121 for (Integer roadWay : roadWays) { 121 for (Integer roadWay : roadWays) {
122 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); 122 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
123 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 123 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
124 - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) 124 + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
125 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode) 125 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode)
126 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING) 126 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
127 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId); 127 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId);
@@ -141,7 +141,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -141,7 +141,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
141 // 优先找外侧库位 141 // 优先找外侧库位
142 LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); 142 LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
143 locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 143 locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
144 - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) 144 + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
145 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_OUT) 145 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_OUT)
146 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING) 146 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
147 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId); 147 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId);
@@ -161,7 +161,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -161,7 +161,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
161 if (locationList.size() == 0) { 161 if (locationList.size() == 0) {
162 locationLambda = Wrappers.lambdaQuery(); 162 locationLambda = Wrappers.lambdaQuery();
163 locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 163 locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
164 - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) 164 + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
165 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_IN) 165 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_IN)
166 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING) 166 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
167 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId); 167 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId);
@@ -201,7 +201,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -201,7 +201,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
201 for (Integer roadWay : roadWays) { 201 for (Integer roadWay : roadWays) {
202 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); 202 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
203 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 203 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
204 - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) 204 + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
205 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode) 205 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode)
206 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING) 206 .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING)
207 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId); 207 .orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer).orderByAsc(true, Location::getId);
@@ -220,7 +220,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -220,7 +220,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
220 Integer roadWay = locationAllocationService.getRoadWay(roadWays, materialCode, zoneCode, warehouseCode); 220 Integer roadWay = locationAllocationService.getRoadWay(roadWays, materialCode, zoneCode, warehouseCode);
221 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); 221 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
222 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 222 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
223 - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) 223 + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE)
224 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).in(Location::getLocationTypeCode, locationTypeCodeList) 224 .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).in(Location::getLocationTypeCode, locationTypeCodeList)
225 .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer) 225 .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).orderByAsc(true, Location::getHigh).orderByAsc(true, Location::getLayer)
226 .orderByAsc(true, Location::getId); 226 .orderByAsc(true, Location::getId);
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/zone/entity/Zone.java
@@ -5,6 +5,7 @@ import java.util.Arrays; @@ -5,6 +5,7 @@ import java.util.Arrays;
5 import java.util.Date; 5 import java.util.Date;
6 import java.util.List; 6 import java.util.List;
7 7
  8 +import org.jeecg.common.aspect.annotation.Dict;
8 import org.jeecgframework.poi.excel.annotation.Excel; 9 import org.jeecgframework.poi.excel.annotation.Excel;
9 10
10 import com.baomidou.mybatisplus.annotation.IdType; 11 import com.baomidou.mybatisplus.annotation.IdType;
@@ -50,6 +51,7 @@ public class Zone implements Serializable { @@ -50,6 +51,7 @@ public class Zone implements Serializable {
50 /** 类型 */ 51 /** 类型 */
51 @Excel(name = "类型", width = 15) 52 @Excel(name = "类型", width = 15)
52 @ApiModelProperty(value = "类型") 53 @ApiModelProperty(value = "类型")
  54 + @Dict(dicCode = "zoneType")
53 private String type; 55 private String type;
54 56
55 /** 仓库编码 */ 57 /** 仓库编码 */
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiveHeader/controller/ReceiveHeaderController.java
@@ -12,7 +12,6 @@ import javax.servlet.http.HttpServletRequest; @@ -12,7 +12,6 @@ import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpServletResponse;
13 13
14 import org.apache.shiro.SecurityUtils; 14 import org.apache.shiro.SecurityUtils;
15 -import org.apache.shiro.authz.annotation.RequiresPermissions;  
16 import org.jeecg.common.api.vo.Result; 15 import org.jeecg.common.api.vo.Result;
17 import org.jeecg.common.aspect.annotation.AutoLog; 16 import org.jeecg.common.aspect.annotation.AutoLog;
18 import org.jeecg.common.exception.JeecgBootException; 17 import org.jeecg.common.exception.JeecgBootException;
@@ -359,4 +358,5 @@ public class ReceiveHeaderController extends JeecgController&lt;ReceiveHeader, IRec @@ -359,4 +358,5 @@ public class ReceiveHeaderController extends JeecgController&lt;ReceiveHeader, IRec
359 Result result = receiveDetailService.receive(receiveList, warehouseCode); 358 Result result = receiveDetailService.receive(receiveList, warehouseCode);
360 return result; 359 return result;
361 } 360 }
  361 +
362 } 362 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
@@ -207,4 +207,26 @@ public class ReceiveController extends HuahengBaseController { @@ -207,4 +207,26 @@ public class ReceiveController extends HuahengBaseController {
207 }); 207 });
208 return result; 208 return result;
209 } 209 }
  210 +
  211 + /**
  212 + * 组盘
  213 + * @return
  214 + */
  215 + @AutoLog("入库单-AGV入库")
  216 + @ApiOperation(value = "入库单-AGV入库", notes = "入库单-AGV入库")
  217 + @PostMapping("/agvReceipt")
  218 + @ResponseBody
  219 + public Result agvReceipt(@RequestBody List<Receive> receiveList, HttpServletRequest req) {
  220 + String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
  221 + String lockKey = warehouseCode;
  222 + Result result = handleMultiProcess("agvReceipt", lockKey, new MultiProcessListener() {
  223 + @Override
  224 + public Result<?> doProcess() {
  225 + Result result = receiveService.receivingAndCreateTask(receiveList, warehouseCode);
  226 +
  227 + return result;
  228 + }
  229 + });
  230 + return result;
  231 + }
210 } 232 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/domain/Receive.java
@@ -36,4 +36,5 @@ public class Receive implements Serializable { @@ -36,4 +36,5 @@ public class Receive implements Serializable {
36 36
37 private String toLocationCode; 37 private String toLocationCode;
38 38
  39 + private String fromPortCode;
39 } 40 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java
@@ -122,6 +122,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl @@ -122,6 +122,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
122 } else { 122 } else {
123 return Result.error(result.getMessage()); 123 return Result.error(result.getMessage());
124 } 124 }
  125 +
125 } 126 }
126 127
127 /** 128 /**
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
@@ -50,12 +50,14 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl @@ -50,12 +50,14 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl
50 if (StringUtils.isEmpty(containerCode)) { 50 if (StringUtils.isEmpty(containerCode)) {
51 return Result.error("生成AGV任务,容器号不能为空"); 51 return Result.error("生成AGV任务,容器号不能为空");
52 } 52 }
53 - Container containerByCode = containerService.getContainerByCode(containerCode, warehouseCode);  
54 - if (containerByCode == null) { 53 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  54 + if (container == null) {
55 return Result.error("生成AGV任务,容器号:" + containerCode + "未找到"); 55 return Result.error("生成AGV任务,容器号:" + containerCode + "未找到");
56 } 56 }
57 - if (!containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode)) {  
58 - throw new JeecgBootException("生成AGV任务,锁定容器失败:" + containerCode); 57 + if (!container.getStatus().equals(QuantityConstant.STATUS_CONTAINER_LOCK)) {
  58 + if (!containerService.updateStatus(containerCode, QuantityConstant.STATUS_CONTAINER_LOCK, warehouseCode)) {
  59 + throw new JeecgBootException("生成AGV任务,锁定容器失败:" + containerCode);
  60 + }
59 } 61 }
60 agvTask.setWarehouseCode(warehouseCode); 62 agvTask.setWarehouseCode(warehouseCode);
61 agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE); 63 agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE);
@@ -103,38 +105,46 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl @@ -103,38 +105,46 @@ public class AgvTaskServiceImpl extends ServiceImpl&lt;AgvTaskMapper, AgvTask&gt; impl
103 String toPort = agvTask.getToPort(); 105 String toPort = agvTask.getToPort();
104 String warehouseCode = agvTask.getWarehouseCode(); 106 String warehouseCode = agvTask.getWarehouseCode();
105 String containerCode = agvTask.getContainerCode(); 107 String containerCode = agvTask.getContainerCode();
106 - Location fromLocation = locationService.getLocationByCode(fromPort, warehouseCode);  
107 - if (fromLocation != null) {  
108 - success = locationService.updateContainerCodeAndStatus(fromPort, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); 108 + Container container = containerService.getContainerByCode(containerCode, warehouseCode);
  109 + if (container == null) {
  110 + throw new JeecgBootException("完成AGV任务时,根据容器编码没有找到容器");
  111 + }
  112 + TaskHeader taskHeader = taskHeaderService.getTaskHeaderByAgvTaskId(agvTask.getId());
  113 + if (taskHeader == null) {
  114 + Location fromLocation = locationService.getLocationByCode(fromPort, warehouseCode);
  115 + if (fromLocation != null) {
  116 + success =
  117 + locationService.updateContainerCodeAndStatus(fromPort, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  118 + if (!success) {
  119 + throw new JeecgBootException("完成AGV任务时,更新起始库位数据失败");
  120 + }
  121 + } else {
  122 + fromPort = QuantityConstant.EMPTY_STRING;
  123 + }
  124 + Location toLocation = locationService.getLocationByCode(toPort, warehouseCode);
  125 + if (toLocation != null) {
  126 + success = locationService.updateContainerCodeAndStatus(toPort, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
  127 + if (!success) {
  128 + throw new JeecgBootException("完成AGV任务时,更新终点库位数据失败");
  129 + }
  130 + } else {
  131 + toPort = QuantityConstant.EMPTY_STRING;
  132 + }
  133 + success = containerService.updateLocationCodeAndStatus(containerCode, toPort, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);
109 if (!success) { 134 if (!success) {
110 - throw new JeecgBootException("完成AGV任务时,更新起始库位数据失败"); 135 + throw new JeecgBootException("完成AGV任务时,更新容器数据失败");
111 } 136 }
112 } else { 137 } else {
113 - fromPort = QuantityConstant.EMPTY_STRING;  
114 - }  
115 - Location toLocation = locationService.getLocationByCode(toPort, warehouseCode);  
116 - if (toLocation != null) {  
117 - success = locationService.updateContainerCodeAndStatus(toPort, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode); 138 + success = containerService.updateLocationCode(containerCode, toPort, warehouseCode);
118 if (!success) { 139 if (!success) {
119 - throw new JeecgBootException("完成AGV任务时,更新终点库位数据失败"); 140 + throw new JeecgBootException("完成AGV任务时,更新容器数据失败");
120 } 141 }
121 - } else {  
122 - toPort = QuantityConstant.EMPTY_STRING;  
123 - }  
124 - Container container = containerService.getContainerByCode(containerCode, warehouseCode);  
125 - if (container == null) {  
126 - throw new JeecgBootException("完成AGV任务时,根据容器编码没有找到容器");  
127 - }  
128 - success = containerService.updateLocationCodeAndStatus(containerCode, toPort, QuantityConstant.STATUS_CONTAINER_EMPTY, warehouseCode);  
129 - if (!success) {  
130 - throw new JeecgBootException("完成AGV任务时,更新容器数据失败");  
131 } 142 }
132 agvTask.setStatus(QuantityConstant.TASK_STATUS_COMPLETED); 143 agvTask.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
133 success = updateById(agvTask); 144 success = updateById(agvTask);
134 if (!success) { 145 if (!success) {
135 throw new JeecgBootException("完成AGV任务时, 更新AGV任务失败"); 146 throw new JeecgBootException("完成AGV任务时, 更新AGV任务失败");
136 } 147 }
137 - TaskHeader taskHeader = taskHeaderService.getTaskHeaderByAgvTaskId(taskId);  
138 if (taskHeader != null) { 148 if (taskHeader != null) {
139 Result result = taskHeaderService.completeTaskByWMS(taskHeader.getId(), false); 149 Result result = taskHeaderService.completeTaskByWMS(taskHeader.getId(), false);
140 if (!result.isSuccess()) { 150 if (!result.isSuccess()) {
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -910,6 +910,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -910,6 +910,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
910 case QuantityConstant.TASK_TYPE_WHOLESHIPMENT: 910 case QuantityConstant.TASK_TYPE_WHOLESHIPMENT:
911 case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT: 911 case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT:
912 result = taskHeaderService.cancelShipmentTask(taskHeader); 912 result = taskHeaderService.cancelShipmentTask(taskHeader);
  913 + break;
913 case QuantityConstant.TASK_TYPE_CYCLECOUNT: 914 case QuantityConstant.TASK_TYPE_CYCLECOUNT:
914 result = taskHeaderService.updateCycleCountDetailByEnableStatus(taskHeader); 915 result = taskHeaderService.updateCycleCountDetailByEnableStatus(taskHeader);
915 break; 916 break;
@@ -2777,8 +2778,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -2777,8 +2778,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
2777 public Result updateCycleCountDetailByEnableStatus(TaskHeader taskHeader) { 2778 public Result updateCycleCountDetailByEnableStatus(TaskHeader taskHeader) {
2778 log.info("开始取消盘点任务"); 2779 log.info("开始取消盘点任务");
2779 LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); 2780 LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
2780 - cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode, taskHeader.getContainerCode())  
2781 - .ne(CycleCountDetail::getEnableStatus, QuantityConstant.SHIPMENT_RECEIVE_SUCCESS); 2781 + cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode, taskHeader.getContainerCode()).ne(CycleCountDetail::getEnableStatus,
  2782 + QuantityConstant.SHIPMENT_RECEIVE_SUCCESS);
2782 CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(cycleCountDetailLambdaQueryWrapper); 2783 CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(cycleCountDetailLambdaQueryWrapper);
2783 if (cycleCountDetail == null) { 2784 if (cycleCountDetail == null) {
2784 throw new JeecgBootException("取消盘点任务,没有找到盘点明细"); 2785 throw new JeecgBootException("取消盘点任务,没有找到盘点明细");