|  |  | 
 |  |  |     public void setUserUtil(UserUtil userUtil) { | 
 |  |  |         this.userUtil = userUtil; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Transactional | 
 |  |  |     public int save(PrOrder p) { | 
 |  |  |         p.id = null; | 
 |  |  | 
 |  |  |             throw new RuntimeException("订单名称不能重复"); | 
 |  |  |         } | 
 |  |  |         extractedCheck(p); | 
 |  |  |         p.setDeleted(false); | 
 |  |  |         p.deleted = false; | 
 |  |  |         BaUser loginUser = userUtil.getUser(UserTokenContext.get()); | 
 |  |  |         if (loginUser != null) { | 
 |  |  |             p.creator = loginUser.id; | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private void changeRate(PrOrder prOrder) { | 
 |  |  |         List<PrOrderItem> items = prOrder.items; | 
 |  |  |         for (int i = 1; i < items.size(); i++) { | 
 |  |  |             for (int j = i - 1; j >= 0; j--) { | 
 |  |  |                 //拿着i依次跟上一个比较,如果产品相同,则上一个记录complete_number - number 如果 > 0 分给i ,如果 < 0 则将 complete_number 置为0 | 
 |  |  |                 if (items.get(j).getProId().intValue() == items.get(i).getProId().intValue()) { | 
 |  |  |                     int remainNumber = items.get(j).getCompleteNumber() - items.get(j).getNumber(); | 
 |  |  |                     if (remainNumber > 0) { | 
 |  |  |                         items.get(j).setCompleteNumber(items.get(j).getNumber()); | 
 |  |  |                         items.get(j).setCompleteRate("100.00%"); | 
 |  |  |                         items.get(i).setCompleteNumber(remainNumber); | 
 |  |  |                         BigDecimal remainBig = new BigDecimal(remainNumber * 100); | 
 |  |  |                         BigDecimal iNumberBig = new BigDecimal(items.get(i).getNumber()); | 
 |  |  |                         BigDecimal result = remainBig.divide(iNumberBig, 2, RoundingMode.HALF_UP); | 
 |  |  |                         items.get(i).setCompleteRate(result.toString() +"%"); | 
 |  |  |                     }else{ | 
 |  |  |                         items.get(i).setCompleteNumber(0); | 
 |  |  |                         items.get(i).setCompleteRate("0.00%"); | 
 |  |  |         if (prOrder != null && prOrder.items != null) { | 
 |  |  |             List<PrOrderItem> items = prOrder.items; | 
 |  |  |             for (int i = 1; i < items.size(); i++) { | 
 |  |  |                 for (int j = i - 1; j >= 0; j--) { | 
 |  |  |                     //拿着i依次跟上一个比较,如果产品相同,则上一个记录complete_number - number 如果 > 0 分给i ,如果 < 0 则将 complete_number 置为0 | 
 |  |  |                     if (items.get(j).getProId().intValue() == items.get(i).getProId().intValue()) { | 
 |  |  |                         int remainNumber = items.get(j).getCompleteNumber() - items.get(j).getNumber(); | 
 |  |  |                         if (remainNumber > 0) { | 
 |  |  |                             items.get(j).setCompleteNumber(items.get(j).getNumber()); | 
 |  |  |                             items.get(j).setCompleteRate("100.00%"); | 
 |  |  |                             items.get(i).setCompleteNumber(remainNumber); | 
 |  |  |                             BigDecimal remainBig = new BigDecimal(remainNumber * 100); | 
 |  |  |                             BigDecimal iNumberBig = new BigDecimal(items.get(i).getNumber()); | 
 |  |  |                             BigDecimal result = remainBig.divide(iNumberBig, 2, RoundingMode.HALF_UP); | 
 |  |  |                             items.get(i).setCompleteRate(result.toString() + "%"); | 
 |  |  |                         } else { | 
 |  |  |                             items.get(i).setCompleteNumber(0); | 
 |  |  |                             items.get(i).setCompleteRate("0.00%"); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |         } | 
 |  |  |         return orderList; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 只更新状态,不更新其他字段 | 
 |  |  |      * @param order | 
 |  |  |      * 更新状态  如果有在执行中的任务,不让暂停 | 
 |  |  |      * | 
 |  |  |      * @param order 更新状态  如果有在执行中的任务,不让暂停 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |    @Transactional | 
 |  |  |     @Transactional | 
 |  |  |     public int updateStatus(PrOrder order) { | 
 |  |  |         if(order.status == OrderStatusEnum.NORMAL.getCode()){ | 
 |  |  |         if (order.status == OrderStatusEnum.NORMAL.getCode()) { | 
 |  |  |             PrOrder prOrder = orderDao.selectByPrimaryKey(order.id); | 
 |  |  |             prOrder.status = order.status; | 
 |  |  |             extractedCheck(prOrder); | 
 |  |  |         } | 
 |  |  |        PrOrder param = new PrOrder(); | 
 |  |  |         param.id =order.id; | 
 |  |  |         PrOrder param = new PrOrder(); | 
 |  |  |         param.id = order.id; | 
 |  |  |         param.status = order.status; | 
 |  |  |         return orderDao.updateByPrimaryKeySelective(param); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //如果交期小于当前时间,不允许设置为正常 | 
 |  |  |     private void extractedCheck(PrOrder order) { | 
 |  |  |         if(order.status == OrderStatusEnum.NORMAL.getCode()){ | 
 |  |  |         if (order.status == OrderStatusEnum.NORMAL.getCode()) { | 
 |  |  |             String deliveryDateStr = order.getDeliveryDate(); | 
 |  |  |             LocalDate endDate = LocalDate.parse(deliveryDateStr, DateTimeFormatter.ISO_LOCAL_DATE); | 
 |  |  |             LocalDate nextDay = endDate.plusDays(1); |