zy-asrs-admin/src/views/out/flat/index.vue
@@ -1,8 +1,11 @@ <template> <a-table :columns="columns" :data-source="datasource" bordered> <template #bodyCell="{column, record}"> <template #bodyCell="{column, record, index}"> <template v-if="column.key === 'number'"> {{index + 1}} </template> <template v-if="column.key === 'operate'"> <a-button @click="viewDetail(record)" type="link"> <a-button @click="viewDetail(column)" type="link"> {{ "查看明细" }} </a-button> <a-button @click="showDeleteConfirm(record)" danger type="link">{{"删除"}}</a-button> @@ -16,7 +19,10 @@ </a-table> <a-modal ref="sheetDetl" v-model:open="show" :width="'80%'" title="拣货单明细" @ok="handleOk"> <a-table :columns="childNodes" :data-source="childList"> <template #bodyCell="{column, record}"> <template #bodyCell="{column, record, index}"> <template v-if="column.key === 'number'"> {{index + 1}} </template> <template v-if="column.key === 'status'"> <a-tag :color="record.status === 1 ? 'green' : 'volcano'"> {{record.status === 1 ? "正常" : "禁用"}} @@ -106,6 +112,7 @@ }, //查看明细 viewDetail(record) { console.log(record) this.show = !this.show this.getSheetDetl(record) }, zy-asrs-admin/src/views/out/order/index.vue
@@ -24,4 +24,8 @@ } </script> <style></style> <style> .col { color: ; } </style> zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
@@ -7,6 +7,7 @@ import com.zy.asrs.wms.apis.wcs.entity.request.RfidSingalRequest; import com.zy.asrs.wms.apis.wcs.entity.request.TasksStatusCallbackParam; import com.zy.asrs.wms.apis.wcs.services.WcsApiService; import com.zy.asrs.wms.asrs.service.PlatformService; import com.zy.asrs.wms.system.controller.BaseController; import io.netty.util.internal.StringUtil; import lombok.extern.slf4j.Slf4j; @@ -23,6 +24,7 @@ @Autowired private WcsApiService wcsApiService; /** * 出库任务-接收回调状态接口 @@ -99,7 +101,7 @@ if (Objects.isNull(request.get("taskNo"))) { throw new CoolException("任务号不能为空!!"); } if (Objects.isNull(request.get("orderNO"))){ if (Objects.isNull(request.get("orderNo"))){ throw new CoolException("当前任务订单号不能为空!!"); } @@ -113,12 +115,11 @@ /** * 信号回传接口,回传电子标签状态变化内容给上游系统。 * 当人为操作(比如拍灯,更改数字,放箱等)导致电子标签的状态和信号等发生变化、或设备本身发生异常时,ESS接收到信号后,通过该接口将信号回传给上游系统。 * * RFID回调接口 * * @param request * @return */ @PostMapping("/") public R rfidCallback(@RequestBody RfidSingalRequest request) { if (Objects.isNull(request)) { throw new CoolException("参数不能为空!!"); @@ -127,5 +128,16 @@ } /** * 获取所有集货区 * @return */ @GetMapping("/all/platforms") public R getPlatforms() { return wcsApiService.getPlatforms(); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
@@ -12,6 +12,7 @@ import com.zy.asrs.wms.asrs.entity.OrderDetl; import com.zy.asrs.wms.asrs.entity.Task; import com.zy.asrs.wms.asrs.entity.dto.LargeScreenTaskDto; import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus; import com.zy.asrs.wms.asrs.entity.enums.TaskStsType; import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam; import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper; @@ -24,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -104,17 +106,9 @@ } orders.forEach(order -> { List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId())); if (detls.isEmpty()) { throw new CoolException("订单:" + order.getOrderNo() + " 没有明细,请联系管理员!!"); } List<OrderDetl> orderDetls = detls.stream().filter(orderDetl -> { return orderDetl.getAnfme() == (orderDetl.getWorkQty() + orderDetl.getQty()); }).collect(Collectors.toList()); if (!orderDetls.isEmpty() && orderDetls.size() == detls.size()) { if (order.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val) { order.setOrderStatus("已完成");//已完成 } else if (orderDetls.size() < detls.size() && orderDetls.size() != 0) {//部分完成 } else if (order.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_SECTION.val) {//部分完成 order.setOrderStatus("部分完成"); } else {//未完成 order.setOrderStatus("未完成"); zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java
@@ -10,9 +10,9 @@ import com.zy.asrs.wms.apis.wcs.entity.request.*; import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse; import com.zy.asrs.wms.apis.wcs.services.WcsApiService; import com.zy.asrs.wms.asrs.entity.Task; import com.zy.asrs.wms.asrs.entity.TaskDetl; import com.zy.asrs.wms.asrs.entity.WaveSeed; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType; import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus; import com.zy.asrs.wms.asrs.entity.enums.TaskStsType; import com.zy.asrs.wms.asrs.service.*; import io.jsonwebtoken.lang.Collections; @@ -28,6 +28,8 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; @@ -45,12 +47,20 @@ private TaskService taskService; @Autowired private TaskDetlService taskDetlService; @Autowired private CacheSiteService cacheSiteService; @Autowired private OrderService orderService; @Autowired private OrderDetlService orderDetlService; @Autowired private WaveSeedService waveSeedService; @Autowired private RestTemplate restTemplate; @Autowired private PlatformService platformService; /** @@ -77,7 +87,8 @@ //DONE 根据ESS返回的容器编码修改任务档中的输送线起始位置节点,及任务档容器到达状态 taskService.update(new LambdaUpdateWrapper<Task>() .set(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id) .set(Task::getOriginLoc, arrivedParam.getSlotCode()) //输送线节点编码,不是源库位 // .set(Task::getOriginLoc, arrivedParam.getSlotCode()) .eq(Task::getBarcode, arrivedParam.getContainerCode())); } else { //容器到达时更新任务状态为:入库完成,定时任务根据状态码更新库存 @@ -91,6 +102,9 @@ .set(Task::getTaskSts, TaskStsType.WAVE_SEED.id) .set(Task::getOriginLoc, arrivedParam.getSlotCode()) .eq(Task::getBarcode, arrivedParam.getContainerCode())); if (!update) { throw new CoolException("容器到达任务更新失败!!"); } } @@ -272,9 +286,12 @@ @Override public R rfidCallback(RfidSingalRequest request) { return null; } @Override public R getPlatforms() { return R.ok(platformService.list(new LambdaQueryWrapper<>())); } /** @@ -292,39 +309,74 @@ MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); //默认流动 boolean converyor = false; //判断是否还有物料未拣 //判断当前任务是否还有物料未拣 if (!checked(orderNo, taskNo)) { //调用三方接口,闪灯不做操作 // 设置请求参数 params.add("params", JSONObject.toJSONString(slapParam)); log.info("请求地址:{},请求参数:{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam)); } else { //调用三方接口,来灯通知容器流动, 传灭灯参数 //调用三方接口,灭灯通知容器流动, 传灭灯参数 //todo 判断当前订单是否完成,完成灭灯,未完成保持拣货状态亮灯 Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo)); if (Objects.isNull(one)) { throw new CoolException("当前订单明细不存在!!"); } // //获取播种已完成的订单明细 // List<OrderDetl> detlList = orderDetls.stream().filter(detl -> { // return detl.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val; // }).collect(Collectors.toList()); //判断数量是否与订单明细的需求量相同,相同则订单完成 if (one.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val) { //播种完成,释放绑定站点 List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, orderNo)); for (CacheSite cacheSite : cacheSites) { if (!cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) { cacheSite.setSiteStatus(CacheSiteStatusType.O.id); cacheSite.setOrderId(null); cacheSite.setBarcode(null); cacheSite.setOrderNo(null); cacheSite.setPlatformId(null); cacheSite.setPlatformNo(null); cacheSite.setUpdateTime(new Date()); if (!cacheSiteService.updateById(cacheSite)) { throw new CoolException("播种站点更新失败"); } } } } converyor = true; params.add("params", JSONObject.toJSONString(slapParam)); log.info("请求地址:{},请求参数:{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam)); } HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json"); HttpEntity httpEntity = new HttpEntity<>(params, headers); // 请求 ResponseEntity<CommonReponse> exchange = restTemplate.exchange(SystemProperties.CONVEYOR_START, HttpMethod.POST, httpEntity, CommonReponse.class); log.info("下发流动通知 返回结果:{}", exchange); if (exchange.getBody() == null) { throw new CoolException("下发流动通知失败!!"); } else { CommonReponse response = exchange.getBody(); if (response.getCode() == 0) { if (!converyor) { //* 2. 容器流动判断,如果料箱没有物料 code传200, 有物料传100 执行回库任务,修改任务状态为 调用containerConveryor(taskNo)方法 containerConveryor(request.get("taskNo").toString()); if (converyor) { Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, request.get("taskNo"))); if (Objects.isNull(task)) { throw new CoolException("任务不存在!!"); } containerConveryor(task.getBarcode()); } } // HttpHeaders headers = new HttpHeaders(); // headers.add("Content-Type", "application/json"); // HttpEntity httpEntity = new HttpEntity<>(params, headers); // // 请求 // ResponseEntity<CommonReponse> exchange = restTemplate.exchange(SystemProperties.CONVEYOR_START, HttpMethod.POST, httpEntity, CommonReponse.class); // log.info("下发流动通知 返回结果:{}", exchange); // if (exchange.getBody() == null) { // throw new CoolException("下发流动通知失败!!"); // } else { // CommonReponse response = exchange.getBody(); // if (response.getCode() == 0) { // if (!converyor) { // //* 2. 容器流动判断,如果料箱没有物料 code传200, 有物料传100 执行回库任务,修改任务状态为 调用containerConveryor(taskNo)方法 // containerConveryor(request.get("taskNo").toString()); // } // } // } } /** zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java
@@ -18,4 +18,6 @@ void slapLightLogic(Map<String, Object> request); R rfidCallback(RfidSingalRequest request); R getPlatforms(); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
@@ -74,10 +74,17 @@ */ @PostMapping("/mat/auth") public R getProductForBarcode(@RequestBody Map<String, String> barcode) { if (Objects.isNull(barcode)) { return R.error("参数不能为空!!"); } if (StringUtil.isNullOrEmpty(barcode.get("barcode"))) { return R.error("条码不能为空!!"); } Order order = orderService.selectByBarcode(barcode.get("barcode")); if (Objects.isNull(order)) { return R.error("订单不存在!"); } List<OrderInfoDto> orders = orderService.getDetlForOrderId(order.getId()); @@ -240,7 +247,7 @@ throw new CoolException("请求参数不能为空!!"); } if (Objects.isNull(param.get("barcode"))) { throw new CoolException("容器编码不能为空"); throw new CoolException("播种墙容器编码不能为空"); } if (Objects.isNull(param.get("orderNo"))) { throw new CoolException("订单编号不能为空!!"); zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam; import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam; import com.zy.asrs.wms.common.annotation.OperationLog; import com.zy.asrs.wms.common.domain.BaseParam; @@ -108,4 +109,14 @@ return R.ok(); } /** * 绑定订单与集货区关系 * @param platform * @return */ @PostMapping("/bind/shipping/platform") public R bindShippingAndPlatform(@RequestBody BindPlatformParam platform) { return platformService.bindShippingPlatform(platform); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java
@@ -137,6 +137,12 @@ @TableField(updateStrategy = FieldStrategy.IGNORED) private String platformNo; /** * 播种墙库位容器码 */ @ApiModelProperty(value = "播种墙库位容器码") private String barcode; public CacheSite() {} public CacheSite(String siteNo,Integer siteStatus,Long orderId,String orderNo,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) { zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java
@@ -10,6 +10,7 @@ import com.zy.asrs.wms.asrs.service.OrderTypeService; import com.zy.asrs.wms.system.entity.Host; import com.zy.asrs.wms.system.entity.User; import io.swagger.models.auth.In; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -150,6 +151,14 @@ @TableField(exist = false) private String orderStatus; /** * 订单状态 * 1. 已完成 * 0. 未完成 * 2. 部分完成 */ private Integer pickStatus; public Order() {} public Order(String orderNo,String orderTime,Long orderType,Long orderSettle,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) { zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java
@@ -98,6 +98,9 @@ @ApiModelProperty(value= "状态 1: 正常 0: 禁用 ") private Integer status; @ApiModelProperty(value = "拣货状态:0 未拣货 1 完成拣货 2 ,部分拣货") private Integer pickStatus; /** * 是否删除 1: 是 0: 否 */ zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/ShippingOrderDetlDto.java
@@ -38,5 +38,9 @@ * 备注 */ private String memo; /** * 物料编码 */ private String matnr; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderPickStatus.java
New file @@ -0,0 +1,22 @@ package com.zy.asrs.wms.asrs.entity.enums; /** * 订单入库类型 */ public enum OrderPickStatus { //手动入库单 ORDER_PICK_STATUS_UNDO(0, "手动入库单"), //拣货完成 ORDER_PICK_STATUS_DONE(1, "拣货完成"), //部分拣货 ORDER_PICK_STATUS_SECTION(2, "部分拣货") ; public Integer val; public String desc; OrderPickStatus(Integer val, String desc) { this.val = val; this.desc = desc; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java
@@ -9,4 +9,6 @@ private String siteNo; private String orderNo; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java
@@ -1,11 +1,14 @@ package com.zy.asrs.wms.asrs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zy.asrs.framework.common.R; import com.zy.asrs.wms.asrs.entity.Platform; import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam; import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam; public interface PlatformService extends IService<Platform> { void shipped(PlatformShippedParam param); R bindShippingPlatform(BindPlatformParam platform); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@ import com.zy.asrs.wms.system.entity.Host; import com.zy.asrs.wms.system.service.HostService; import io.netty.util.internal.StringUtil; import org.aspectj.weaver.ast.Or; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -59,6 +60,12 @@ private MatService matService; @Autowired private WaveService waveService; @Autowired private WaveLogService waveLogService; @Autowired private CacheSiteService cacheSiteService; @Autowired WaveDetlLogService waveDetlLogService; @Autowired private WaveDetlService waveDetlService; @Autowired @@ -207,7 +214,6 @@ } //修改订单状态为已完成 order.setOrderSettle(OrderSettleType.COMPLETE.val()); OrderLog orderLog = new OrderLog(); BeanUtils.copyProperties(order, orderLog); if (!orderLogService.save(orderLog)) { @@ -225,6 +231,8 @@ detls.forEach(delt ->{ OrderDetlLog detlLog = new OrderDetlLog(); BeanUtils.copyProperties(delt, detlLog); detlLog.setQty(delt.getWorkQty()); detlLog.setWorkQty(0.0); detlLogs.add(detlLog); }); @@ -376,9 +384,17 @@ if (Objects.isNull(order)) { throw new CoolException("绑定订单不存在!!"); } siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id); siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id).setBarcode(param.get("barcode").toString()); if (cacheSiteMapper.updateById(siteNo) < 1) { throw new CoolException("订单播种位绑定失败!!" ); } int update = waveSeedMapper.update(new LambdaUpdateWrapper<WaveSeed>() .eq(WaveSeed::getOrderNo, order.getOrderNo()) .set(WaveSeed::getSiteId, siteNo.getId()) .set(WaveSeed::getSiteNo, siteNo.getSiteNo())); if (update < 1) { throw new CoolException("播种站点更新失败!!"); } } else { if (StringUtil.isNullOrEmpty(siteNo.getOrderNo())) { @@ -398,8 +414,16 @@ if (StringUtil.isNullOrEmpty((String) params.get("orderNo"))) { throw new CoolException("订单编码号不能为空!!"); } String orderId = params.get("orderNo").toString(); List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderId); String orderNo = params.get("orderNo").toString(); Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo)); if (Objects.isNull(order)) { throw new CoolException("订单不存在!!"); } if (!order.getOrderType().equals(OrderType.UTC_OUT_ORDER.id)) { throw new CoolException("订单为入库单据,不能发货!!"); } List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderNo); return R.ok(waveSeeds); } @@ -419,43 +443,30 @@ throw new CoolException("发货单据明细为空,不可执行发货操作!!"); } params.forEach(order -> { //删除出库订单及明细,加入订单历史档 if (order.getAnfme() == order.getWorkQty()) { //完全拣货 OrderDetl byId = orderDetlService.getById(order.getId()); if (Objects.isNull(byId)) { throw new CoolException("订单明细不存在!!"); } OrderDetlLog orderDetlLog = new OrderDetlLog(); BeanUtils.copyProperties(orderDetlLog, byId); BeanUtils.copyProperties(byId, orderDetlLog); orderDetlLog.setQty(order.getWorkQty()); orderDetlLog.setWorkQty(0.0); if (!orderDetlLogService.save(orderDetlLog)) { throw new CoolException("订单明细转历史档失败!!"); } //完全拣货,订单完成删除原始订单明细 //new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0 if (new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0) { if (!orderDetlService.removeById(byId)) { throw new CoolException("订单明细不存在!!"); } //查询当前订单下否还有明细存在 List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, order.getOrderNo())); if (orders.isEmpty()) { Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo())); if (Objects.isNull(one)) { throw new CoolException("订单不存在!!"); } else { //部分拣货 byId.setQty(order.getWorkQty() + byId.getQty()); byId.setWorkQty(0.0); if (!orderDetlService.updateById(byId)) { throw new CoolException("部分拣料明细更新失败!!"); } OrderLog orderLog = new OrderLog(); BeanUtils.copyProperties(one, orderLog); if (!orderLogService.save(orderLog)) { throw new CoolException("原始订单转历史档失败!!"); } if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo()))) { throw new CoolException("原始订单删除失败!!"); } } } else { //todo 删除已完成明细,保留原始主单及未完成明细 } List<WaveSeed> waveSeeds = waveSeedMapper.selectList(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderDetlId, order.getId())); @@ -464,11 +475,11 @@ ArrayList<WaveSeedLog> waveSeedLogs = new ArrayList<>(); waveSeeds.forEach(seed -> { WaveSeedLog waveSeedLog = new WaveSeedLog(); BeanUtils.copyProperties(waveSeedLog, seed); BeanUtils.copyProperties(seed, waveSeedLog); waveSeedLog.setId(null); waveSeedLogs.add(waveSeedLog); }); if (waveSeedLogService.saveBatch(waveSeedLogs)) { if (!waveSeedLogService.saveBatch(waveSeedLogs)) { throw new CoolException("波明历史档保存失败!!"); } } @@ -478,8 +489,71 @@ } }); //获取当前上传所有订单号 Set<String> orderNoSet = params.stream().map(ShippingOrderDetlDto::getOrderNo).collect(Collectors.toSet()); if (orderNoSet.isEmpty()) { throw new CoolException("主单信息不存在,请核对出库订单!!"); } return null; List<Order> orderList = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getOrderNo, orderNoSet)); if (orderList.isEmpty()) { throw new CoolException("订单不存在!!"); } orderList.forEach(one -> { OrderLog orderLog = new OrderLog(); BeanUtils.copyProperties(one, orderLog); orderLog.setOrderSettle(OrderSettleType.COMPLETE.val()); if (!orderLogService.save(orderLog)) { throw new CoolException("原始订单转历史档失败!!"); } //查询当前订单下否还有明细存在 List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderNo, one.getOrderNo())); //订单明细为空,则删除主单 if (orders.isEmpty()) { if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, one.getOrderNo()))) { throw new CoolException("原始订单删除失败!!"); } } else { //不为空,修改订单状态,可重新组拖 one.setOrderSettle(OrderSettleType.INIT.val()); if (orderService.updateById(one)); } }); Set<Long> waveIds = orderList.stream().map(Order::getWaveId).collect(Collectors.toSet()); if (waveIds.isEmpty()) { throw new CoolException("波次信息为空!!"); } List<Wave> waves = waveService.list(new LambdaQueryWrapper<Wave>().eq(Wave::getId, waveIds)); for (Wave wave : waves) { WaveLog waveLog = new WaveLog(); waveLog.sync(wave); waveLog.setId(null); if (!waveLogService.save(waveLog)) { throw new CoolException("波次转历史失败"); } List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId())); for (WaveDetl waveDetl : waveDetls) { WaveDetlLog waveDetlLog = new WaveDetlLog(); waveDetlLog.sync(waveDetl); waveDetlLog.setId(null); waveDetlLog.setWaveId(waveLog.getId()); if (!waveDetlLogService.save(waveDetlLog)) { throw new CoolException("波次明细转历史失败"); } if (!waveDetlService.removeById(waveDetl.getId())) { throw new CoolException("波次明细删除失败"); } } if (!waveService.removeById(wave.getId())) { throw new CoolException("波次删除失败"); } } return R.ok("发货完成!!"); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
@@ -1,10 +1,12 @@ package com.zy.asrs.wms.asrs.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType; import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType; import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam; import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam; import com.zy.asrs.wms.asrs.mapper.PlatformMapper; import com.zy.asrs.wms.asrs.service.*; @@ -165,4 +167,9 @@ } } @Override public R bindShippingPlatform(BindPlatformParam platform) { return null; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java
@@ -4,6 +4,7 @@ import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType; import com.zy.asrs.wms.asrs.entity.enums.OrderType; import com.zy.asrs.wms.asrs.mapper.WaitPakinMapper; import com.zy.asrs.wms.asrs.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -88,6 +89,12 @@ throw new CoolException("订单不存在"); } //如果是平库入库单,修改订单明细执行数量 if (order.getOrderType() == OrderType.PK_IN_ORDER.id) { orderDetl.setWorkQty(waitPakin.getAnfme()); orderDetlService.updateById(orderDetl); } //更新订单状态 if (order.getOrderSettle().equals(OrderSettleType.INIT.val())) { order.setOrderSettle(OrderSettleType.WAIT.val()); zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java
@@ -5,6 +5,7 @@ import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus; import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam; import com.zy.asrs.wms.asrs.mapper.*; import com.zy.asrs.wms.asrs.service.OrderDetlService; @@ -14,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Objects; @@ -59,7 +61,7 @@ List<CacheSite> sites = cacheSiteMapper.selectList(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, waveSeed.getOrderNo())); if (sites.isEmpty()) { throw new CoolException("当前订单未绑定播种库位,请绑定后再操作!!"); throw new CoolException("当前订单未绑定播种库位,请使用PDA->地标绑定,功能绑定后再操作!!"); } Double stock = Optional.of(waveSeed.getAnfme() - waveSeed.getWorkQty()).orElse(0.0D); @@ -80,12 +82,36 @@ if (Objects.isNull(orderDetl)) { throw new CoolException("当前播种订单明细不存在!!"); } orderDetl.setWorkQty(orderDetl.getWorkQty() + param.getReviewNum()); if (orderDetl.getWorkQty() + orderDetl.getQty() > orderDetl.getAnfme()) { if (param.getReviewNum() + orderDetl.getQty() > orderDetl.getAnfme()) { throw new CoolException("请核对明细数量后,再进行操作!!"); } //如果拣货数量与订单明细数量相等,表明拣货完成 if (new BigDecimal(param.getReviewNum() + orderDetl.getQty()).compareTo(new BigDecimal(orderDetl.getAnfme())) == 0) { orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_DONE.val); } else { orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_SECTION.val); } if (orderDetlMapper.updateById(orderDetl) < 1) { throw new CoolException("订单明细数量更新失败"); throw new CoolException("订单状态更新失败!!"); } List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, orderDetl.getOrderNo())); List<OrderDetl> detlList = detls.stream().filter(ord -> { return ord.getPickStatus() != OrderPickStatus.ORDER_PICK_STATUS_DONE.val; }).collect(Collectors.toList()); int update; if (detlList.isEmpty()) { update = orderMapper.update(new LambdaUpdateWrapper<Order>().eq(Order::getOrderNo, orderDetl.getOrderNo()).set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_DONE.val)); } else { update = orderMapper.update(new LambdaUpdateWrapper<Order>().eq(Order::getOrderNo, orderDetl.getOrderNo()).set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_SECTION.val)); } if (update < 1) { throw new CoolException("原始订单主单拣货状态更新失败!!"); } waveSeed.setUpdateTime(new Date()); zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/OrderTimer.java
@@ -74,7 +74,7 @@ } //删除订单明细 if (!orderDetlService.removeById(orderDetl.getId())) { if (!orderDetlService.removeById(orderDetl)) { throw new CoolException("删除订单明细失败"); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
@@ -74,13 +74,6 @@ if (taskDetls.isEmpty()) { throw new CoolException("任务明细不存在"); } else { //TODO 先更新订单,后删除任务明细。任务为53时,需更新明细。 // if (task.getTaskType() == 53L) { // List<Long> waveIds = taskDetls.stream().map(TaskDetl::getWaveId).collect(Collectors.toList()); // List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getWaveId, waveIds)); // orders.forEach(order -> { // // }); // } else { //任务类型为53,根据WaveId修改订单明细 for (TaskDetl taskDetl : taskDetls) { if (taskDetl.getDetlId() == null) { @@ -98,6 +91,7 @@ } //检测订单是否完成 boolean checkOrderComplete = orderService.checkOrderComplete(orderDetl.getOrderId()); if (checkOrderComplete) { //订单已经完成 Order order = orderService.getById(orderDetl.getOrderId()); @@ -112,7 +106,6 @@ } } // } } //删除任务历史档案 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -67,6 +67,9 @@ private CacheSiteService cacheSiteService; /** * 入库执行任务 */ @Scheduled(cron = "0/3 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void inExecute() { zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -117,7 +117,7 @@ anfme -= workQty; orderUtils.updateWorkQty(orderDetl.getId(), workQty, true); // //fixme 生成波次播种数据时,不自动添加站点绑定,站点绑定调整至出库绑定播种库位时更新 // CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId)); // if (cacheSite == null) { zy-asrs-wms/src/main/resources/application.yml
@@ -41,7 +41,7 @@ # global-config: # field-strategy: 0 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true global-config: zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedMapper.xml
@@ -18,6 +18,7 @@ wcs.wave_no, mo.anfme, mo.batch, wcs.matnr, wcs.site_no, wcs.work_qty, wcs.memo