فهرست منبع

2024年11月20日17:23:01

纪新园 1 سال پیش
والد
کامیت
2e6fd98c6b
13فایلهای تغییر یافته به همراه1197 افزوده شده و 401 حذف شده
  1. 33 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailDto.java
  2. 173 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailRZDto.java
  3. 12 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java
  4. 13 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescExportExcel.java
  5. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java
  6. 17 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java
  7. 6 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml
  8. 14 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml
  9. 11 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  10. 820 386
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  11. 36 6
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java
  12. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/controller/StatisticsController.java
  13. 57 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/impl/StatisticsServiceImpl.java

+ 33 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailDto.java

@@ -38,7 +38,7 @@ public class SaleDetailDto {
 	/**
 	 * 销售单号
 	 */
-	@ExcelProperty(value = "销售单号")
+	@ExcelProperty(value = "业务单号")
 	private String ordNo;
 	/**
 	 * 业务日期
@@ -182,5 +182,37 @@ public class SaleDetailDto {
 	@ExcelIgnore
 	private Long pid;
 
+	/**
+	 * 已卖数量
+	 */
+	@ExcelIgnore
+	private BigDecimal outGoodsTotalShipNum;
+	/**
+	 * 已卖金额
+	 */
+	@ExcelIgnore
+	private BigDecimal outGoodsTotalShipAmount;
+	/**
+	 * 订单数量
+	 */
+	@ExcelIgnore
+	private BigDecimal primaryGoodsTotalNum;
+	/**
+	 * 订单金额
+	 */
+	@ExcelIgnore
+	private BigDecimal primaryGoodsTotalMoney;
+
+	/**
+	 * 剩余数量
+	 */
+	@ExcelIgnore
+	private BigDecimal surplusNum;
+	/**
+	 * 剩余金额
+	 */
+	@ExcelIgnore
+	private BigDecimal surplusAmount;
+
 
 }

+ 173 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailRZDto.java

@@ -0,0 +1,173 @@
+package org.springblade.salesPart.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :jixinyuan
+ * @date : 2024/3/12
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class SaleDetailRZDto {
+
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String customerName;
+	/**
+	 * 业务员
+	 */
+	@ExcelProperty(value = "业务员")
+	private String salerName;
+	/**
+	 * 仓库
+	 */
+	@ExcelProperty(value = "仓库")
+	private String storageName;
+	/**
+	 * 销售单号
+	 */
+	@ExcelProperty(value = "采购单号")
+	private String ordNo;
+	/**
+	 * 业务日期
+	 */
+	@ExcelProperty(value = "业务日期")
+	private String businesDate;
+	/**
+	 * 完成日期
+	 */
+	@ExcelProperty(value = "完成日期")
+	private String deliveryBusinesDate;
+	/**
+	 * 结算状态
+	 */
+	@ExcelProperty(value = "结算状态")
+	private String actualPaymentStatus;
+	/**
+	 * 品牌
+	 */
+	@ExcelProperty(value = "品牌")
+	private String brandName;
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String goodsName;
+	/**
+	 * 商品编码
+	 */
+	@ExcelProperty(value = "商品编码")
+	private String code;
+	/**
+	 * 规格型号
+	 */
+	@ExcelProperty(value = "规格型号")
+	private String propertyName;
+	/**
+	 * 花纹
+	 */
+	@ExcelProperty(value = "花纹")
+	private String pattern;
+	/**
+	 * 价格
+	 */
+	@ExcelProperty(value = "价格")
+	private BigDecimal price;
+	/**
+	 * 订单数量
+	 */
+	@ExcelProperty(value = "订单数量")
+	private BigDecimal primaryGoodsTotalNum;
+	/**
+	 * 订单金额
+	 */
+	@ExcelProperty(value = "订单金额")
+	private BigDecimal primaryGoodsTotalMoney;
+	/**
+	 * 数量
+	 */
+	@ExcelProperty(value = "入库数量")
+	private BigDecimal goodsNum;
+	/**
+	 * 金额
+	 */
+	@ExcelProperty(value = "入库金额")
+	private BigDecimal subTotalMoney;
+	/**
+	 * 已卖数量
+	 */
+	@ExcelProperty(value = "已卖数量")
+	private BigDecimal outGoodsTotalShipNum;
+	/**
+	 * 已卖金额
+	 */
+	@ExcelProperty(value = "已卖金额")
+	private BigDecimal outGoodsTotalShipAmount;
+	/**
+	 * 剩余数量
+	 */
+	@ExcelProperty(value = "剩余数量")
+	private BigDecimal surplusNum;
+	/**
+	 * 剩余金额
+	 */
+	@ExcelProperty(value = "剩余金额")
+	private BigDecimal surplusAmount;
+	/**
+	 * 单据状态
+	 */
+	@ExcelProperty(value = "单据状态")
+	private String status;
+	/**
+	 * 商品名称Id
+	 */
+	@ExcelProperty(value = "商品名称Id")
+	private String goodsId;
+
+	/**
+	 * 业务类型
+	 */
+	@ExcelProperty(value = "业务类型")
+	private String bsType;
+
+	/**
+	 * 业务来源
+	 */
+	@ExcelProperty(value = "业务来源")
+	private String businessSource;
+
+	/**
+	 * 退货状态
+	 */
+	@ExcelIgnore
+	private String returnsStatus;
+	/**
+	 * 退货数量
+	 */
+	@ExcelIgnore
+	private BigDecimal returnsNumber;
+	/**
+	 * 退货金额
+	 */
+	@ExcelIgnore
+	private BigDecimal returnsAmount;
+	/**
+	 * 单据id
+	 */
+	@ExcelIgnore
+	private Long pid;
+
+
+}

+ 12 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java

@@ -327,4 +327,16 @@ public class PjCorpsDesc implements Serializable {
 	@ApiModelProperty(value = "维度")
 	private String dimension;
 
+	/**
+	 * 创建人
+	 */
+	@TableField(exist = false)
+	private String createUserName;
+
+	/**
+	 *创建日期
+	 */
+	@TableField(exist = false)
+	private List<String> createTimeList;
+
 }

+ 13 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/CorpsDescExportExcel.java

@@ -9,6 +9,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * 客户导出模板实体类
@@ -89,4 +90,16 @@ public class CorpsDescExportExcel implements Serializable {
 	 */
 	@ExcelProperty(value = "使用信用额度")
 	private BigDecimal useCreditLimit;
+
+	/**
+	 * 创建人
+	 */
+	@ExcelProperty(value = "创建人")
+	private String createUserName;
+
+	/**
+	 * 创建时间
+	 */
+	@ExcelProperty(value = "创建时间")
+	private Date createTime;
 }

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/finance/stl/service/impl/FinStlBillsServiceImpl.java

@@ -272,7 +272,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
 				item.setCurrentStlAmountTax(amountTax);
 				item.setCurrentStlAmountNet(amountNet);
 				if (ObjectUtils.isNull(item.getBusinessType())){
-					item.setBusinessType(finStlBills.getBusinessType());
+					item.setBusinessType(finStlBills.getBusinessTypes());
 				}
 				if (item.getId() == null) {
 					item.setCreateTime(new Date());

+ 17 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsDescController.java

@@ -22,7 +22,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import io.seata.spring.annotation.GlobalTransactional;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -47,6 +46,8 @@ import org.springblade.salesPart.excel.SupplierImportExcel;
 import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.storage.service.IStorageDescService;
 import org.springblade.salesPart.vo.CorpsDescVO;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -77,6 +78,7 @@ public class CorpsDescController extends BladeController {
 	private final ICorpsAddrService corpsAddrService;
 	private final IStorageDescService storageDescService;
 	private final IOrderService orderService;
+	private final IUserClient userClient;
 
 	/**
 	 * 详情
@@ -159,10 +161,10 @@ public class CorpsDescController extends BladeController {
 			.eq(PjCorpsDesc::getSalesCompanyId, AuthUtil.getDeptId());
 		if (!AuthUtil.getUserRole().contains("admin")) {
 			if (AuthUtil.getUserRole().contains("业务员")) {
-				lambdaQueryWrapper.eq(PjCorpsDesc::getSalesmanId,AuthUtil.getUserId());
+				lambdaQueryWrapper.eq(PjCorpsDesc::getSalesmanId, AuthUtil.getUserId());
 			}
 		}
-		IPage<PjCorpsDesc> pages = corpsDescService.page(Condition.getPage(query),lambdaQueryWrapper);
+		IPage<PjCorpsDesc> pages = corpsDescService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -297,8 +299,10 @@ public class CorpsDescController extends BladeController {
 				.in(PjCorpsAddr::getPid, addId));
 		}
 		List<Long> corpsIds = new ArrayList<>();
+		String userIds = "";
 		for (CorpsDescVO item : list) {
 			corpsIds.add(item.getId());
+			userIds = userIds + item.getCreateUser()+",";
 		}
 		List<PjCorpsTypeDesc> pjCorpsTypeDescList = corpsTypeDescService.list(new LambdaQueryWrapper<PjCorpsTypeDesc>()
 			.in(PjCorpsTypeDesc::getCorpId, corpsIds));
@@ -314,6 +318,10 @@ public class CorpsDescController extends BladeController {
 		if (CollectionUtils.isNotEmpty(list)) {
 			List<PjCorpsAddr> finalPjCorpsAddrList = pjCorpsAddrList;
 			List<PjCorpsType> finalPjCorpsTypeList = pjCorpsTypeList;
+			if (ObjectUtils.isNotNull()){
+				userIds = userIds.substring(0,userIds.length()-1);
+			}
+			List<User> userList = userClient.selectListNotTenantId(AuthUtil.getTenantId(),userIds);
 			list.forEach(item -> {
 				if (!finalPjCorpsTypeList.isEmpty()) {
 					List<Long> typeIds = pjCorpsTypeDescList.stream()
@@ -333,6 +341,12 @@ public class CorpsDescController extends BladeController {
 					item.setContactsPhone(pjCorpsAddr.stream().map(PjCorpsAddr::getTel).collect(Collectors.joining(",")));
 					item.setAddress(pjCorpsAddr.stream().map(PjCorpsAddr::getDetailedAddress).collect(Collectors.joining(",")));
 				}
+				if (!userList.isEmpty()) {
+					User user = userList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().orElse(null);
+					if (user != null) {
+						item.setCreateUserName(user.getName());
+					}
+				}
 			});
 		}
 		ExcelUtil.export(response, "客户信息", "客户信息", BeanUtil.copy(list, CorpsDescExportExcel.class), CorpsDescExportExcel.class);

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml

@@ -83,6 +83,12 @@
         <if test="corpsDesc.tel!=null and corpsDesc.tel != ''">
             and tel like CONCAT(CONCAT('%', #{corpsDesc.tel}), '%')
         </if>
+        <if test="corpsDesc.createTimeList !=null and corpsDesc.createTimeList[0] != '' and corpsDesc.createTimeList[0] != null">
+            AND create_time &gt;= #{corpsDesc.createTimeList[0]}
+        </if>
+        <if test="corpsDesc.createTimeList !=null and corpsDesc.createTimeList[1] != '' and corpsDesc.createTimeList[1] != null">
+            AND create_time &lt;= #{corpsDesc.createTimeList[1]}
+        </if>
         <if test="corpsDesc.remarks!=null and corpsDesc.remarks != ''">
             and remarks like CONCAT(CONCAT('%', #{corpsDesc.remarks}), '%')
         </if>

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

@@ -172,7 +172,13 @@
         IF
         ( poi.costprie, poi.costprie, 0 )) ELSE 0
         END AS profit,
-        po.`status` AS status
+        po.`status` AS status,
+        IF
+        ( poi.out_goods_total_ship_num, poi.out_goods_total_ship_num, 0 ) AS outGoodsTotalShipNum,
+        IF
+        ( poi.out_goods_total_ship_amount, poi.out_goods_total_ship_amount, 0 ) AS outGoodsTotalShipAmount,
+        IF
+        ( poi.primary_goods_total_num, poi.primary_goods_total_num, 0 ) AS primary_goods_total_num
         FROM
         `pjpf_order_items` poi
         LEFT JOIN pjpf_goods_desc pgd ON poi.goods_id = pgd.id
@@ -377,7 +383,13 @@
         IF
         ( poi.costprie, poi.costprie, 0 )) ELSE 0
         END AS profit,
-        po.`status` AS status
+        po.`status` AS status,
+        IF
+        ( poi.out_goods_total_ship_num, poi.out_goods_total_ship_num, 0 ) AS outGoodsTotalShipNum,
+        IF
+        ( poi.out_goods_total_ship_amount, poi.out_goods_total_ship_amount, 0 ) AS outGoodsTotalShipAmount,
+        IF
+        ( poi.primary_goods_total_num, poi.primary_goods_total_num, 0 ) AS primary_goods_total_num
         FROM
         `pjpf_order_items` poi
         LEFT JOIN pjpf_goods_desc pgd ON poi.goods_id = pgd.id

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

@@ -3893,8 +3893,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				order.setTotalMoney(totalMoney);
 
 				if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {//只有一条轮胎加5元运费
-					order.setTotalMoney(totalMoney.add(new BigDecimal(5)));
-					order.setFreight(new BigDecimal(5));
+					String freight = sysClient.getParamService("freight");
+					if (ObjectUtils.isNotNull(freight)) {
+						try {
+							BigDecimal freightAmount = new BigDecimal(freight);
+							order.setTotalMoney(totalMoney.add(freightAmount));
+							order.setFreight(freightAmount);
+						} catch (Exception ignored) {
+							order.setFreight(new BigDecimal(0));
+						}
+					}
+
 				} else {
 					order.setFreight(new BigDecimal(0));
 				}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 820 - 386
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java


+ 36 - 6
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

@@ -294,10 +294,20 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 						order.setTotalMoney(totalMoney);
 
 						if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {
-							//只有一条明细加5元运费
+							String freight = sysClient.getParamService("freight");
+							if (ObjectUtils.isNotNull(freight)) {
+								try {
+									BigDecimal freightAmount = new BigDecimal(freight);
+									order.setTotalMoney(totalMoney.add(freightAmount));
+									order.setFreight(freightAmount);
+								} catch (Exception ignored) {
+									order.setFreight(new BigDecimal(0));
+								}
+							}
+							/*//只有一条明细加5元运费
 							totalMoney = totalMoney.add(new BigDecimal(5));
 							order.setTotalMoney(totalMoney);
-							order.setFreight(new BigDecimal(5));
+							order.setFreight(new BigDecimal(5));*/
 						}
 						amount = amount.add(totalMoney);
 //						order.setPaymentAmountTl(totalMoney);
@@ -481,10 +491,20 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 						order.setTotalMoney(totalMoney);
 
 						if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {
+							String freight = sysClient.getParamService("freight");
+							if (ObjectUtils.isNotNull(freight)) {
+								try {
+									BigDecimal freightAmount = new BigDecimal(freight);
+									order.setTotalMoney(totalMoney.add(freightAmount));
+									order.setFreight(freightAmount);
+								} catch (Exception ignored) {
+									order.setFreight(new BigDecimal(0));
+								}
+							}
 							//只有一条明细加5元运费
-							totalMoney = totalMoney.add(new BigDecimal(5));
+							/*totalMoney = totalMoney.add(new BigDecimal(5));
 							order.setTotalMoney(totalMoney);
-							order.setFreight(new BigDecimal(5));
+							order.setFreight(new BigDecimal(5));*/
 						}
 						amount = amount.add(totalMoney);
 						order.setSharedCompanyId(shoppingCartList.get(0).getSharedCompanyId());
@@ -673,10 +693,20 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 						order.setTotalMoney(totalMoney);
 
 						if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {
+							String freight = sysClient.getParamService("freight");
+							if (ObjectUtils.isNotNull(freight)) {
+								try {
+									BigDecimal freightAmount = new BigDecimal(freight);
+									order.setTotalMoney(totalMoney.add(freightAmount));
+									order.setFreight(freightAmount);
+								} catch (Exception ignored) {
+									order.setFreight(new BigDecimal(0));
+								}
+							}
 							//只有一条明细加5元运费
-							totalMoney = totalMoney.add(new BigDecimal(5));
+							/*totalMoney = totalMoney.add(new BigDecimal(5));
 							order.setTotalMoney(totalMoney);
-							order.setFreight(new BigDecimal(5));
+							order.setFreight(new BigDecimal(5));*/
 						}
 						amount = amount.add(totalMoney);
 						order.setPaymentDate(new Date());

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/controller/StatisticsController.java

@@ -7,7 +7,9 @@ import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.salesPart.dto.*;
+import org.springblade.salesPart.excel.PjCorpsDescExportExcel;
 import org.springblade.salesPart.statistics.service.IStatisticsService;
 import org.springframework.web.bind.annotation.*;
 
@@ -113,6 +115,8 @@ public class StatisticsController {
 		List<SaleDetailDto> saleDetailDtoList = statisticsService.saleDetailExport(saleDetailDto);
 		if ("XS,TKXS".equals(saleDetailDto.getBsType())){
 			ExcelUtil.export(response, "统计销售明细", "统计销售明细", saleDetailDtoList, SaleDetailDto.class);
+		}else if ("RZCG".equals(saleDetailDto.getBsType())){
+			ExcelUtil.export(response, "融资采购明细", "统计采购明细", BeanUtil.copy(saleDetailDtoList, SaleDetailRZDto.class), SaleDetailRZDto.class);
 		}else{
 			ExcelUtil.export(response, "统计采购明细", "统计采购明细", saleDetailDtoList, SaleDetailDto.class);
 		}

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

@@ -604,6 +604,9 @@ public class StatisticsServiceImpl implements IStatisticsService {
 								}
 							}
 						}
+						items.setPrimaryGoodsTotalMoney(items.getPrimaryGoodsTotalNum().multiply(items.getPrice()));
+						items.setSurplusNum(items.getGoodsNum().subtract(items.getOutGoodsTotalShipNum()));
+						items.setSurplusAmount(items.getSubTotalMoney().subtract(items.getOutGoodsTotalShipAmount()));
 					}
 				}
 			}
@@ -618,6 +621,11 @@ public class StatisticsServiceImpl implements IStatisticsService {
 		Map<String, Object> map = new HashMap<>();
 		List<SaleDetailDto> saleDetailDtoList = orderItemsService.saleDetailList(saleDetailDto);
 		if (!saleDetailDtoList.isEmpty()) {
+			for (SaleDetailDto items : saleDetailDtoList) {
+				items.setPrimaryGoodsTotalMoney(items.getPrimaryGoodsTotalNum().multiply(items.getPrice()));
+				items.setSurplusNum(items.getGoodsNum().subtract(items.getOutGoodsTotalShipNum()));
+				items.setSurplusAmount(items.getSubTotalMoney().subtract(items.getOutGoodsTotalShipAmount()));
+			}
 			BigDecimal goodsNumCancel = saleDetailDtoList.stream().filter(e -> "已取消".equals(e.getStatus()))
 				.map(SaleDetailDto::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP).abs();
@@ -633,6 +641,7 @@ public class StatisticsServiceImpl implements IStatisticsService {
 			BigDecimal freightCancel = saleDetailDtoList.stream().filter(e -> "已取消".equals(e.getStatus()))
 				.map(SaleDetailDto::getFreight).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP).abs();
+
 			BigDecimal goodsNumActual = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
 				.map(SaleDetailDto::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP).abs();
@@ -648,6 +657,25 @@ public class StatisticsServiceImpl implements IStatisticsService {
 			BigDecimal freight = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
 				.map(SaleDetailDto::getFreight).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal outGoodsTotalShipNum = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getOutGoodsTotalShipNum).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal outGoodsTotalShipAmount = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getOutGoodsTotalShipAmount).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal primaryGoodsTotalNum = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getPrimaryGoodsTotalNum).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal primaryGoodsTotalMoney = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getPrimaryGoodsTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal surplusNum = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getSurplusNum).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+			BigDecimal surplusAmount = saleDetailDtoList.stream().filter(e -> !"已取消".equals(e.getStatus()) && !"已完成".equals(e.getStatus()))
+				.map(SaleDetailDto::getSurplusAmount).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP).abs();
+
 			BigDecimal freightReturns = saleDetailDtoList.stream().filter(e -> "已完成".equals(e.getStatus()))
 				.map(SaleDetailDto::getFreight).reduce(BigDecimal.ZERO, BigDecimal::add)
 				.setScale(0, RoundingMode.HALF_UP).abs();
@@ -663,6 +691,7 @@ 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).abs();
+
 			if ("TKXS".equals(saleDetailDto.getBsType()) || "TKCG".equals(saleDetailDto.getBsType())) {
 				map.put("goodsSum", new BigDecimal("0"));
 				map.put("amount", new BigDecimal("0"));
@@ -673,6 +702,12 @@ public class StatisticsServiceImpl implements IStatisticsService {
 				map.put("amountCancellation", subTotalMoneyCancel.add(subTotalMoneyReturns));
 				map.put("costprieCancellation", costprieCancel.add(costprieReturns));
 				map.put("profitCancellation", profitCancel.add(profitReturns));
+				map.put("outGoodsTotalShipNum", new BigDecimal("0"));
+				map.put("outGoodsTotalShipAmount", new BigDecimal("0"));
+				map.put("primaryGoodsTotalNum", new BigDecimal("0"));
+				map.put("primaryGoodsTotalMoney", new BigDecimal("0"));
+				map.put("surplusNum", new BigDecimal("0"));
+				map.put("surplusAmount", new BigDecimal("0"));
 			} else if ("XS".equals(saleDetailDto.getBsType()) || "CG".equals(saleDetailDto.getBsType())
 				|| "RZCG".equals(saleDetailDto.getBsType())) {
 				map.put("goodsSum", goodsNumActual);
@@ -684,6 +719,12 @@ public class StatisticsServiceImpl implements IStatisticsService {
 				map.put("amountCancellation", "0.00");
 				map.put("costprieCancellation", "0.00");
 				map.put("profitCancellation", "0.00");
+				map.put("outGoodsTotalShipNum", outGoodsTotalShipNum);
+				map.put("outGoodsTotalShipAmount", outGoodsTotalShipAmount);
+				map.put("primaryGoodsTotalNum", primaryGoodsTotalNum);
+				map.put("primaryGoodsTotalMoney", primaryGoodsTotalMoney);
+				map.put("surplusNum", surplusNum);
+				map.put("surplusAmount", surplusAmount);
 			} else {
 				map.put("goodsSum", goodsNumActual.add(goodsNumCancel));
 				map.put("amount", subTotalMoneyActual.add(subTotalMoneyCancel));
@@ -694,6 +735,12 @@ public class StatisticsServiceImpl implements IStatisticsService {
 				map.put("amountCancellation", subTotalMoneyCancel.add(subTotalMoneyReturns));
 				map.put("costprieCancellation", costprieCancel.add(costprieReturns));
 				map.put("profitCancellation", profitCancel.add(profitReturns));
+				map.put("outGoodsTotalShipNum", outGoodsTotalShipNum);
+				map.put("outGoodsTotalShipAmount", outGoodsTotalShipAmount);
+				map.put("primaryGoodsTotalNum", primaryGoodsTotalNum);
+				map.put("primaryGoodsTotalMoney", primaryGoodsTotalMoney);
+				map.put("surplusNum", surplusNum);
+				map.put("surplusAmount", surplusAmount);
 			}
 		} else {
 			map.put("goodsSum", "0");
@@ -705,6 +752,13 @@ public class StatisticsServiceImpl implements IStatisticsService {
 			map.put("costprieCancellation", "0.00");
 			map.put("profitCancellation", "0.00");
 			map.put("freight", "0.00");
+			map.put("outGoodsTotalShipNum", "0.00");
+			map.put("outGoodsTotalShipAmount", "0.00");
+			map.put("primaryGoodsTotalNum", "0.00");
+			map.put("primaryGoodsTotalMoney", "0.00");
+			map.put("surplusNum", "0.00");
+			map.put("surplusAmount", "0.00");
+
 		}
 		return R.data(map);
 	}
@@ -765,6 +819,9 @@ public class StatisticsServiceImpl implements IStatisticsService {
 								}
 							}
 						}
+						items.setPrimaryGoodsTotalMoney(items.getPrimaryGoodsTotalNum().multiply(items.getPrice()));
+						items.setSurplusNum(items.getGoodsNum().subtract(items.getOutGoodsTotalShipNum()));
+						items.setSurplusAmount(items.getSubTotalMoney().subtract(items.getOutGoodsTotalShipAmount()));
 					}
 				}
 			}

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است