Browse Source

2024年5月14日17:30:56

纪新园 1 year ago
parent
commit
9a91f38a0b

+ 34 - 10
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml

@@ -66,7 +66,17 @@
         poi.goods_name AS goodsName,
         poi.property_name AS propertyName,
         poi.pattern AS pattern,
-        po.bs_type AS bsType,
+        CASE
+        po.bs_type
+        WHEN 'XS' THEN
+        '销售'
+        WHEN 'CG' THEN
+        '采购'
+        WHEN 'TKXS' THEN
+        '售后'
+        WHEN 'TKCG' THEN
+        '售后'
+        END AS bsType,
         CASE
         po.bs_type
         WHEN 'XS' THEN
@@ -131,13 +141,13 @@
         WHEN 'TKXS' THEN
         0 - (
         IF
-        ( poi.sub_total_money, poi.sub_total_money, 0 ) -
+        ( poi.returns_amount, poi.returns_amount, 0 ) -
         IF
         ( poi.costprie, poi.costprie, 0 ))
         WHEN 'TKCG' THEN
         0 - (
         IF
-        ( poi.sub_total_money, poi.sub_total_money, 0 ) -
+        ( poi.returns_amount, poi.returns_amount, 0 ) -
         IF
         ( poi.costprie, poi.costprie, 0 )) ELSE 0
         END AS profit,
@@ -181,10 +191,12 @@
             and DATE_FORMAT(po.busines_date,'%Y-%m-%d') <= #{saleDetailDto.businesDateEnd}
         </if>
         <if test="saleDetailDto.isContain !=null and saleDetailDto.isContain !=''">
-            and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核,已取消,已退款,售后中,已收货,已完成')
+            and ( (FIND_IN_SET(po.bs_type,'XS,CG') and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核,已取消,已退款,售后中,已收货'))
+            or (FIND_IN_SET(po.bs_type,'TKXS,TKCG') and FIND_IN_SET(po.`status`,'已完成')) )
         </if>
         <if test="saleDetailDto.isContain ==null or saleDetailDto.isContain ==''">
-            and FIND_IN_SET(po.`status`,'已发货,退款请核,已取消,已退款,售后中,已收货,已完成')
+            and ( (FIND_IN_SET(po.bs_type,'XS,CG') and FIND_IN_SET(po.`status`,'已发货,退款请核,已取消,已退款,售后中,已收货'))
+            or (FIND_IN_SET(po.bs_type,'TKXS,TKCG') and FIND_IN_SET(po.`status`,'已完成')) )
         </if>
         ORDER BY
         po.busines_date desc,
@@ -216,7 +228,17 @@
         poi.goods_id AS goodsId,
         poi.property_name AS propertyName,
         poi.pattern AS pattern,
-        po.bs_type AS bsType,
+        CASE
+        po.bs_type
+        WHEN 'XS' THEN
+        '销售'
+        WHEN 'CG' THEN
+        '采购'
+        WHEN 'TKXS' THEN
+        '售后'
+        WHEN 'TKCG' THEN
+        '售后'
+        END AS bsType,
         CASE
         po.bs_type
         WHEN 'XS' THEN
@@ -281,13 +303,13 @@
         WHEN 'TKXS' THEN
         0 - (
         IF
-        ( poi.sub_total_money, poi.sub_total_money, 0 ) -
+        ( poi.returns_amount, poi.returns_amount, 0 ) -
         IF
         ( poi.costprie, poi.costprie, 0 ))
         WHEN 'TKCG' THEN
         0 - (
         IF
-        ( poi.sub_total_money, poi.sub_total_money, 0 ) -
+        ( poi.returns_amount, poi.returns_amount, 0 ) -
         IF
         ( poi.costprie, poi.costprie, 0 )) ELSE 0
         END AS profit,
@@ -331,10 +353,12 @@
             and DATE_FORMAT(po.busines_date,'%Y-%m-%d') &lt;= #{businesDateEnd}
         </if>
         <if test="isContain !=null and isContain !=''">
-            and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核,已取消,已退款,售后中,已收货,已完成')
+          and ( (FIND_IN_SET(po.bs_type,'XS,CG') and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核,已取消,已退款,售后中,已收货'))
+              or (FIND_IN_SET(po.bs_type,'TKXS,TKCG') and FIND_IN_SET(po.`status`,'已完成')) )
         </if>
         <if test="isContain ==null or isContain ==''">
-            and FIND_IN_SET(po.`status`,'已发货,退款请核,已取消,已退款,售后中,已收货,已完成')
+            and ( (FIND_IN_SET(po.bs_type,'XS,CG') and FIND_IN_SET(po.`status`,'已发货,退款请核,已取消,已退款,售后中,已收货'))
+            or (FIND_IN_SET(po.bs_type,'TKXS,TKCG') and FIND_IN_SET(po.`status`,'已完成')) )
         </if>
         ORDER BY
         po.busines_date

+ 19 - 5
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -1223,7 +1223,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 						item.setUpdateUser(AuthUtil.getUserId());
 					}
 					//计算小计
-//					item.setReturnsAmount(item.getReturnsNumber().multiply(item.getPrice()));
+					item.setReturnsAmount(item.getReturnsNumber().multiply(item.getPrice()));
 					//获得商品
 					PjGoodsDesc goodsDesc = goodsDescMapper.selectById(item.getGoodsId());
 					if (ObjectUtil.isEmpty(goodsDesc)) {
@@ -1232,6 +1232,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					goodsName.append(goodsDesc.getCname()).append(",");
 					retrieval.append(goodsDesc.getCnameInt()).append(",");
 					item.setBrandName(goodsDesc.getBrandName());
+					BigDecimal costprie = item.getCostprie().divide(item.getGoodsNum(), 2, RoundingMode.HALF_UP);
+					item.setCostprie(item.getReturnsNumber().multiply(costprie));
+					item.setGrossProfit(item.getReturnsAmount().subtract(item.getCostprie()));
 					orderItemsService.saveOrUpdate(item);
 				}
 				if (goodsName.length() > 0) {
@@ -1245,10 +1248,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setReturnsAmount(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//总退货数量
 				order.setReturnsNumber(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
-				if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {//只有一条轮胎加5元运费
+				order.setGoodsTotalNum(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setTotalMoney(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setCost(order.getOrderItemsList().stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setGrossProfit(order.getOrderItemsList().stream().map(PjOrderItems::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				/*if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {//只有一条轮胎加5元运费
 					order.setTotalMoney(order.getReturnsAmount().add(new BigDecimal(5)));
 					order.setFreight(new BigDecimal(5));
-				}
+				}*/
 			} else {
 				order.setNumberRows(0);//行数
 				order.setReturnsAmount(new BigDecimal("0.00"));
@@ -1289,7 +1296,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					item.setBillNo(order.getOrdNo());
 					//计算小计
 					item.setReturnsAmount(item.getReturnsNumber().multiply(item.getPrice()));
-					if (ObjectUtils.isNull(item.getInventory())){
+					if (ObjectUtils.isNull(item.getInventory())) {
 						item.setInventory(item.getGoodsNum());
 					}
 					if (item.getId() == null) {
@@ -1312,6 +1319,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 					goodsName.append(goodsDesc.getCname()).append(",");
 					retrieval.append(goodsDesc.getCnameInt()).append(",");
+					BigDecimal costprie = item.getCostprie().divide(item.getGoodsNum(), 2, RoundingMode.HALF_UP);
+					item.setCostprie(item.getReturnsNumber().multiply(costprie));
+					item.setGrossProfit(item.getReturnsAmount().subtract(item.getCostprie()));
 					item.setBrandName(goodsDesc.getBrandName());
 				});
 				if (goodsName.length() > 0) {
@@ -1325,6 +1335,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setReturnsAmount(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//总退货数量
 				order.setReturnsNumber(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setGoodsTotalNum(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsNumber).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setTotalMoney(order.getOrderItemsList().stream().map(PjOrderItems::getReturnsAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setCost(order.getOrderItemsList().stream().map(PjOrderItems::getCostprie).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				order.setGrossProfit(order.getOrderItemsList().stream().map(PjOrderItems::getGrossProfit).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 			} else {
 				order.setNumberRows(0);//行数
 				//总数量
@@ -3204,7 +3218,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		} else {
 			order.setStatus("待确认");
 		}
-		if (!"TKXS".equals(order.getBsType()) && !"TKCG".equals(order.getBsType()) && !"CG".equals(order.getBsType())){
+		if (!"TKXS".equals(order.getBsType()) && !"TKCG".equals(order.getBsType()) && !"CG".equals(order.getBsType())) {
 			order.setReturnsStatus("全退");
 			order.setReturnsNumber(order.getGoodsTotalNum());
 			order.setReturnsAmount(order.getPaymentAmountTl());

+ 7 - 8
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -2888,9 +2888,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockDesc.setStoreInventory(item.getSendNum());
 					stockDesc.setInventoryAmount(item.getSendNum().multiply(item.getPrice()));
 					if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
-						BigDecimal amount = ObjectUtils.isNotNull(orderItems.getCostprie()) ? orderItems.getCostprie() : stockDesc.getInventoryAmount();
-//						stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-						stockDesc.setInventoryCostPrice(amount.divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+//						BigDecimal amount = ObjectUtils.isNotNull(orderItems.getCostprie()) ? orderItems.getCostprie() : stockDesc.getInventoryAmount();
+						stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+//						stockDesc.setInventoryCostPrice(amount.divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 					} else {
 						stockDesc.setInventoryCostPrice(item.getPrice());
 					}
@@ -2901,12 +2901,11 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockDesc.setUpdateUser(AuthUtil.getUserId());
 					stockDesc.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
 					stockDesc.setStoreInventory(stockDesc.getBalanceQuantity());
-					stockDesc.setInventoryAmount(item.getCostprie());
-					stockDesc.setInventoryAmount(stockDesc.getInventoryAmount().add(stockOne.getInventoryAmount()));
+					stockDesc.setInventoryAmount(stockDesc.getInventoryAmount() == null ? new BigDecimal("0.00") : stockDesc.getInventoryAmount().add(item.getCostprie()));
 					if (stockDesc.getBalanceQuantity().compareTo(new BigDecimal("0")) != 0) {
-						BigDecimal amount = ObjectUtils.isNotNull(orderItems.getCostprie()) ? orderItems.getCostprie() : stockDesc.getInventoryAmount();
-//						stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-						stockDesc.setInventoryCostPrice(amount.divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+//						BigDecimal amount = ObjectUtils.isNotNull(orderItems.getCostprie()) ? orderItems.getCostprie() : stockDesc.getInventoryAmount();
+						stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+//						stockDesc.setInventoryCostPrice(amount.divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 					}
 					stockDesc.setVersion(stockOne.getVersion());
 					pjStockDescArrayListUpdate.add(stockDesc);

+ 26 - 14
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/impl/StatisticsServiceImpl.java

@@ -506,14 +506,15 @@ public class StatisticsServiceImpl implements IStatisticsService {
 					number = number.abs();
 					amount = amount.abs();
 					for (SaleDetailDto items : saleDetailDtoList) {
-						if ("已取消".equals(items.getStatus())){
+						if ("已取消".equals(items.getStatus())) {
 							items.setBalanceAmount(new BigDecimal("0.00"));
-						}else{
-							if ("TKXS".equals(item.getBsType()) || "TKCG".equals(item.getBsType())){
-								items.setFreight(new BigDecimal("0.00").subtract(items.getFreight()));
-								if (saleDetailDtoList.size() == 1 && number.compareTo(new BigDecimal(1)) <= 0) {
+						} else {
+							if ("TKXS".equals(item.getBsType()) || "TKCG".equals(item.getBsType())) {
+								if (saleDetailDtoList.size() == 1 && number.compareTo(new BigDecimal(1)) <= 0 &&
+									new BigDecimal("0.00").compareTo(items.getFreight()) != 0) {
 									items.setSubTotalMoney(items.getSubTotalMoney().add(new BigDecimal("-5.00")));
 								}
+								items.setFreight(new BigDecimal("0.00").subtract(items.getFreight()));
 								if (amount.compareTo(items.getSubTotalMoney().abs()) >= 0) {
 									items.setBalanceAmount(new BigDecimal("0.00"));
 									amount = amount.subtract(items.getSubTotalMoney().abs());
@@ -521,7 +522,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
 									items.setBalanceAmount(new BigDecimal("0.00").subtract(items.getSubTotalMoney().abs().subtract(amount)));
 									amount = new BigDecimal("0.00");
 								}
-							}else{
+							} else {
 								if (saleDetailDtoList.size() == 1 && number.compareTo(new BigDecimal(1)) <= 0) {
 									items.setSubTotalMoney(items.getSubTotalMoney().add(new BigDecimal("5.00")));
 								}
@@ -584,14 +585,25 @@ public class StatisticsServiceImpl implements IStatisticsService {
 			BigDecimal profitReturns = saleDetailDtoList.stream().filter(e -> "已完成".equals(e.getStatus()))
 				.map(SaleDetailDto::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP);
-			map.put("goodsSum", goodsNumActual.add(goodsNumReturns));
-			map.put("amount",subTotalMoneyActual.add(subTotalMoneyReturns) );
-			map.put("costprie",costprieActual.add(costprieReturns) );
-			map.put("profit", profitActual.add(profitReturns));
-			map.put("goodsSumCancellation", goodsNumCancel.subtract(goodsNumReturns));
-			map.put("amountCancellation", subTotalMoneyCancel.subtract(subTotalMoneyReturns));
-			map.put("costprieCancellation", costprieCancel.subtract(costprieReturns));
-			map.put("profitCancellation", profitCancel.subtract(profitReturns));
+			if ("TKXS".equals(saleDetailDto.getBsType()) || "TKGS".equals(saleDetailDto.getBsType())){
+				map.put("goodsSum", new BigDecimal("0"));
+				map.put("amount", new BigDecimal("0"));
+				map.put("costprie", new BigDecimal("0"));
+				map.put("profit", new BigDecimal("0"));
+				map.put("goodsSumCancellation", goodsNumCancel.subtract(goodsNumReturns));
+				map.put("amountCancellation", subTotalMoneyCancel.subtract(subTotalMoneyReturns));
+				map.put("costprieCancellation", costprieCancel.subtract(costprieReturns));
+				map.put("profitCancellation", profitCancel.subtract(profitReturns));
+			}else{
+				map.put("goodsSum", goodsNumActual.add(goodsNumReturns));
+				map.put("amount", subTotalMoneyActual.add(subTotalMoneyReturns));
+				map.put("costprie", costprieActual.add(costprieReturns));
+				map.put("profit", profitActual.add(profitReturns));
+				map.put("goodsSumCancellation", goodsNumCancel.subtract(goodsNumReturns));
+				map.put("amountCancellation", subTotalMoneyCancel.subtract(subTotalMoneyReturns));
+				map.put("costprieCancellation", costprieCancel.subtract(costprieReturns));
+				map.put("profitCancellation", profitCancel.subtract(profitReturns));
+			}
 		} else {
 			map.put("goodsSum", "0");
 			map.put("amount", "0.00");