From 1173860b091120e0cf5d020b4037e98e1572852b Mon Sep 17 00:00:00 2001 From: x_z Date: Tue, 21 Feb 2023 16:21:51 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B7=BB=E5=8A=A0=E5=8D=95=E6=8D=AE=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=9F=A5=E8=AF=A2=E5=92=8C=E4=BF=AE=E6=94=B9=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/inout/IoOrderController.java | 30 ++++ .../java/com/glxp/api/dao/auth/DeptDao.java | 11 +- .../api/dao/basic/BasicBussinessTypeDao.java | 7 + .../com/glxp/api/dao/inout/IoOrderDao.java | 9 ++ .../glxp/api/req/inout/OrderEditRequest.java | 27 ++++ .../com/glxp/api/res/inout/OrderNoResult.java | 30 ++++ .../api/service/inout/IoOrderService.java | 24 +++ .../inout/impl/IoOrderServiceImpl.java | 151 +++++++++++++++++- .../resources/mybatis/mapper/auth/DeptDao.xml | 4 + .../mapper/basic/BasicBussinessTypeDao.xml | 4 + .../mybatis/mapper/inout/IoOrderDao.xml | 6 + 11 files changed, 297 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/glxp/api/req/inout/OrderEditRequest.java create mode 100644 src/main/java/com/glxp/api/res/inout/OrderNoResult.java diff --git a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java index 269d511be..383f2aff5 100644 --- a/src/main/java/com/glxp/api/controller/inout/IoOrderController.java +++ b/src/main/java/com/glxp/api/controller/inout/IoOrderController.java @@ -21,6 +21,7 @@ import com.glxp.api.req.basic.BasicEntrustRecRequest; import com.glxp.api.req.inout.AddOrderRequest; import com.glxp.api.req.inout.FilterOrderDetailBizRequest; import com.glxp.api.req.inout.FilterOrderRequest; +import com.glxp.api.req.inout.OrderEditRequest; import com.glxp.api.req.system.DeleteRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.inout.IoOrderDetailBizResponse; @@ -317,5 +318,34 @@ public class IoOrderController extends BaseController { return ResultVOUtils.success(pageSimpleResponse); } + /** + * 单据编辑页面查询单据接口 + * + * @param billNo + * @return + */ + @GetMapping("udiwms/inout/order/filterOrderTrace") + public BaseResponse filterOrderTrace(String billNo) { + if (StrUtil.isBlank(billNo)) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + List list = orderService.filterOrderTrace(billNo); + List responses = orderService.findResponse(list); + return ResultVOUtils.success(responses); + } + + /** + * 批量修改单据信息 + * + * @return + */ + @PostMapping("/udiwms/inout/order/updateOrderInfo") + public BaseResponse updateOrderInfo(@RequestBody OrderEditRequest orderEditRequest) { + if (null == orderEditRequest || CollUtil.isEmpty(orderEditRequest.getOrderIds())) { + return ResultVOUtils.error(ResultEnum.PARAM_VERIFY_FALL); + } + orderService.updateOrderInfo(orderEditRequest); + return ResultVOUtils.success(); + } } diff --git a/src/main/java/com/glxp/api/dao/auth/DeptDao.java b/src/main/java/com/glxp/api/dao/auth/DeptDao.java index a4a6dc0a7..3122d66e6 100644 --- a/src/main/java/com/glxp/api/dao/auth/DeptDao.java +++ b/src/main/java/com/glxp/api/dao/auth/DeptDao.java @@ -48,7 +48,16 @@ public interface DeptDao { DeptEntity selectByThirdSys(@Param("thirdIdSys") String thirdIdSys, @Param("thirdId") String thirdId); - /** 根据code查询* */ + /** + * 根据code查询* + */ DeptEntity selectByCodeAll(@Param("code") String code); + /** + * 根据编码查询部门名称 + * + * @param code + * @return + */ + String selectNameByCode(@Param("code") String code); } diff --git a/src/main/java/com/glxp/api/dao/basic/BasicBussinessTypeDao.java b/src/main/java/com/glxp/api/dao/basic/BasicBussinessTypeDao.java index 468bb8f0b..6d45a452a 100644 --- a/src/main/java/com/glxp/api/dao/basic/BasicBussinessTypeDao.java +++ b/src/main/java/com/glxp/api/dao/basic/BasicBussinessTypeDao.java @@ -63,4 +63,11 @@ public interface BasicBussinessTypeDao extends BaseMapper selectByUser(FilterBussinessTypeRequest filterBussinessTypeRequest); + /** + * 根据单据类型名称编码查询单据类型名称 + * + * @param action + * @return + */ + String selectNameByAction(@Param("action") String action); } diff --git a/src/main/java/com/glxp/api/dao/inout/IoOrderDao.java b/src/main/java/com/glxp/api/dao/inout/IoOrderDao.java index 12241a75b..a3521bb1c 100644 --- a/src/main/java/com/glxp/api/dao/inout/IoOrderDao.java +++ b/src/main/java/com/glxp/api/dao/inout/IoOrderDao.java @@ -4,6 +4,8 @@ import com.glxp.api.dao.BaseMapperPlus; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.req.inout.FilterOrderRequest; import com.glxp.api.res.inout.IoOrderResponse; +import com.glxp.api.res.inout.OrderNoResult; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -33,4 +35,11 @@ public interface IoOrderDao extends BaseMapperPlus selectSupplementOrderList(); + /** + * 查询所有关联的所有单据字段的值 + * + * @param billNo + * @return + */ + OrderNoResult selectBillNos(@Param("billNo") String billNo); } \ No newline at end of file diff --git a/src/main/java/com/glxp/api/req/inout/OrderEditRequest.java b/src/main/java/com/glxp/api/req/inout/OrderEditRequest.java new file mode 100644 index 000000000..6958ee515 --- /dev/null +++ b/src/main/java/com/glxp/api/req/inout/OrderEditRequest.java @@ -0,0 +1,27 @@ +package com.glxp.api.req.inout; + +import lombok.Data; + +import java.util.List; + +/** + * 单据编辑接口请求参数 + */ +@Data +public class OrderEditRequest { + + /** + * 创建时间 + */ + private String createTime; + + /** + * 审核时间 + */ + private String auditTime; + + /** + * 单号集合 + */ + private List orderIds; +} diff --git a/src/main/java/com/glxp/api/res/inout/OrderNoResult.java b/src/main/java/com/glxp/api/res/inout/OrderNoResult.java new file mode 100644 index 000000000..0a0929c63 --- /dev/null +++ b/src/main/java/com/glxp/api/res/inout/OrderNoResult.java @@ -0,0 +1,30 @@ +package com.glxp.api.res.inout; + +import lombok.Data; + +/** + * 扫码单据单号实体类,包含除ID外所有单号字段 + */ +@Data +public class OrderNoResult { + private String id; + //补单单号 + private String supplementNo; + + //缺量补单上级单号 + private String originUllageSupNo; + + //缺量补单单号 + private String ullageSupNo; + + //复制单号,多个单号之间使用英文逗号,分隔 + private String replicateNo; + + //验收出库关联的预验收入库单,多个单号,隔开 + private String preInBillNo; + + //预验收入库单关联的预验收出库单,多个单号,隔开 + private String preOutBillNo; + + +} diff --git a/src/main/java/com/glxp/api/service/inout/IoOrderService.java b/src/main/java/com/glxp/api/service/inout/IoOrderService.java index e11167587..55d6dda92 100644 --- a/src/main/java/com/glxp/api/service/inout/IoOrderService.java +++ b/src/main/java/com/glxp/api/service/inout/IoOrderService.java @@ -2,6 +2,7 @@ package com.glxp.api.service.inout; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.req.inout.FilterOrderRequest; +import com.glxp.api.req.inout.OrderEditRequest; import com.glxp.api.res.inout.IoOrderResponse; import java.util.List; @@ -62,4 +63,27 @@ public interface IoOrderService { * @param filterOrderRequest */ void setFilterStatus(FilterOrderRequest filterOrderRequest); + + /** + * 查询单号关联的所有单据数据 + * + * @param billNo + * @return + */ + List filterOrderTrace(String billNo); + + /** + * 单据实体数据转换VO + * + * @param list + * @return + */ + List findResponse(List list); + + /** + * 批量修改单据信息 + * + * @param orderEditRequest + */ + void updateOrderInfo(OrderEditRequest orderEditRequest); } diff --git a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java index 8c6b1f0b4..acaffc2f3 100644 --- a/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java +++ b/src/main/java/com/glxp/api/service/inout/impl/IoOrderServiceImpl.java @@ -2,33 +2,48 @@ package com.glxp.api.service.inout.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.glxp.api.constant.Constant; import com.glxp.api.constant.ConstantStatus; +import com.glxp.api.dao.auth.DeptDao; +import com.glxp.api.dao.auth.InvSubWarehouseDao; import com.glxp.api.dao.basic.BasicBussinessTypeDao; +import com.glxp.api.dao.basic.BasicCorpDao; import com.glxp.api.dao.inout.IoOrderDao; import com.glxp.api.entity.basic.BasicBussinessTypeEntity; +import com.glxp.api.entity.basic.BasicCorpEntity; import com.glxp.api.entity.inout.IoOrderEntity; import com.glxp.api.req.inout.FilterOrderRequest; +import com.glxp.api.req.inout.OrderEditRequest; import com.glxp.api.res.inout.IoOrderResponse; +import com.glxp.api.res.inout.OrderNoResult; import com.glxp.api.service.inout.IoOrderService; +import com.glxp.api.util.DateUtil; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import java.lang.reflect.Field; +import java.util.*; +@Slf4j @Service public class IoOrderServiceImpl implements IoOrderService { @Resource private IoOrderDao orderDao; @Resource - BasicBussinessTypeDao basicBussinessTypeDao; + private BasicBussinessTypeDao basicBussinessTypeDao; + @Resource + private BasicCorpDao basicCorpDao; + @Resource + private DeptDao deptDao; + @Resource + private InvSubWarehouseDao invSubWarehouseDao; @Override public List selectAll() { @@ -199,6 +214,132 @@ public class IoOrderServiceImpl implements IoOrderService { } } + @Override + public List filterOrderTrace(String billNo) { + IoOrderEntity order = orderDao.selectOne(new QueryWrapper().eq("billNo", billNo)); + if (null == order) { + return Collections.emptyList(); + } + //查询此单据关联的所有单据 + return getAllOrder(order); + } + + @Override + public List findResponse(List list) { + if (CollUtil.isEmpty(list)) { + return Collections.emptyList(); + } + List responseList = new ArrayList<>(list.size()); + for (IoOrderEntity order : list) { + IoOrderResponse response = new IoOrderResponse(); + BeanUtil.copyProperties(order, response); + //查询单据类型名称 + String busTypeName = basicBussinessTypeDao.selectNameByAction(order.getAction()); + response.setBillTypeName(busTypeName); + //查询往来单位名称 + BasicCorpEntity corpEntity = basicCorpDao.selectByErpId(order.getFromCorp()); + response.setFromName(corpEntity.getName()); + //查询部门名称 + String deptName = deptDao.selectNameByCode(order.getDeptCode()); + response.setDeptName(deptName); + //查询仓库名称 + String invName = invSubWarehouseDao.selectNameByCode(order.getInvCode()); + response.setInvName(invName); + responseList.add(response); + } + return responseList; + } + + @Override + public void updateOrderInfo(OrderEditRequest orderEditRequest) { + log.info("批量更新单据信息,参数列表: {}", JSONUtil.toJsonStr(orderEditRequest)); + IoOrderEntity order = new IoOrderEntity(); + order.setCreateTime(DateUtil.parseDate(orderEditRequest.getCreateTime())); + order.setAuditTime(DateUtil.parseDate(orderEditRequest.getAuditTime())); + order.setUpdateTime(new Date()); + orderDao.update(order, new QueryWrapper().in("billNo", orderEditRequest.getOrderIds())); + } + + /** + * 查询此单据关联的所有单据 + * + * @param order 单据 + * @return + */ + private List getAllOrder(IoOrderEntity order) { + Set billNos = new HashSet<>(); + billNos.add(order.getBillNo()); + + getLinkedBillNo(order.getBillNo(), billNos); + + //去除本单的单据号 + Iterator iterator = billNos.iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals(order.getBillNo())) { + iterator.remove(); + break; + } + } + + ArrayList orders = new ArrayList<>(); + if (CollUtil.isNotEmpty(orders)) { + List list = orderDao.selectList(new QueryWrapper().in("billNo", billNos).orderByDesc("id")); + orders.addAll(list); + } + orders.add(order); + return orders; + } + + /** + * 查询关联的单据号 + * + * @param billNo + * @param billNos + */ + private void getLinkedBillNo(String billNo, Set billNos) { + List list = getOneBillNosByOrderId(billNo); + if (!billNos.containsAll(list)) { + //找出不包含在原有集合中的单号,回调方法 + String orderId = null; + for (String item : list) { + if (!billNos.contains(item)) { + orderId = item; + break; + } + } + billNos.addAll(list); + //递归,继续查询未包含的单据号关联的单据 + getLinkedBillNo(orderId, billNos); + } + } + + /** + * 查询一条单据上关联的所有单据号 + * + * @param billNo + * @return + */ + private List getOneBillNosByOrderId(String billNo) { + List billNos = new ArrayList<>(); + OrderNoResult orderNoResult = orderDao.selectBillNos(billNo); + if (null == orderNoResult) { + return billNos; + } + Field[] fields = ReflectUtil.getFields(OrderNoResult.class); + for (Field field : fields) { + String value = String.valueOf(ReflectUtil.getFieldValue(orderNoResult, field)); + if (StrUtil.isNotBlank(value) && !"null".equals(value)) { + if (field.getName().equals("replicateNo")) { + String[] orderIds = value.split(","); + billNos.addAll(Arrays.asList(orderIds)); + } else { + billNos.add(value); + } + } + } + return billNos; + } + boolean checkBusTypeSupplementOrder(IoOrderEntity orderEntity) { BasicBussinessTypeEntity supplementOrderType = basicBussinessTypeDao.selectOne(new QueryWrapper().eq("action", orderEntity.getAction())); if (supplementOrderType != null) { diff --git a/src/main/resources/mybatis/mapper/auth/DeptDao.xml b/src/main/resources/mybatis/mapper/auth/DeptDao.xml index b921b5c45..28cdfbea1 100644 --- a/src/main/resources/mybatis/mapper/auth/DeptDao.xml +++ b/src/main/resources/mybatis/mapper/auth/DeptDao.xml @@ -274,4 +274,8 @@ from auth_dept where code = #{code} + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml b/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml index ec49adb7f..34e3cfb94 100644 --- a/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml +++ b/src/main/resources/mybatis/mapper/basic/BasicBussinessTypeDao.xml @@ -239,4 +239,8 @@ group by basic_bussiness_type.action + + diff --git a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml index 2fd6b77d3..4f9a5257e 100644 --- a/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml +++ b/src/main/resources/mybatis/mapper/inout/IoOrderDao.xml @@ -131,4 +131,10 @@ OR supplementOrderType != '') + +