diff --git a/Java/OrderInfoServiceImpl b/Java/OrderInfoServiceImpl
new file mode 100644
index 0000000000000000000000000000000000000000..7e77afe42b27c6204e9fcc50f428873437dda07e
--- /dev/null
+++ b/Java/OrderInfoServiceImpl
@@ -0,0 +1,785 @@
+
+/**
+ *
+ * 客户订单服务实现类
+ *
+ * @since 2020-05-14
+ */
+@Service
+public class OrderInfoServiceImpl extends ServiceImpl implements IOrderInfoService {
+ private static final Logger logger = LoggerFactory.getLogger(ManureServiceImpl.class);
+
+
+ /**
+ * 修改订单状态
+ *
+ * @param orderId 订单ID
+ * @param status 状态 订单状态 (0:审核中,1:已审核,2:已发货,3弃单,4,退单,5 已退单)'
+ * @param outNumber 修改数量
+ * @param warehouseId 仓库Id
+ * @param operationTime 操作时间
+ * @return
+ */
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED)
+ // 有事务则加入,没有则建立)
+ public ResponseResult updateOrderStatus(String orderId, String status, String serviceId, String serviceName, BigDecimal outNumber, Integer warehouseId, String operationTime) {
+ logger.info("修改订单状态,订单状态:{},订单ID:{},操作人Id:{},操作人姓名:{}", status, orderId, serviceId, serviceName);
+ //查询原订单
+ OrderInfo byId = orderInfoService.getById(orderId);
+ if ("2".equals(status)) {
+ //判断是否发完货
+ if (new BigDecimal(byId.getNum()).compareTo(new BigDecimal(byId.getHairNum())) == 0)
+ return new ResponseResult(ResponseMessage.FAIL, "该订单发货已完成,请勿重复提交!");
+
+ //状态不等于已发货
+ if (byId.getOrderStatus() != 2) {
+ //发送消息提醒给负责人
+ NewsUtil.saveNews("123456789", "系统通知", byId.getServiceId(), byId.getServiceName(), "订单" + byId.getOrderNum() + ",订单状态变更为已发货!");
+ }
+ //发货状态
+ byId.setOrderStatus(Integer.parseInt(status));
+ //修改发货数
+ byId.setHairNum(new BigDecimal(byId.getHairNum()).add(outNumber).toString());
+ //查询改规格的所有进货记录,先进先出
+ QueryWrapper wrapper = new QueryWrapper();
+ wrapper.orderByAsc("create_time");
+ wrapper.eq("remark_id", byId.getRemarkId());
+ wrapper.eq("status", 0);
+ wrapper.eq("warehouse_id", warehouseId);//仓库
+ List list = purchaseService.list(wrapper);
+ if (list.size() == 0)
+ return new ResponseResult(ResponseMessage.UPDATE_FAIL, "该规格可用库存不足,请先补货!");
+ //修改商品规格总库存数
+ ProductRemark byId1 = remarkService.getById(byId.getRemarkId());
+ //判断库存是否小于零
+ if (byId1.getInventory().subtract(outNumber).compareTo(new BigDecimal("0.00")) == -1)
+ return new ResponseResult(ResponseMessage.UPDATE_FAIL, "该规格可用库存不足,请先补货!");
+ byId1.setInventory(byId1.getInventory().subtract(outNumber));
+ remarkService.updateById(byId1);
+ //获取单据编码
+ String billCode = voucherService.getBillCode("'" + "XSD-" + "'", "pro_stock_record", "status", 1, "'" + operationTime + "'");
+ for (int i = 0; i < list.size(); i++) {
+ //改进货记录可用数量减去发货数
+ BigDecimal subtract = list.get(i).getSurplusNum().subtract(outNumber);
+ //零大于进货记录可用数量减去发货数
+ int num = new BigDecimal("0.00").compareTo(subtract);
+ //这批进货记录不够抵消
+ if (num == 1) {
+ //发货数减去这批进货的可用数量就是还剩多少件没有抵消
+ outNumber = outNumber.subtract(list.get(i).getSurplusNum());
+
+ //增加一条订单发货记录
+ ProStockRecord pro = new ProStockRecord();
+ pro.setBillCode(billCode);
+ pro.setNum(list.get(i).getSurplusNum());//变更数量(退货或出库数)
+ pro.setSurplusNum(list.get(i).getSurplusNum());
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(1);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(1);//0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//排序
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ pro.setIsFinish(1);
+ pro.setRemarks("发货记录");
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ pro.setStockRecordId(IdUtil.simpleUUID());
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价
+ pro.setDelStatus(0);
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ proStockRecordService.save(pro);
+ //将本次进货可用剩余数量设置为零
+ list.get(i).setSurplusNum(new BigDecimal("0.00"));
+ //状态修改为已售空
+ list.get(i).setStatus(1);
+ purchaseService.updateById(list.get(i));
+ //查询客户
+ Customer byId2 = customerService.getById(byId.getCustomerId());
+ //客户应收款增加
+ byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(byId2);
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("发货记录");
+ moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(byId2.getCollectMoney());
+ moneyChangeRecord.setObjId(byId2.getCustomerId());
+ moneyChangeRecord.setObjName(byId2.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+
+ } else if (num == -1) {//本次进货可用数量大于零(表示可以抵扣完)
+ //修改本次进货可用数量
+ list.get(i).setSurplusNum(subtract);
+ purchaseService.updateById(list.get(i));
+ //增加一条订单发货记录
+ ProStockRecord pro = new ProStockRecord();
+ pro.setBillCode(billCode);
+ pro.setIsFinish(1);//状态修改为已售空
+ pro.setNum(outNumber);//变更数量(退货或出库数)
+ pro.setSurplusNum(outNumber);
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(1);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(1);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ if (pro.getRemarks() != null && !"".equals(list.get(i).getRemarks())) {
+ pro.setRemarks(list.get(i).getRemarks());
+ } else {
+ pro.setRemarks("发货记录");
+ }
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ String uuid = IdUtil.simpleUUID();
+ pro.setStockRecordId(uuid);
+ pro.setIsFinish(1);
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价
+ pro.setDelStatus(0);
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ proStockRecordService.save(pro);
+ //查询客户
+ Customer byId2 = customerService.getById(byId.getCustomerId());
+ //客户应收款增加
+ byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(byId2);
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("发货记录");
+ moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(byId2.getCollectMoney());
+ moneyChangeRecord.setObjId(byId2.getCustomerId());
+ moneyChangeRecord.setObjName(byId2.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+
+ break;//跳出循环
+ } else if (num == 0) { //相等表示这个库存正好够
+ //增加一条订单发货记录
+ ProStockRecord pro = new ProStockRecord();
+
+
+ //将本次进货可用剩余数量设置为零
+ list.get(i).setSurplusNum(new BigDecimal("0.00"));
+ //状态修改为已售空
+ list.get(i).setStatus(1);
+ purchaseService.updateById(list.get(i));
+ pro.setIsFinish(1);//状态修改为已售空
+ pro.setNum(outNumber);//变更数量(退货或出库数)
+ pro.setSurplusNum(outNumber);
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(1);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(1);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ if (pro.getRemarks() != null && !"".equals(list.get(i).getRemarks())) {
+ pro.setRemarks(list.get(i).getRemarks());
+ } else {
+ pro.setRemarks("发货记录");
+ }
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ String uuid = IdUtil.simpleUUID();
+ pro.setStockRecordId(uuid);
+ pro.setIsFinish(1);
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));//数量乘以进货单价
+ pro.setDelStatus(0);
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 2, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ pro.setBillCode(billCode);
+ proStockRecordService.save(pro);
+ //查询客户
+ Customer byId2 = customerService.getById(byId.getCustomerId());
+ //客户应收款增加
+ byId2.setCollectMoney(new BigDecimal(byId2.getCollectMoney()).add(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(byId2);
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("发货记录");
+ moneyChangeRecord.setChangeStatus(0);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(byId2.getCollectMoney());
+ moneyChangeRecord.setObjId(byId2.getCustomerId());
+ moneyChangeRecord.setObjName(byId2.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+
+ //跳出循环
+ break;
+ }
+ }
+
+ //购买数减去已发数
+ BigDecimal subtract = new BigDecimal(byId.getNum()).subtract(new BigDecimal(byId.getHairNum()));
+ //判断是否发完货
+ if (subtract.compareTo(new BigDecimal("0.00")) == 0) {
+ //查询该订单的所有出库记录
+ QueryWrapper wrapper1 = new QueryWrapper();
+ wrapper1.eq("order_id", byId.getOrderId());
+ wrapper1.eq("is_finish", 1);
+ wrapper1.eq("del_status", 0);
+ List list1 = proStockRecordService.list(wrapper1);
+ //计算利润
+ BigDecimal reduce = list1.stream()
+ // 将ProStockRecord对象的Money取出来map为Bigdecimal
+ .map(ProStockRecord::getMoney)
+ // 使用reduce()聚合函数,实现累加器
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ byId.setProfit(new BigDecimal(byId.getRealityMoney()).subtract(reduce));
+ orderInfoService.updateById(byId);
+ } else {
+ orderInfoService.updateById(byId);
+ }
+ return new ResponseResult(ResponseMessage.OK);
+
+ } else if ("5".equals(status)) {
+ //判断是否发完货
+ if (new BigDecimal(byId.getNum()).compareTo(byId.getRetreatNum()) == 0)
+ return new ResponseResult(ResponseMessage.FAIL, "该订单退货已完成,请勿重复提交!");
+
+
+ //TODO 退货将退货数量按照先进先出进行退回
+ //计算退货数
+ BigDecimal retreatNum = byId.getRetreatNum().add(outNumber);
+ //修改退货数
+ byId.setRetreatNum(retreatNum);
+ //查询该订单订单出库记录
+ QueryWrapper wrapper = new QueryWrapper();
+ wrapper.orderByAsc("create_time", "sort");
+ wrapper.eq("order_id", orderId);
+ wrapper.eq("is_finish", 1);
+ wrapper.eq("status", 1);
+ wrapper.eq("del_status", 0);
+ List list = proStockRecordService.list(wrapper);
+ //获取单据编码
+ String billCode = voucherService.getBillCode("'" + "XSTHD-" + "'", "pro_stock_record", "status", 2, "'" + operationTime + "'");
+ for (int i = 0; i < list.size(); i++) {
+ //该批次剩余可推数量
+ BigDecimal subtract = list.get(i).getSurplusNum().subtract(outNumber);
+ //零大于发货记录可用数量减去发货数
+ int num = new BigDecimal("0.00").compareTo(subtract);
+ //这批发货记录不够抵消
+ if (num == 1) {
+ //增加一条订单退货记录
+ ProStockRecord pro = new ProStockRecord();
+ pro.setBillCode(billCode);
+ //修改商品规格数量
+ ProductRemark byId2 = remarkService.getById(byId.getRemarkId());
+ //库存数
+ byId2.setInventory(byId2.getInventory().add(list.get(i).getSurplusNum()));
+ pro.setNum(list.get(i).getSurplusNum());//变更数量(退货或出库数)
+ remarkService.updateById(byId2);
+
+ //修改进货记录进货可用数
+ Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId());
+ byId1.setSurplusNum(byId1.getSurplusNum().add(list.get(i).getSurplusNum()));
+ //修改状体为未售空
+ byId1.setStatus(0);
+ purchaseService.updateById(byId1);
+
+ //发货数减去这批进货的可用数量就是还剩多少件没有抵消
+ outNumber = outNumber.subtract(list.get(i).getSurplusNum());
+
+ pro.setSurplusNum(list.get(i).getSurplusNum());
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(0);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ pro.setRemarks("退货记录");
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ pro.setStockRecordId(IdUtil.simpleUUID());
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ proStockRecordService.save(pro);
+
+ //将本次发货可用剩余数量设置为零
+ list.get(i).setSurplusNum(new BigDecimal("0.00"));
+ //状态修改为已退货
+ list.get(i).setIsFinish(2);
+ //修改为已删除
+ list.get(i).setDelStatus(1);
+ proStockRecordService.updateById(list.get(i));
+ //查询客户
+ Customer customer = customerService.getById(byId.getCustomerId());
+ //客户应收款减少
+ customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(customer);
+ //新增一条退货单
+ OrderInfo orderInfo = new OrderInfo();
+ orderInfo.setOrderId(IdUtil.simpleUUID());
+ orderInfo.setOrderNum(byId.getOrderNum());
+ orderInfo.setServiceId(byId.getServiceId());
+ orderInfo.setServiceName(byId.getServiceName());
+ orderInfo.setCreateServiceId(byId.getCreateServiceId());
+ orderInfo.setCreateServiceName(byId.getCreateServiceName());
+ orderInfo.setCustomerId(byId.getCustomerId());
+ orderInfo.setCustomerName(byId.getCustomerName());
+ orderInfo.setPhone(byId.getPhone());
+ orderInfo.setProvince(byId.getProvince());
+ orderInfo.setCity(byId.getCity());
+ orderInfo.setDistrict(byId.getDistrict());
+ orderInfo.setAddress(byId.getAddress());
+ orderInfo.setProductId(byId.getProductId());
+ orderInfo.setProductName(byId.getProductName());
+ orderInfo.setRemarkName(byId.getRemarkName());
+ orderInfo.setRemarkId(byId.getRemarkId());
+ orderInfo.setNum(pro.getNum().toString());//退货数
+ orderInfo.setUnit(byId.getUnit());
+ //计算实付金额
+ BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ //计算金额
+ BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+ //计算返点
+ BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ orderInfo.setMoney(money.toString());
+ orderInfo.setRebate(rebate.toString());
+ orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString()));
+ orderInfo.setPayMethod(byId.getPayMethod());
+ orderInfo.setOrderStatus(7);
+ orderInfo.setOrderTime(operationTime);
+ orderInfo.setPrice(byId.getPrice());
+ orderInfo.setProviderName(byId.getProviderName());
+ orderInfo.setHairNum("0.00");
+ orderInfo.setRetreatNum(new BigDecimal(0));
+ orderInfo.setProfit(new BigDecimal(0));
+ orderInfo.setGiftStatus(0);
+ orderInfo.setCreateTime(DateUtil.now());
+ orderInfoMapper.insert(orderInfo);
+
+
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("退货记录");
+ moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(customer.getCollectMoney());
+ moneyChangeRecord.setObjId(customer.getCustomerId());
+ moneyChangeRecord.setObjName(customer.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+
+
+ } else if (num == -1) {
+ //本次进货可用数量大于零(表示可以抵扣完,还有余数)
+ //增加一条订单退货记录
+ ProStockRecord pro = new ProStockRecord();
+ pro.setBillCode(billCode);
+ pro.setNum(outNumber);//变更数量(退货或出库数)
+ pro.setSurplusNum(outNumber);
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(0);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ pro.setRemarks("退货记录");
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ pro.setStockRecordId(IdUtil.simpleUUID());
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ proStockRecordService.save(pro);
+ //库存充足修改库存数
+ list.get(i).setSurplusNum(subtract);
+ proStockRecordService.updateById(list.get(i));
+
+ //修改进货记录进货可用数
+ Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId());
+ byId1.setSurplusNum(byId1.getSurplusNum().add(outNumber));
+ //修改状体为未售空
+ byId1.setStatus(0);
+ purchaseService.updateById(byId1);
+
+ //修改商品规格数量
+ ProductRemark byId2 = remarkService.getById(byId.getRemarkId());
+ //库存数
+ byId2.setInventory(byId2.getInventory().add(outNumber));
+ remarkService.updateById(byId2);
+ //查询客户
+ Customer customer = customerService.getById(byId.getCustomerId());
+ //客户应收款减少
+ customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(customer);
+ //新增一条退货单
+ OrderInfo orderInfo = new OrderInfo();
+ orderInfo.setOrderId(IdUtil.simpleUUID());
+ orderInfo.setOrderNum(byId.getOrderNum());
+ orderInfo.setServiceId(byId.getServiceId());
+ orderInfo.setServiceName(byId.getServiceName());
+ orderInfo.setCreateServiceId(byId.getCreateServiceId());
+ orderInfo.setCreateServiceName(byId.getCreateServiceName());
+ orderInfo.setCustomerId(byId.getCustomerId());
+ orderInfo.setCustomerName(byId.getCustomerName());
+ orderInfo.setPhone(byId.getPhone());
+ orderInfo.setProvince(byId.getProvince());
+ orderInfo.setCity(byId.getCity());
+ orderInfo.setDistrict(byId.getDistrict());
+ orderInfo.setAddress(byId.getAddress());
+ orderInfo.setProductId(byId.getProductId());
+ orderInfo.setProductName(byId.getProductName());
+ orderInfo.setRemarkName(byId.getRemarkName());
+ orderInfo.setRemarkId(byId.getRemarkId());
+ orderInfo.setNum(pro.getNum().toString());//退货数
+ orderInfo.setUnit(byId.getUnit());
+ //计算实付金额
+ BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ //计算金额
+ BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+ //计算返点
+ BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ orderInfo.setMoney(money.toString());
+ orderInfo.setRebate(rebate.toString());
+ orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString()));
+ orderInfo.setPayMethod(byId.getPayMethod());
+ orderInfo.setOrderStatus(7);
+ orderInfo.setOrderTime(operationTime);
+ orderInfo.setPrice(byId.getPrice());
+ orderInfo.setProviderName(byId.getProviderName());
+ orderInfo.setHairNum("0.00");
+ orderInfo.setRetreatNum(new BigDecimal(0));
+ orderInfo.setProfit(new BigDecimal(0));
+ orderInfo.setGiftStatus(0);
+ orderInfo.setCreateTime(DateUtil.now());
+ orderInfoMapper.insert(orderInfo);
+
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("退货记录");
+ moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(customer.getCollectMoney());
+ moneyChangeRecord.setObjId(customer.getCustomerId());
+ moneyChangeRecord.setObjName(customer.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+ //跳出循环
+ break;
+
+ } else if (num == 0) {
+ //相等表示这个库存正好够
+ //将发货可用剩余数量设置为零
+ list.get(i).setSurplusNum(new BigDecimal("0.00"));
+ //状态修改为已退货
+ list.get(i).setIsFinish(2);
+ //修改为已删除
+ list.get(i).setDelStatus(1);
+ proStockRecordService.updateById(list.get(i));
+ //增加一条订单购买数记录记录
+ ProStockRecord pro = new ProStockRecord();
+ pro.setBillCode(billCode);
+ pro.setNum(outNumber);//变更数量(退货或出库数)
+ pro.setSurplusNum(outNumber);
+ pro.setProductId(list.get(i).getProductId());//商品Id
+ pro.setRemarkId(list.get(i).getRemarkId());//规格Id
+ pro.setPurchaseId(list.get(i).getPurchaseId());//进货Id
+ pro.setStockStatus(0);//库存变化 0 加 1 减
+ pro.setOrderId(orderId);//订单Id
+ pro.setStatus(2);// 0供应商进货 1 订单出库(发货记录) 2 订单退货,3供应商退货
+ pro.setSort(i);//0 不展示(订单不是已发货的不展示) 1 展示
+ pro.setPurchasePrice(list.get(i).getPurchasePrice());//进货单价
+ pro.setRemarks("退货记录");
+ pro.setServiceId(serviceId);
+ pro.setServiceName(serviceName);
+ pro.setStockRecordId(IdUtil.simpleUUID());
+ pro.setMoney(pro.getNum().multiply(pro.getPurchasePrice()).setScale(2, BigDecimal.ROUND_HALF_UP));
+ pro.setVoucherStatus(0);//未生成凭证
+ pro.setWarehouseId(list.get(i).getWarehouseId());//仓库id
+ pro.setWarehouseName(list.get(i).getWarehouseName());//仓库名
+ pro.setProviderId(list.get(i).getProviderId());//供应商id
+ pro.setProviderName(list.get(i).getProviderName());//供应商姓名
+ pro.setCustomerId(byId.getCustomerId());
+ pro.setCustomerName(byId.getCustomerName());
+ pro.setOperationTime(operationTime);
+ //计算平均每个商品的价钱
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP);
+ pro.setRealityMoney(divide.multiply(pro.getNum()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());//平均每个商品的实付金额
+ proStockRecordService.save(pro);
+
+ //修改进货记录进货可用数
+ Purchase byId1 = purchaseService.getById(list.get(i).getPurchaseId());
+ byId1.setSurplusNum(byId1.getSurplusNum().add(outNumber));
+ //修改状体为未售空
+ byId1.setStatus(0);
+ purchaseService.updateById(byId1);
+ //修改商品规格数量
+ ProductRemark byId2 = remarkService.getById(byId.getRemarkId());
+ //库存数
+ byId2.setInventory(byId2.getInventory().add(outNumber));
+ remarkService.updateById(byId2);
+ //查询客户
+ Customer customer = customerService.getById(byId.getCustomerId());
+ //客户应收款减少
+ customer.setCollectMoney(new BigDecimal(customer.getCollectMoney()).subtract(new BigDecimal(pro.getRealityMoney())).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
+ customerService.updateById(customer);
+
+ //新增一条退货单
+ OrderInfo orderInfo = new OrderInfo();
+ orderInfo.setOrderId(IdUtil.simpleUUID());
+ orderInfo.setOrderNum(byId.getOrderNum());
+ orderInfo.setServiceId(byId.getServiceId());
+ orderInfo.setServiceName(byId.getServiceName());
+ orderInfo.setCreateServiceId(byId.getCreateServiceId());
+ orderInfo.setCreateServiceName(byId.getCreateServiceName());
+ orderInfo.setCustomerId(byId.getCustomerId());
+ orderInfo.setCustomerName(byId.getCustomerName());
+ orderInfo.setPhone(byId.getPhone());
+ orderInfo.setProvince(byId.getProvince());
+ orderInfo.setCity(byId.getCity());
+ orderInfo.setDistrict(byId.getDistrict());
+ orderInfo.setAddress(byId.getAddress());
+ orderInfo.setProductId(byId.getProductId());
+ orderInfo.setProductName(byId.getProductName());
+ orderInfo.setRemarkName(byId.getRemarkName());
+ orderInfo.setRemarkId(byId.getRemarkId());
+ orderInfo.setNum(pro.getNum().toString());//退货数
+ orderInfo.setUnit(byId.getUnit());
+ //计算实付金额
+ BigDecimal realitymoney = (new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ //计算金额
+ BigDecimal money = (new BigDecimal(byId.getMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+ //计算返点
+ BigDecimal rebate = (new BigDecimal(byId.getRebate()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP))
+ .multiply(new BigDecimal(orderInfo.getNum())).setScale(2, BigDecimal.ROUND_HALF_UP);
+
+ orderInfo.setMoney(money.toString());
+ orderInfo.setRebate(rebate.toString());
+ orderInfo.setRealityMoney(Double.parseDouble(realitymoney.toString()));
+ orderInfo.setPayMethod(byId.getPayMethod());
+ orderInfo.setOrderStatus(7);
+ orderInfo.setOrderTime(operationTime);
+ orderInfo.setPrice(byId.getPrice());
+ orderInfo.setProviderName(byId.getProviderName());
+ orderInfo.setHairNum("0.00");
+ orderInfo.setRetreatNum(new BigDecimal(0));
+ orderInfo.setProfit(new BigDecimal(0));
+ orderInfo.setGiftStatus(0);
+ orderInfo.setCreateTime(DateUtil.now());
+ orderInfoMapper.insert(orderInfo);
+ //增加金额变化记录
+ MoneyChangeRecord moneyChangeRecord = new MoneyChangeRecord();
+ moneyChangeRecord.setChangeMsg("退货记录");
+ moneyChangeRecord.setChangeStatus(1);//0 增加 1 减少
+ moneyChangeRecord.setChangeType(1);//'变更类型 0 供应商 1 客户 2 收款 3 付款',
+ moneyChangeRecord.setMoney(pro.getRealityMoney());
+ moneyChangeRecord.setCountMoney(customer.getCollectMoney());
+ moneyChangeRecord.setObjId(customer.getCustomerId());
+ moneyChangeRecord.setObjName(customer.getUserName());
+ moneyChangeRecord.setCreateServiceId(serviceId);
+ moneyChangeRecord.setCreateServiceName(serviceName);
+ moneyChangeRecord.setCreateTime(DateUtil.now());
+ moneyChangeRecord.setChangeId(pro.getStockRecordId());
+ moneyChangeRecord.setBillTime(operationTime);
+ moneyChangeRecord.setBillCode(billCode);
+ moneyChangeRecordService.save(moneyChangeRecord);
+ //跳出循环
+ break;
+ }
+ }
+ //判断退货数和发货数是否一致,一致修改状态为已退货
+ if (retreatNum.compareTo(new BigDecimal(byId.getHairNum())) == 0) {
+ //修改状态为已退货
+ byId.setOrderStatus(5);
+ //修改利润为零
+ byId.setProfit(new BigDecimal("0.00"));
+ } else {
+ //查询所剩发货记录
+ QueryWrapper queryWrapper = new QueryWrapper();
+ queryWrapper.orderByAsc("create_time", "sort");
+ queryWrapper.eq("order_id", orderId);
+ queryWrapper.eq("is_finish", 1);
+ queryWrapper.eq("status", 1);
+ queryWrapper.eq("del_status", 0);
+ List proStockRecords = proStockRecordService.list(queryWrapper);
+ //计算所剩发货记录的进货价
+ BigDecimal reduce = proStockRecords.stream()
+ //剩余数量乘以进货单价
+ .map(stockRecord -> stockRecord.getSurplusNum().multiply(stockRecord.getPurchasePrice()))
+ // 使用reduce()聚合函数,实现累加器
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ System.err.println("退货所剩利润" + reduce);
+ //订单实付除以订单总数等于单件实付金额
+ BigDecimal divide = new BigDecimal(byId.getRealityMoney()).divide(new BigDecimal(byId.getNum()), 4, BigDecimal.ROUND_HALF_UP);
+ System.err.println("单件实付金额" + divide);
+ //剩余数量
+ BigDecimal subtract = new BigDecimal(byId.getNum()).subtract(byId.getRetreatNum());
+ System.err.println("剩余数量" + subtract);
+ //单件实付金额乘于剩余数量等于退货后的总实付金额
+ BigDecimal multiply = divide.multiply(subtract);
+ System.err.println("退货后的总实付金额" + multiply);
+ //总实付金额减去剩余进货价等于利润
+ BigDecimal subtract1 = multiply.subtract(reduce);
+ System.err.println("退货后的利润" + subtract1);
+ byId.setProfit(subtract1);//利润
+ }
+ boolean b = orderInfoService.updateById(byId);
+ if (b == true) {
+ //查询订单
+ OrderInfo byId1 = orderInfoService.getById(byId.getOrderId());
+ //状态等于已退货
+ if (byId1.getOrderStatus() == 5) {
+ //发送消息提醒给负责人
+ NewsUtil.saveNews("123456789", "系统通知", byId1.getServiceId(), byId1.getServiceName(), "订单" + byId1.getOrderNum() + ",订单状态变更为已退货!");
+ }
+ if (byId1.getFirstOrderStatus() == 1) {
+ //查询是否还有存在的首次订单
+ QueryWrapper wrapper1 = new QueryWrapper();
+ wrapper1.eq("order_time", byId1.getOrderTime());
+ wrapper1.eq("customer_id", byId1.getCustomerId());
+ wrapper1.eq("first_order_status", 1);
+ wrapper1.notIn("order_status", 3, 4, 5);
+ List list1 = orderInfoService.list(wrapper1);
+ if (list1.size() == 0) {
+ //没有首次订单了修改客户首次订单下单时间
+ Customer customer = new Customer();
+ customer.setCustomerId(byId1.getCustomerId());
+ customer.setFirstOrderTime("");
+ customerService.updateById(customer);
+ }
+ }
+
+
+ return new ResponseResult(ResponseMessage.OK);
+ }
+ } else {
+ int anInt = Integer.parseInt(status);
+ if (anInt != 0) {
+ String str = anInt == 1 ? "审核通过" : anInt == 3 ? "弃单" : anInt == 4 ? "退单" : anInt == 6 ? "已完成" : "";
+ //发送消息提醒给负责人
+ NewsUtil.saveNews("123456789", "系统通知", byId.getServiceId(), byId.getServiceName(), "订单" + byId.getOrderNum() + ",订单状态变更为" + str + "!");
+ }
+ //修改订单状态
+ byId.setOrderStatus(Integer.parseInt(status));
+ boolean b = orderInfoService.updateById(byId);
+ if (byId.getFirstOrderStatus() == 1) {
+ //查询是否还有存在的首次订单
+ QueryWrapper wrapper1 = new QueryWrapper();
+ wrapper1.eq("order_time", byId.getOrderTime());
+ wrapper1.eq("customer_id", byId.getCustomerId());
+ wrapper1.eq("first_order_status", 1);
+ wrapper1.notIn("order_status", 3, 4, 5);
+ List list1 = orderInfoService.list(wrapper1);
+ if (list1.size() == 0) {
+ //没有首次订单了修改客户首次订单下单时间
+ Customer customer = new Customer();
+ customer.setCustomerId(byId.getCustomerId());
+ customer.setFirstOrderTime("");
+ customerService.updateById(customer);
+ }
+ }
+ if (b == true)
+ return new ResponseResult(ResponseMessage.OK);
+ }
+ return new ResponseResult(ResponseMessage.FAIL);
+ }
+
+
+
+}