package com.glxp.api.controller.inv; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageInfo; import com.glxp.api.annotation.AuthRuleAnnotation; import com.glxp.api.common.res.BaseResponse; import com.glxp.api.common.util.ResultVOUtils; import com.glxp.api.entity.basic.UdiEntity; import com.glxp.api.entity.basic.UdiProductEntity; import com.glxp.api.req.basic.FilterUdiRelRequest; import com.glxp.api.req.inout.FilterOrderRequest; import com.glxp.api.req.inv.FilterCodeTraceRequest; import com.glxp.api.req.inv.FilterInvProductDetailRequest; import com.glxp.api.res.PageSimpleResponse; import com.glxp.api.res.basic.UdiRelevanceResponse; import com.glxp.api.res.inout.IoOrderResponse; import com.glxp.api.res.inv.UdiTraceResponse; import com.glxp.api.service.basic.UdiProductService; import com.glxp.api.service.basic.UdiRelevanceService; import com.glxp.api.service.inout.IoOrderService; import com.glxp.api.util.MsDateUtil; import com.glxp.api.util.udi.FilterUdiUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @RestController public class UdiTraceController { @Resource UdiRelevanceService udiRelevanceService; @Resource UdiProductService udiProductService; @Resource IoOrderService orderService; @AuthRuleAnnotation("") @GetMapping("udiwarehouse/trace/filter") public BaseResponse list(FilterCodeTraceRequest filterCodeTraceRequest) { if (StrUtil.isEmpty(filterCodeTraceRequest.getCode())) { return ResultVOUtils.error(500, "UDI码不能为空"); } UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeTraceRequest.getCode()); if (udiEntity == null) { return ResultVOUtils.error(500, "无效条码"); } UdiRelevanceResponse udiInfoBean = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); if (udiInfoBean == null) { return ResultVOUtils.error(500, "耗材字典不存在此产品!"); } List udiInfoEntities = udiProductService.findByUuids(udiInfoBean.getUuid()); FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); if (udiInfoEntities != null && udiInfoEntities.size() > 1) { filterInvProductDetailRequest.setRelId(udiInfoBean.getId() + ""); filterInvProductDetailRequest.setBatchNo(udiEntity.getBatchNo()); } else { filterInvProductDetailRequest.setCode(filterCodeTraceRequest.getCode()); } filterInvProductDetailRequest.setSupId(filterCodeTraceRequest.getSupId()); List invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); if (invProductDetailEntities.size() > 0) { Map filterMap = new HashMap<>(); for (InvProductDetailEntity invProductDetailEntity : invProductDetailEntities) { filterMap.put(invProductDetailEntity.getOrderId(), invProductDetailEntity.getOrderId()); } List orderIds = new ArrayList<>(); for (String key : filterMap.keySet()) { orderIds.add(key); } FilterOrderRequest filterOrderRequest = new FilterOrderRequest(); filterOrderRequest.setOrderIds(orderIds); List orderEntities = orderService.filterList(filterOrderRequest); FilterUdiRelRequest filterUdiInfoRequest = new FilterUdiRelRequest(); filterUdiInfoRequest.setNameCode(udiEntity.getUdi()); List udiRelevanceResponses = udiRelevanceService.filterUdiGp(filterUdiInfoRequest); UdiRelevanceResponse udiRelevance = null; if (udiRelevanceResponses != null && udiRelevanceResponses.size() > 0) { udiRelevance = udiRelevanceResponses.get(0); } UdiRelevanceResponse finalUdiRelevance = udiRelevance; List udiTraceResponseList = orderEntities.stream().map(item -> { UdiTraceResponse udiTraceResponse = new UdiTraceResponse(); udiTraceResponse.setOrderId(item.getBillNo()); udiTraceResponse.setBillTypeName(item.getBillTypeName()); udiTraceResponse.setFromCorp(item.getFromName()); udiTraceResponse.setActDate(MsDateUtil.formatDate(item.getCreateTime())); if (finalUdiRelevance != null) { udiTraceResponse.setYlqxzcrbarmc(finalUdiRelevance.getYlqxzcrbarmc()); udiTraceResponse.setCpmctymc(finalUdiRelevance.getCpmctymc()); udiTraceResponse.setGgxh(finalUdiRelevance.getGgxh()); InvProductDetailEntity invProductDetailEntity = invProductDetailEntities.get(0); udiTraceResponse.setBatchNo(invProductDetailEntity.getBatchNo()); udiTraceResponse.setProduceDate(invProductDetailEntity.getProduceDate()); udiTraceResponse.setExpireDate(invProductDetailEntity.getExpireDate()); udiTraceResponse.setCount(invProductDetailEntity.getCount()); } return udiTraceResponse; }).collect(Collectors.toList()); PageInfo pageInfo; pageInfo = new PageInfo<>(udiTraceResponseList); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(udiTraceResponseList); return ResultVOUtils.success(pageSimpleResponse); } else { return ResultVOUtils.error(500, "未查询到数据!"); } } @AuthRuleAnnotation("") @GetMapping("spms/inv/products/order/trace") public BaseResponse filterOrderTrace(FilterCodeTraceRequest filterCodeTraceRequest) { if (filterCodeTraceRequest.getCode() == null) { return ResultVOUtils.success(); } System.out.println(filterCodeTraceRequest + "---------------------------------------------"); UdiEntity udiEntity = FilterUdiUtils.getUdi(filterCodeTraceRequest.getCode()); if (udiEntity == null) { return ResultVOUtils.error(500, "无效条码"); } UdiRelevanceResponse udiInfoBean = udiRelevanceService.selectByNameCode(udiEntity.getUdi()); if (udiInfoBean == null) { return ResultVOUtils.error(500, "耗材字典不存在此产品!"); } List mInvProductDetailEntities = new ArrayList<>(); //判断是否多级包装 List udiInfoEntities = udiProductService.findByUuids(udiInfoBean.getUuid()); if (udiInfoEntities != null && udiInfoEntities.size() > 1) { //多级包装根据产品ID,批次号查询 //1.判断是否di关联多个产品ID List udiRelevanceResponses = udiRelevanceService.selectAllByNameCode(udiEntity.getUdi()); if (CollUtil.isNotEmpty(udiRelevanceResponses)) { for (UdiRelevanceResponse udiRelevanceResponse : udiRelevanceResponses) { //假设条码不完整 FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); filterInvProductDetailRequest.setCode(filterCodeTraceRequest.getCode()); filterInvProductDetailRequest.setSupId(filterCodeTraceRequest.getSupId()); List temps = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); if (CollUtil.isNotEmpty(temps)) { Map> filterMaps = temps.stream().collect(Collectors.groupingBy(InvProductDetailEntity::getBatchNo)); if (filterMaps.size() > 0) { for (String bacthNo : filterMaps.keySet()) { filterInvProductDetailRequest = new FilterInvProductDetailRequest(); filterInvProductDetailRequest.setRelId(udiRelevanceResponse.getId() + ""); filterInvProductDetailRequest.setBatchNo(bacthNo); List invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); if (CollUtil.isNotEmpty(invProductDetailEntities)) { mInvProductDetailEntities.addAll(invProductDetailEntities); } } } } else { filterInvProductDetailRequest = new FilterInvProductDetailRequest(); filterInvProductDetailRequest.setRelId(udiRelevanceResponse.getId() + ""); filterInvProductDetailRequest.setBatchNo(udiEntity.getBatchNo()); List invProductDetailEntities = invProductDetailService.selectByUnique(udiRelevanceResponse.getId(), udiEntity.getBatchNo(), null, null, null); if (CollUtil.isNotEmpty(invProductDetailEntities)) { mInvProductDetailEntities.addAll(invProductDetailEntities); } } } } } else { //单级包装 FilterInvProductDetailRequest filterInvProductDetailRequest = new FilterInvProductDetailRequest(); filterInvProductDetailRequest.setCode(filterCodeTraceRequest.getCode()); filterInvProductDetailRequest.setSupId(filterCodeTraceRequest.getSupId()); List invProductDetailEntities = invProductDetailService.list(new QueryWrapper().likeRight("code", filterCodeTraceRequest.getCode())); // List invProductDetailEntities = invProductDetailService.filterInvProductDetailList(filterInvProductDetailRequest); if (CollUtil.isNotEmpty(invProductDetailEntities)) { mInvProductDetailEntities.addAll(invProductDetailEntities); } } if (mInvProductDetailEntities.size() > 0) { Map filterMap = new HashMap<>(); for (InvProductDetailEntity invProductDetailEntity : mInvProductDetailEntities) { filterMap.put(invProductDetailEntity.getOrderId(), invProductDetailEntity.getOrderId()); } List orderIds = new ArrayList<>(); for (String key : filterMap.keySet()) { orderIds.add(key); } FilterOrderRequest filterOrderRequest = new FilterOrderRequest(); filterOrderRequest.setOrderIds(orderIds); filterOrderRequest.setPage(filterCodeTraceRequest.getPage()); filterOrderRequest.setLimit(filterCodeTraceRequest.getLimit()); List orderEntities = orderService.filterList(filterOrderRequest); Collections.sort(orderEntities, Comparator.comparing(IoOrderResponse::getCreateTime)); PageInfo pageInfo; pageInfo = new PageInfo<>(orderEntities); PageSimpleResponse pageSimpleResponse = new PageSimpleResponse<>(); pageSimpleResponse.setTotal(pageInfo.getTotal()); pageSimpleResponse.setList(orderEntities); return ResultVOUtils.success(pageSimpleResponse); } else { return ResultVOUtils.error(500, "未查询到数据!"); } } }