zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/WaveManagentController.java
@@ -43,6 +43,11 @@ } /** * 大屏获取任务明细 * @param param * @return */ @PostMapping("/task/detl/qutify") public R getTaskDetlQutify(@RequestBody Map<String, Object> param) { if (Objects.isNull(param)) { @@ -55,6 +60,15 @@ // Long matnr = Long.valueOf(taskNo.get("matnr").toString()); return waveManagentService.getTaskDetlQutify(taskNoStr); } /** * 获取当前播种墙库位信息 * @return */ @GetMapping("/seed/locs") public R getSeedLoc() { return waveManagentService.AllSeedLocs(); } /*** @@ -73,6 +87,15 @@ */ @PostMapping("/sow/review") public R reviewSeeds(@RequestBody WaveSeedReviewParam reviewParam) { if (Objects.isNull(reviewParam)) { return R.error("播种参数不能为空!!"); } if (Objects.isNull(reviewParam.getReviewNum())) { return R.error("播种数量不能为空!!"); } if (Objects.isNull(reviewParam.getWaveSeedId())) { return R.error("播种明细标识不能为空!!"); } return waveManagentService.reviewSeeds(reviewParam); } @@ -89,4 +112,18 @@ return R.error("删除失败!!"); } } /** * 大屏获取波次所有订单信息 * @param waveNo * @return */ @GetMapping("/orders/{waveNo}") public R getWaveOrders(@PathVariable String waveNo) { if (StringUtils.isNullOrEmpty(waveNo)) { return R.error("波次编码不能为空!!!"); } return waveManagentService.getAllOrders(waveNo); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/entity/domain/WaveTaskDetl.java
@@ -1,5 +1,6 @@ package com.zy.asrs.wms.apis.wcs.entity.domain; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.experimental.Accessors; @@ -47,4 +48,12 @@ */ private Integer stock; @TableField(exist = false) private String siteNo; /** * 任务明细标识 */ @TableField(exist = false) private Long taskDetlId; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
@@ -1,22 +1,32 @@ package com.zy.asrs.wms.apis.wcs.services.Impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.mysql.cj.util.StringUtils; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.apis.wcs.entity.domain.WaveTaskDetl; import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds; import com.zy.asrs.wms.apis.wcs.services.WaveManagentService; import com.zy.asrs.wms.asrs.entity.CacheSite; import com.zy.asrs.wms.asrs.entity.Order; 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.TaskStsType; import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam; import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper; import com.zy.asrs.wms.asrs.mapper.OrderDetlMapper; import com.zy.asrs.wms.asrs.mapper.OrderMapper; import com.zy.asrs.wms.asrs.mapper.TaskMapper; import com.zy.asrs.wms.asrs.service.TaskService; import com.zy.asrs.wms.asrs.service.WaveSeedService; import org.aspectj.weaver.ast.Or; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service public class WaveManagentServiceImpl implements WaveManagentService { @@ -25,9 +35,14 @@ @Autowired private TaskService taskService; @Autowired private TaskMapper taskMapper; @Autowired private OrderMapper orderMapper; @Autowired private OrderDetlMapper orderDetlMapper; @Autowired private CacheSiteMapper cacheSiteMapper; @Override public R getSowSeeds() { @@ -72,4 +87,53 @@ List<WaveTaskDetl> taskDetls = taskMapper.getTaskDetlQutify(taskNo); return R.ok(taskDetls); } /** * 获取波次下所有订单 * @param waveNo * @return */ @Override public R getAllOrders(String waveNo) { if (StringUtils.isNullOrEmpty(waveNo)) { throw new CoolException("波次编码不能为空!!"); } List<Order> orders = orderMapper.selectList(new LambdaQueryWrapper<Order>().eq(Order::getWaveNo, waveNo)); if (orders.isEmpty()) { throw new CoolException("当前波次下没有订单!!"); } 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()) { order.setOrderStatus("已完成");//已完成 } else if (orderDetls.size() < detls.size() && orderDetls.size() != 0) {//部分完成 order.setOrderStatus("部分完成"); } else {//未完成 order.setOrderStatus("未完成"); } }); return R.ok(orders); } /** * 获了当前播种墙库位信息 * @return */ @Override public R AllSeedLocs() { List<CacheSite> cacheSites = cacheSiteMapper.selectList(new LambdaQueryWrapper<CacheSite>()); if (cacheSites.isEmpty()) { return R.error("当前播种墙信息未设置!!"); } return R.ok(cacheSites); } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WaveManagentService.java
@@ -16,4 +16,8 @@ R getTaskDetl(String taskNo); R getTaskDetlQutify(String taskNo); R getAllOrders(String waveNo); R AllSeedLocs(); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
@@ -115,7 +115,7 @@ if (StringUtil.isNullOrEmpty(code)) { return R.error("托盘码不能为空!!"); } List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, code).eq(WaitPakin::getIoStatus, 0)); List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, code)); return R.ok(waitPakins); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java
@@ -141,6 +141,15 @@ @ApiModelProperty(value= "是否生成波次 1: 是 0: 否 ") private Integer hasWave; /** * 订单状态 * 1. 已完成 * 0. 未完成 * 2. 部分完成 */ @TableField(exist = false) private String orderStatus; 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/SeedSite.java
New file @@ -0,0 +1,46 @@ package com.zy.asrs.wms.asrs.entity; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; @Data @Accessors(chain = true) @TableName("man_seed_site") public class SeedSite implements Serializable { @TableId private Long id; /** * 拖盘码 */ private String barcode; /** * 订单编号 */ private String orderNo; /** * 播种站点编码 */ private String siteNo; /** * 创建时间 */ private Date createTime; /** * 修改人 */ private String updateBy; /** * 创建人 */ private String createBy; /** * 修改时间 */ private Date updateTime; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/SeedSitesMapper.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.wms.asrs.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zy.asrs.wms.asrs.entity.SeedSite; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface SeedSitesMapper extends BaseMapper<SeedSite> { } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/SeedSitesServices.java
New file @@ -0,0 +1,9 @@ package com.zy.asrs.wms.asrs.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zy.asrs.wms.asrs.entity.SeedSite; public interface SeedSitesServices extends IService<SeedSite> { } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -1,9 +1,8 @@ package com.zy.asrs.wms.asrs.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto; @@ -11,12 +10,13 @@ import com.zy.asrs.wms.asrs.entity.enums.OrderType; import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam; import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam; import com.zy.asrs.wms.asrs.entity.param.PageRequest; import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams; import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper; import com.zy.asrs.wms.asrs.mapper.SeedSitesMapper; import com.zy.asrs.wms.asrs.service.*; import com.zy.asrs.wms.system.entity.Host; import com.zy.asrs.wms.system.service.HostService; import io.netty.util.internal.StringUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -63,6 +63,9 @@ private WaveDetlService waveDetlService; @Autowired private CacheSiteMapper cacheSiteMapper; @Autowired private SeedSitesMapper seedSitesMapper; @Override @Transactional(rollbackFor = Exception.class) @@ -157,7 +160,7 @@ locDetl.setLocId(loc.getId()); locDetl.setMatnr(pakin.getMatnr()); Mat one = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, pakin.getMatnr())); if (!Objects.isNull(one)) { if (Objects.isNull(one)) { throw new CoolException("当前物料不存在!!"); } locDetl.setMatId(one.getId()); @@ -292,6 +295,9 @@ } List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getWaveId, pickSheet.getWaveId())); if (orders.isEmpty()) { throw new CoolException("波次订单不存在!!"); } List<Long> list = orders.stream().map(Order::getId).collect(Collectors.toList()); boolean remove = orderDetlService.remove(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, list)); if (!remove) { @@ -304,20 +310,49 @@ return true; } /** * 获取播种墙站点 * @return */ @Override public List<CacheSite> getSeedLocs() { return cacheSiteMapper.selectList(new LambdaQueryWrapper<>()); } /** * 订单绑定播种墙 * 订单绑定播种墙站点+ * @param param * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean bindOrderBySite(Map<String, Object> param) { // return cacheSiteMapper.bindOrderBySite(param); return false; CacheSite siteNo = cacheSiteMapper.selectOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteNo, param.get("siteNo")), false); if (Objects.isNull(siteNo)) { throw new CoolException("站点异常!!"); } if (param.get("type").equals("bind")) { if (!StringUtil.isNullOrEmpty(siteNo.getOrderNo())) { throw new CoolException("当前播种站点已绑定订单!!"); } Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, param.get("orderNo").toString())); if (Objects.isNull(order)) { throw new CoolException("绑定订单不存在!!"); } siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id); if (cacheSiteMapper.updateById(siteNo) < 1) { throw new CoolException("订单播种位绑定失败!!" ); } } else { if (StringUtil.isNullOrEmpty(siteNo.getOrderNo())) { throw new CoolException("当前播种站点未绑定订单!!"); } siteNo.setOrderId(null).setOrderNo(null).setSiteNo("0"); if (cacheSiteMapper.updateById(siteNo) < 1) { throw new CoolException("订单与播种位解绑失败!!" ); } } return true; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/SeedSitesServicesImpl.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.wms.asrs.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zy.asrs.wms.asrs.entity.SeedSite; import com.zy.asrs.wms.asrs.mapper.SeedSitesMapper; import com.zy.asrs.wms.asrs.service.SeedSitesServices; import org.springframework.stereotype.Service; @Service public class SeedSitesServicesImpl extends ServiceImpl<SeedSitesMapper, SeedSite> implements SeedSitesServices { } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java
@@ -4,21 +4,40 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds; import com.zy.asrs.wms.asrs.entity.Order; import com.zy.asrs.wms.asrs.entity.OrderDetl; import com.zy.asrs.wms.asrs.entity.TaskDetl; import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam; import com.zy.asrs.wms.asrs.mapper.OrderDetlMapper; import com.zy.asrs.wms.asrs.mapper.OrderMapper; import com.zy.asrs.wms.asrs.mapper.TaskDetlMapper; import com.zy.asrs.wms.asrs.mapper.WaveSeedMapper; import com.zy.asrs.wms.asrs.entity.WaveSeed; import com.zy.asrs.wms.asrs.service.OrderDetlService; import com.zy.asrs.wms.asrs.service.WaveSeedService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @Service("waveSeedService") public class WaveSeedServiceImpl extends ServiceImpl<WaveSeedMapper, WaveSeed> implements WaveSeedService { @Autowired private OrderMapper orderMapper; @Autowired private OrderDetlMapper orderDetlMapper; @Autowired private TaskDetlMapper taskDetlMapper; @Override @Transactional(rollbackFor = Exception.class) public void waveSeedReview(WaveSeedReviewParam param) { if (param == null) { throw new CoolException("参数不能为空"); @@ -41,16 +60,37 @@ throw new CoolException("播种数据不存在"); } Double stock = Optional.of(waveSeed.getAnfme() - waveSeed.getWorkQty()).orElse(0.0D); if (stock - param.getReviewNum() < 0) { throw new CoolException("播种数量已满"); } waveSeed.setWorkQty(waveSeed.getWorkQty() + param.getReviewNum()); TaskDetl taskDetl = taskDetlMapper.selectOne(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getId, waveSeed.getTaskDetlId())); if (Objects.isNull(taskDetl)) { throw new CoolException("当前播种任务明细不存在!!"); } if (param.getReviewNum() > taskDetl.getAnfme()) { throw new CoolException("拣货数量大于当前任务需求数:" + taskDetl.getAnfme()); } OrderDetl orderDetl = orderDetlMapper.selectOne(new LambdaUpdateWrapper<OrderDetl>().eq(OrderDetl::getId, waveSeed.getOrderDetlId())); if (Objects.isNull(orderDetl)) { throw new CoolException("当前播种订单明细不存在!!"); } orderDetl.setWorkQty(orderDetl.getWorkQty() + param.getReviewNum()); if (orderDetlMapper.updateById(orderDetl) < 1) { throw new CoolException("订单明细数量更新失败"); } waveSeed.setUpdateTime(new Date()); if (!this.updateById(waveSeed)) { throw new CoolException("播种复核更新失败"); } } @Override zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -118,14 +118,15 @@ orderUtils.updateWorkQty(orderDetl.getId(), workQty, true); CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId)); if (cacheSite == null) { throw new CoolException("缓存站空间不存在"); } //fixme 生成波次播种数据时,不自动添加站点绑定,站点绑定调整至出库绑定播种库位时更新 // CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId)); // if (cacheSite == null) { // throw new CoolException("缓存站空间不存在"); // } WaveSeed waveSeed = new WaveSeed(); waveSeed.setSiteId(cacheSite.getId()); waveSeed.setSiteNo(cacheSite.getSiteNo()); // waveSeed.setSiteId(cacheSite.getId()); // waveSeed.setSiteNo(cacheSite.getSiteNo()); waveSeed.setOrderNo(orderDetl.getOrderNo()); waveSeed.setOrderId(orderDetl.getOrderId()); waveSeed.setOrderDetlId(orderDetl.getId()); @@ -141,13 +142,13 @@ if (!waveSeedService.save(waveSeed)) { throw new CoolException("波次播种创建失败"); } cacheSite.setOrderId(orderDetl.getOrderId()); cacheSite.setOrderNo(orderDetl.getOrderNo()); cacheSite.setSiteStatus(CacheSiteStatusType.R.id); cacheSite.setUpdateTime(new Date()); if (!cacheSiteService.updateById(cacheSite)) { throw new CoolException("缓存站更新失败"); } // cacheSite.setOrderId(orderDetl.getOrderId()); // cacheSite.setOrderNo(orderDetl.getOrderNo()); // cacheSite.setSiteStatus(CacheSiteStatusType.R.id); // cacheSite.setUpdateTime(new Date()); // if (!cacheSiteService.updateById(cacheSite)) { // throw new CoolException("缓存站更新失败"); // } } } zy-asrs-wms/src/main/resources/application.yml
@@ -17,6 +17,9 @@ # url: jdbc:mysql://127.0.0.1:3306/wms_dev?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: 34821015 # url: jdbc:mysql://47.76.147.249:3306/wms_dev_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true # username: wms_dev_test # password: smjPbTrkmTMEGKaD # driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # url: jdbc:sqlserver://47.97.1.152:51433;databasename=jkasrs # username: sa zy-asrs-wms/src/main/resources/mapper/asrs/SeedSitesMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.asrs.wms.asrs.mapper.SeedSitesMapper"> </mapper> zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml
@@ -21,17 +21,31 @@ </if> </select> <select id="getTaskDetlQutify" resultType="com.zy.asrs.wms.apis.wcs.entity.domain.WaveTaskDetl"> SELECT * FROM ( SELECT * FROM ( SELECT id,matnr,order_no, SUM(anfme) anfme ,wave_no, SUM(work_qty) work_qty, batch, task_detl_id mws.id, mws.matnr, mws.order_no, mws.order_id, SUM( mws.anfme ) anfme, mws.wave_no, SUM( mws.work_qty ) work_qty, mws.batch, mws.task_detl_id , mcs.site_no FROM man_wave_seed man_wave_seed mws LEFT JOIN man_cache_site mcs ON mws.order_id = mcs.order_id WHERE task_detl_id IN ( SELECT mtd.id FROM man_task mt INNER JOIN man_task_detl mtd ON mt.id = mtd.task_id <if test="taskNo != null and taskNo != ''"> AND mt.task_no = #{taskNo} </if> ) GROUP BY order_no, matnr <if test="taskNo != null and taskNo != ''"> AND mt.task_no = #{taskNo} </if> ) GROUP BY order_no, matnr ) t </select> <select id="getTaskIntegrateByTaskNo" resultType="com.zy.asrs.wms.asrs.entity.dto.LargeScreenTaskDto">