Kaynağa Gözat

2024年3月12日17:39:22

纪新园 1 yıl önce
ebeveyn
işleme
751e7a48f0
19 değiştirilmiş dosya ile 624 ekleme ve 123 silme
  1. 67 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetail.java
  2. 125 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/dto/SaleDetailDto.java
  3. 13 4
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
  4. 1 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java
  5. 2 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  6. 2 1
      blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java
  7. 16 3
      blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java
  8. 6 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/aea/mapper/AeaBillsMapper.xml
  9. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/amends/mapper/AmendsMapper.xml
  10. 5 2
      blade-service/blade-los/src/main/java/org/springblade/los/business/customsDeclaration/mapper/CustomsDeclarationMapper.xml
  11. 94 93
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml
  12. 12 7
      blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java
  13. 6 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.java
  14. 140 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml
  15. 6 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderItemsService.java
  16. 13 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderItemsServiceImpl.java
  17. 34 5
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/controller/StatisticsController.java
  18. 22 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/IStatisticsService.java
  19. 58 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/impl/StatisticsServiceImpl.java

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

@@ -0,0 +1,67 @@
+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
+public class SaleDetail {
+
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String customerName;
+	/**
+	 * 业务员
+	 */
+	@ExcelProperty(value = "业务员")
+	private String salerName;
+	/**
+	 * 销售单号
+	 */
+	@ExcelProperty(value = "销售单号")
+	private String ordNo;
+	/**
+	 * 结算状态
+	 */
+	@ExcelProperty(value = "结算状态")
+	private String actualPaymentStatus;
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String goodsName;
+	/**
+	 * 业务日期起
+	 */
+	@ExcelIgnore
+	private String businesDateStart;
+	/**
+	 * 业务日期止
+	 */
+	@ExcelIgnore
+	private String businesDateEnd;
+	/**
+	 * 租户
+	 */
+	@ExcelIgnore
+	private String tenantId;
+	/**
+	 * 是否包含未发货
+	 */
+	@ExcelIgnore
+	private String isContain;
+
+
+}

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

@@ -0,0 +1,125 @@
+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 SaleDetailDto {
+
+
+	/**
+	 * 客户名称
+	 */
+	@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 actualPaymentStatus;
+	/**
+	 * 品牌
+	 */
+	@ExcelProperty(value = "品牌")
+	private String brandName;
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String goodsName;
+	/**
+	 * 规格型号
+	 */
+	@ExcelProperty(value = "规格型号")
+	private String propertyName;
+	/**
+	 * 花纹
+	 */
+	@ExcelProperty(value = "花纹")
+	private String pattern;
+	/**
+	 * 数量
+	 */
+	@ExcelProperty(value = "数量")
+	private BigDecimal goodsNum;
+	/**
+	 * 价格
+	 */
+	@ExcelProperty(value = "价格")
+	private BigDecimal price;
+	/**
+	 * 金额
+	 */
+	@ExcelProperty(value = "金额")
+	private BigDecimal subTotalMoney;
+	/**
+	 * 成本
+	 */
+	@ExcelProperty(value = "成本")
+	private BigDecimal costprie;
+	/**
+	 * 毛利
+	 */
+	@ExcelProperty(value = "毛利")
+	private BigDecimal profit;
+	/**
+	 * 业务日期起
+	 */
+	@ExcelIgnore
+	private String businesDateStart;
+	/**
+	 * 业务日期止
+	 */
+	@ExcelIgnore
+	private String businesDateEnd;
+	/**
+	 * 租户
+	 */
+	@ExcelIgnore
+	private String tenantId;
+	/**
+	 * 是否包含未发货
+	 */
+	@ExcelIgnore
+	private String isContain;
+	/**
+	 * 单据状态
+	 */
+	@ExcelProperty(value = "单据状态")
+	private String status;
+
+
+}

+ 13 - 4
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java

@@ -16,10 +16,7 @@
  */
 package org.springblade.system.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
@@ -223,5 +220,17 @@ public class Dept implements Serializable {
 	@ApiModelProperty(value = "logo地址")
 	private String logoUrl;
 
+	/**
+	 * 公司地址
+	 */
+	@ApiModelProperty(value = "公司地址")
+	private String address;
+
+	/**
+	 * 联系人
+	 */
+	@TableField(exist = false)
+	private String contacts;
+
 
 }

+ 1 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java

@@ -312,7 +312,7 @@ public class TradingBoxItemController extends BladeController {
 		}*/
 		//明细图片
 		List<TradingBoxFiles> tradingBoxItemFilesList = tradingBoxItem.getTradingBoxFilesList();
-		if (ObjectUtils.isNotNull(tradingBoxItemFilesList) && tradingBoxItemFilesList.size() > 0) {
+		if (ObjectUtils.isNotNull(tradingBoxItemFilesList) && !tradingBoxItemFilesList.isEmpty()) {
 			for (TradingBoxFiles tradingBoxFiles : tradingBoxItemFilesList) {
 				if (tradingBoxFiles.getId() == null) {
 					tradingBoxFiles.setCreateUser(AuthUtil.getUserId());

+ 2 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -512,7 +512,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 
 		//入库生成账单
 //		this.paymentApply(tradingBox, tradingBox.getType(), tradingBox.getType());
-		/*if ("BUY".equals(tradingBox.getType()) || "SELL".equals(tradingBox.getType())) {
+		if ("BUY".equals(tradingBox.getType()) || "SELL".equals(tradingBox.getType())) {
 			List<TradingBoxItem> tradingBoxItemList = tradingBoxItemService.list(new LambdaQueryWrapper<TradingBoxItem>()
 				.eq(TradingBoxItem::getIsDeleted, 0)
 				.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
@@ -607,7 +607,7 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 					archivesTrajectoryMapper.insert(archivesTrajectory);
 				}
 			}
-		}*/
+		}
 		return R.success("审核通过");
 	}
 

+ 2 - 1
blade-service/blade-los/src/main/java/org/springblade/los/basic/corps/controller/BCorpsController.java

@@ -356,7 +356,8 @@ public class BCorpsController extends BladeController {
 			.like(ObjectUtils.isNotNull(bCorps.getCntyName()), BCorps::getCntyName, bCorps.getCntyName())
 			.like(ObjectUtils.isNotNull(bCorps.getTel()), BCorps::getTel, bCorps.getTel())
 			.like(ObjectUtils.isNotNull(bCorps.getAdminProfiles()), BCorps::getAdminProfiles, bCorps.getAdminProfiles())
-			.apply(ObjectUtils.isNotNull(bCorps.getCorpType()), "find_in_set('" + bCorps.getCorpType() + "',corp_type)");
+//			.apply(ObjectUtils.isNotNull(bCorps.getCorpType()), "find_in_set('" + bCorps.getCorpType() + "',corp_type)");
+			.apply(ObjectUtils.isNotNull(bCorps.getCorpTypeName()), "find_in_set('" + bCorps.getCorpTypeName() + "',corp_type_name)");
 		if (AuthUtil.getUserRole().contains("admin") || AuthUtil.getUserRole().contains("secondaryAdmin")) {
 			//管理员、次级管理员查看全部数据
 		} else {

+ 16 - 3
blade-service/blade-los/src/main/java/org/springblade/los/basic/reports/service/impl/ReportsServiceImpl.java

@@ -68,6 +68,8 @@ import org.springblade.los.finance.stl.service.IFinStlBillsItemsService;
 import org.springblade.los.finance.stl.service.IFinStlBillsService;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -91,6 +93,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 
 	private final ISysClient sysClient;
 
+	private final IUserClient userClient;
+
 	private final IBillsService billsService;
 
 	private final IAeaBillsService aeaBillsService;
@@ -140,8 +144,8 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 			reports.setCreateUserName(AuthUtil.getUserName());
 			//获取部门ids对应中文名
 			if (ObjectUtils.isNotNull(deptUtils.getDeptPid())) {
-				reports.setCreateDept(deptUtils.getDeptPid()+"");
-				R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid()+"");
+				reports.setCreateDept(deptUtils.getDeptPid() + "");
+				R<List<String>> res = sysClient.getDeptNames(deptUtils.getDeptPid() + "");
 				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
 					reports.setCreateDeptName(String.join(",", res.getData()));
 				}
@@ -161,8 +165,17 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
 		Map<String, Object> map = new HashMap<>();
 		R<Dept> res = sysClient.getDept(deptUtils.getDeptPid());
 		Dept dept;
-		if (res.isSuccess()) {
+		if (res.isSuccess() && res.getData() != null) {
 			dept = res.getData();
+			String status = sysClient.getParamServiceNew("is.update.default");
+			if ("1".equals(status)) {
+				R<User> resUser = userClient.userInfoById(AuthUtil.getUserId());
+				if (resUser.isSuccess() && resUser.getData() != null) {
+					dept.setEmail(resUser.getData().getEmail());
+					dept.setTel(resUser.getData().getPhone());
+					dept.setContacts(resUser.getData().getRealName());
+				}
+			}
 		} else {
 			throw new RuntimeException("获取报表表头数据失败");
 		}

+ 6 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/aea/mapper/AeaBillsMapper.xml

@@ -245,7 +245,7 @@
         AND feeDC.is_deleted = '0'
         AND feeDU.is_deleted = '0'
         <if test="data.billType != null and data.billType != ''">
-            and find_in_set(seb.bill_type,#{data.billType})
+            and find_in_set(seb.business_type,#{data.billType})
         </if>
         <if test="data.billNo != null and data.billNo != ''">
             and seb.bill_no like concat('%', #{data.billNo}, '%')
@@ -271,6 +271,9 @@
         <if test='data.srcId != null'>
             and seb.src_id = #{data.srcId}
         </if>
+        <if test='data.accDeptId != null'>
+            and seb.acc_dept = #{data.accDeptId}
+        </if>
         <if test="data.examine != null and data.examine != ''">
             and seb.status = 3
         </if>
@@ -279,7 +282,7 @@
                 and seb.approved_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.approved_date &lt;= #{data.statisticsDateStart}
+                and seb.approved_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.examineDate == null or data.examineDate == ''">
@@ -287,7 +290,7 @@
                 and seb.bill_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.bill_date &lt;= #{data.statisticsDateStart}
+                and seb.bill_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.costMerge != null and data.costMerge != ''">

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/amends/mapper/AmendsMapper.xml

@@ -152,7 +152,7 @@
                 and seb.approved_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.approved_date &lt;= #{data.statisticsDateStart}
+                and seb.approved_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.examineDate == null or data.examineDate == ''">
@@ -160,7 +160,7 @@
                 and seb.bill_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.bill_date &lt;= #{data.statisticsDateStart}
+                and seb.bill_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.costMerge != null and data.costMerge != ''">

+ 5 - 2
blade-service/blade-los/src/main/java/org/springblade/los/business/customsDeclaration/mapper/CustomsDeclarationMapper.xml

@@ -162,6 +162,9 @@
         <if test='data.corpId != null'>
             and seb.corp_id = #{data.corpId}
         </if>
+        <if test='data.accDeptId != null'>
+            and seb.acc_dept = #{data.accDeptId}
+        </if>
         <if test="data.voyageNo != null and data.voyageNo != ''">
             and seb.voyage_no = #{data.voyageNo}
         </if>
@@ -179,7 +182,7 @@
                 and seb.approved_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.approved_date &lt;= #{data.statisticsDateStart}
+                and seb.approved_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.examineDate == null or data.examineDate == ''">
@@ -187,7 +190,7 @@
                 and seb.bill_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.bill_date &lt;= #{data.statisticsDateStart}
+                and seb.bill_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.costMerge != null and data.costMerge != ''">

+ 94 - 93
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/mapper/BillsMapper.xml

@@ -691,34 +691,97 @@
         GROUP BY acc.bill_no
         ORDER BY acc.create_time
     </select>
+
+    <select id="trend" resultType="java.util.Map">
+        SELECT
+            m.id moon,
+            IFNULL( n.money, 0 ) money
+        FROM
+            (
+                SELECT
+                    1 AS id UNION
+                SELECT
+                    2 UNION
+                SELECT
+                    3 UNION
+                SELECT
+                    4 UNION
+                SELECT
+                    5 UNION
+                SELECT
+                    6 UNION
+                SELECT
+                    7 UNION
+                SELECT
+                    8 UNION
+                SELECT
+                    9 UNION
+                SELECT
+                    10 UNION
+                SELECT
+                    11 UNION
+                SELECT
+                    12
+            ) m
+                LEFT JOIN (
+                SELECT
+                    DATE_FORMAT( sea.bill_date, '%m' ) AS moon,
+                    ROUND( IFNULL( SUM( pre.TEU * pre.quantity ), 0 ), 2 ) AS money
+                FROM
+                    los_sea_bills sea
+                        LEFT JOIN los_sea_pre_containers pre ON sea.id = pre.pid
+                WHERE
+                    sea.is_deleted = 0
+                  AND pre.is_deleted = 0
+        <if test="deptPid!=null">
+            AND sea.branch_id = #{deptPid}
+        </if>
+        <if test="postId!=null and postId != ''">
+            AND find_in_set(sea.team_id,#{postId})
+        </if>
+        <if test="tenantId!=null and tenantId != ''">
+            AND sea.tenant_id = #{tenantId}
+        </if>
+        <if test="date==null or date == ''">
+            AND YEAR ( sea.bill_date ) = YEAR (NoW())
+        </if>
+        <if test="date!=null and date != ''">
+            AND YEAR ( sea.bill_date ) = #{date}
+        </if>
+                GROUP BY
+                    DATE_FORMAT( sea.bill_date, '%m' )
+            ) n ON m.id = n.moon
+        ORDER BY
+            m.id
+    </select>
     <select id="financeProfit" resultType="org.springblade.los.statisticAnalysis.FinanceProfit">
         SELECT
-            seb.bill_type AS billType,
-            seb.bill_no AS billNo,
-            seb.hblno AS hBlNo,
-            seb.mblno AS mBlNo,
-            seb.corp_cn_name AS corpName,
-            seb.bill_type AS statisticsDate,
-            seb.src_cn_name AS salesman,
-            seb.pod_cn_name AS pod,
-            seb.pol_cn_name AS pol,
-            seb.vessel_cn_name AS vesselCnName,
-            seb.voyage_no AS voyageNo,
-            seb.acc_dept_name AS accDeptName,
-            seb.line_cn_name AS lineCnName,
-            seb.carrier_cn_name AS carrierCnName,
-            seb.operator_name AS operatorName,
-            SUM(IF(feeDU.amount,feeDU.amount,0.00)) AS amountDrUsd,
-            SUM(IF(feeDU.stl_ttl_amount,feeDU.stl_ttl_amount,0.00)) AS realAmountDrUsd,
-            SUM(IF(feeDC.amount,feeDC.amount,0.00)) AS amountDr,
-            SUM(IF(feeDC.stl_ttl_amount,feeDC.stl_ttl_amount,0.00)) AS realAmountDr,
-            SUM(IF(feeCU.amount,feeCU.amount,0.00)) AS amountCrUsd,
-            SUM(IF(feeCU.stl_ttl_amount,feeCU.stl_ttl_amount,0.00)) AS realAmountCrUsd,
-            SUM(IF(feeCC.amount,feeCC.amount,0.00)) AS amountCr,
-            SUM(IF(feeCC.stl_ttl_amount,feeCC.stl_ttl_amount,0.00)) AS realAmountCr,
-            seb.amount_profit_loc AS amountProfitLoc
+        seb.bill_type AS billType,
+        seb.bill_no AS billNo,
+        seb.hblno AS hBlNo,
+        seb.mblno AS mBlNo,
+        seb.corp_cn_name AS corpName,
+        seb.bill_type AS statisticsDate,
+        seb.src_cn_name AS salesman,
+        seb.pod_cn_name AS pod,
+        seb.pol_cn_name AS pol,
+        seb.vessel_cn_name AS vesselCnName,
+        seb.voyage_no AS voyageNo,
+        seb.acc_dept_name AS accDeptName,
+        seb.line_cn_name AS lineCnName,
+        seb.carrier_cn_name AS carrierCnName,
+        seb.operator_name AS operatorName,
+        SUM(IF(feeDU.amount,feeDU.amount,0.00)) AS amountDrUsd,
+        SUM(IF(feeDU.stl_ttl_amount,feeDU.stl_ttl_amount,0.00)) AS realAmountDrUsd,
+        SUM(IF(feeDC.amount,feeDC.amount,0.00)) AS amountDr,
+        SUM(IF(feeDC.stl_ttl_amount,feeDC.stl_ttl_amount,0.00)) AS realAmountDr,
+        SUM(IF(feeCU.amount,feeCU.amount,0.00)) AS amountCrUsd,
+        SUM(IF(feeCU.stl_ttl_amount,feeCU.stl_ttl_amount,0.00)) AS realAmountCrUsd,
+        SUM(IF(feeCC.amount,feeCC.amount,0.00)) AS amountCr,
+        SUM(IF(feeCC.stl_ttl_amount,feeCC.stl_ttl_amount,0.00)) AS realAmountCr,
+        seb.amount_profit_loc AS amountProfitLoc
         FROM
-            los_sea_bills seb
+        los_sea_bills seb
         LEFT JOIN los_fee_center feeCC ON seb.id = feeCC.pid
         AND feeCC.dc = 'C' and feeCC.cur_code = 'CNY' AND feeCC.is_deleted = '0'
         LEFT JOIN los_fee_center feeCU ON seb.id = feeCU.pid
@@ -728,9 +791,9 @@
         LEFT JOIN los_fee_center feeDU ON seb.id = feeDU.pid
         AND feeDU.dc = 'D' and feeDU.cur_code = 'USD'  AND feeDU.is_deleted = '0'
         WHERE
-            seb.is_deleted = '0'
+        seb.is_deleted = '0'
         <if test="data.billType != null and data.billType != ''">
-            and find_in_set(seb.bill_type,#{data.billType})
+            and find_in_set(seb.business_type,#{data.billType})
         </if>
         <if test="data.billNo != null and data.billNo != ''">
             and seb.bill_no like concat('%', #{data.billNo}, '%')
@@ -751,7 +814,7 @@
             and seb.voyage_no = #{data.voyageNo}
         </if>
         <if test='data.accDeptId != null'>
-            and seb.acc_dept_id = #{data.accDeptId}
+            and seb.acc_dept = #{data.accDeptId}
         </if>
         <if test='data.lineId != null'>
             and seb.line_id = #{data.lineId}
@@ -773,7 +836,7 @@
                 and seb.approved_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.approved_date &lt;= #{data.statisticsDateStart}
+                and seb.approved_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.examineDate == null or data.examineDate == ''">
@@ -781,7 +844,7 @@
                 and seb.bill_date &gt;= #{data.statisticsDateStart}
             </if>
             <if test='data.statisticsDateEnd != null and data.statisticsDateEnd != null'>
-                and seb.bill_date &lt;= #{data.statisticsDateStart}
+                and seb.bill_date &lt;= #{data.statisticsDateEnd}
             </if>
         </if>
         <if test="data.costMerge != null and data.costMerge != ''">
@@ -789,69 +852,7 @@
             seb.bill_no
         </if>
         ORDER BY
-            seb.create_time
-    </select>
-    <select id="trend" resultType="java.util.Map">
-        SELECT
-            m.id moon,
-            IFNULL( n.money, 0 ) money
-        FROM
-            (
-                SELECT
-                    1 AS id UNION
-                SELECT
-                    2 UNION
-                SELECT
-                    3 UNION
-                SELECT
-                    4 UNION
-                SELECT
-                    5 UNION
-                SELECT
-                    6 UNION
-                SELECT
-                    7 UNION
-                SELECT
-                    8 UNION
-                SELECT
-                    9 UNION
-                SELECT
-                    10 UNION
-                SELECT
-                    11 UNION
-                SELECT
-                    12
-            ) m
-                LEFT JOIN (
-                SELECT
-                    DATE_FORMAT( sea.bill_date, '%m' ) AS moon,
-                    ROUND( IFNULL( SUM( pre.TEU * pre.quantity ), 0 ), 2 ) AS money
-                FROM
-                    los_sea_bills sea
-                        LEFT JOIN los_sea_pre_containers pre ON sea.id = pre.pid
-                WHERE
-                    sea.is_deleted = 0
-                  AND pre.is_deleted = 0
-        <if test="deptPid!=null">
-            AND sea.branch_id = #{deptPid}
-        </if>
-        <if test="postId!=null and postId != ''">
-            AND find_in_set(sea.team_id,#{postId})
-        </if>
-        <if test="tenantId!=null and tenantId != ''">
-            AND sea.tenant_id = #{tenantId}
-        </if>
-        <if test="date==null or date == ''">
-            AND YEAR ( sea.bill_date ) = YEAR (NoW())
-        </if>
-        <if test="date!=null and date != ''">
-            AND YEAR ( sea.bill_date ) = #{date}
-        </if>
-                GROUP BY
-                    DATE_FORMAT( sea.bill_date, '%m' )
-            ) n ON m.id = n.moon
-        ORDER BY
-            m.id
+        seb.create_time
     </select>
 
 </mapper>

+ 12 - 7
blade-service/blade-los/src/main/java/org/springblade/los/statisticAnalysis/service/impl/StatisticAnalysisServiceImpl.java

@@ -17,7 +17,6 @@ import org.springblade.los.business.customsDeclaration.mapper.CustomsDeclaration
 import org.springblade.los.business.sea.entity.Bills;
 import org.springblade.los.business.sea.mapper.BillsMapper;
 import org.springblade.los.finance.fee.entity.FeeCenter;
-import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.mapper.FeeCenterMapper;
 import org.springblade.los.finance.fee.mapper.FinAccBillsMapper;
 import org.springblade.los.finance.invoices.entity.FinInvoices;
@@ -77,12 +76,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 	@Override
 	public R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<FinanceProfit> page) {
 		List<FinanceProfit> financeProfitList = new ArrayList<>();
-		if (financeProfit.getBillType().contains("HYCK") || financeProfit.getBillType().contains("HYJK")) {
+		if (financeProfit.getBillType().contains("SE") || financeProfit.getBillType().contains("AE")) {
 			List<FinanceProfit> financeProfitListHy = billsMapper.financeProfit(financeProfit);
 			if (!financeProfitListHy.isEmpty()) {
 				financeProfitList.addAll(financeProfitListHy);
 			}
-		} else if (financeProfit.getBillType().contains("KYCK") || financeProfit.getBillType().contains("KYJK")) {
+		} else if (financeProfit.getBillType().contains("SI") || financeProfit.getBillType().contains("AI")) {
 			List<FinanceProfit> financeProfitListKy = aeaBillsMapper.financeProfit(financeProfit);
 			if (!financeProfitListKy.isEmpty()) {
 				financeProfitList.addAll(financeProfitListKy);
@@ -262,6 +261,12 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 				financeProfitList.addAll(financeProfitListBg);
 			}
 		}
+		for (FinanceProfit item : financeProfitList) {
+			if (null != item) {
+				item.setRealAmountProfitLoc((ObjectUtils.isNotNull(item.getRealAmountDrLoc()) ? item.getRealAmountDrLoc() : new BigDecimal("0"))
+					.subtract((ObjectUtils.isNotNull(item.getRealAmountCrLoc()) ? item.getRealAmountCrLoc() : new BigDecimal("0"))));
+			}
+		}
 		return R.data(page.setRecords(financeProfitList));
 	}
 
@@ -641,7 +646,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 
 	@Override
 	public R<IPage<FeeSummaryRD>> feeSummary(FeeSummaryQ feeSummaryQ, IPage<FeeSummaryRD> page) {
-		return R.data(page.setRecords(finAccBillsMapper.feeSummary(page,feeSummaryQ)));
+		return R.data(page.setRecords(finAccBillsMapper.feeSummary(page, feeSummaryQ)));
 	}
 
 	@Override
@@ -651,7 +656,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 
 	@Override
 	public R<IPage<FeeSummaryDetailRD>> feeSummaryDetail(FeeSummaryQ feeSummaryQ, IPage<FeeSummaryDetailRD> page) {
-		return R.data(page.setRecords(finAccBillsMapper.feeSummaryDetail(page,feeSummaryQ)));
+		return R.data(page.setRecords(finAccBillsMapper.feeSummaryDetail(page, feeSummaryQ)));
 	}
 
 	@Override
@@ -661,7 +666,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 
 	@Override
 	public R<IPage<FeeSummaryDetailNotRD>> feeSummaryDetailNot(FeeSummaryQ feeSummaryQ, IPage<FeeSummaryDetailNotRD> page) {
-		return R.data(page.setRecords(finAccBillsMapper.feeSummaryDetailNot(page,feeSummaryQ)));
+		return R.data(page.setRecords(finAccBillsMapper.feeSummaryDetailNot(page, feeSummaryQ)));
 	}
 
 	@Override
@@ -671,7 +676,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
 
 	@Override
 	public R<IPage<AgingAnalysisRD>> agingAnalysis(FeeSummaryQ feeSummaryQ, IPage<AgingAnalysisRD> page) {
-		return R.data(page.setRecords(finAccBillsMapper.agingAnalysis(page,feeSummaryQ)));
+		return R.data(page.setRecords(finAccBillsMapper.agingAnalysis(page, feeSummaryQ)));
 	}
 
 	@Override

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.java

@@ -18,6 +18,9 @@ package org.springblade.salesPart.order.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import feign.Param;
+import org.springblade.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.entity.PjOrderItems;
 import org.springblade.salesPart.vo.OrderItemsVO;
 
@@ -40,4 +43,7 @@ public interface OrderItemsMapper extends BaseMapper<PjOrderItems> {
 	 */
 	List<OrderItemsVO> selectOrderItemsPage(IPage page, OrderItemsVO orderItems);
 
+	List<SaleDetailDto> saleDetailPage(@Param("page")IPage<SaleDetailDto> page, @Param("saleDetailDto") SaleDetail saleDetailDto);
+
+	List<SaleDetailDto> saleDetailList(@Param("saleDetailDto")SaleDetail saleDetailDto);
 }

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

@@ -41,5 +41,145 @@
     <select id="selectOrderItemsPage" resultMap="orderItemsResultMap">
         select * from pjpf_order_items where is_deleted = 0
     </select>
+    <select id="saleDetailPage" resultType="org.springblade.salesPart.dto.SaleDetail">
+        SELECT
+        po.customer_name AS customerName,
+        po.saler_name AS salerName,
+        po.storage_name AS storageName,
+        po.ord_no AS ordNo,
+        DATE_FORMAT(po.busines_date,'%Y-%m-%d') AS businesDate,
+        CASE
+        po.actual_payment_status
+        WHEN '1' THEN
+        '待付款'
+        WHEN '2' THEN
+        '已付款'
+        WHEN '3' THEN
+        '尾款'
+        WHEN '4' THEN
+        '已退款' ELSE 0
+        END AS actualPaymentStatus,
+        poi.brand_name AS brandName,
+        poi.goods_name AS goodsName,
+        poi.property_name AS propertyName,
+        poi.pattern AS pattern,
+        poi.goods_num AS goodsNum,
+        poi.price AS price,
+        poi.sub_total_money AS subTotalMoney,
+        poi.costprie AS costprie,
+        IF
+        ( poi.sub_total_money, poi.sub_total_money, 0 )-
+        IF
+        ( poi.costprie, poi.costprie, 0 ) AS profit,
+        po.`status` AS status
+        FROM
+        `pjpf_order_items` poi
+        LEFT JOIN pjpf_order po ON poi.pid = po.id
+        WHERE
+        poi.is_deleted = '0'
+        AND po.is_deleted = '0'
+        AND po.bs_type = 'XS'
+        AND poi.tenant_id = #{saleDetailDto.tenantId}
+        AND po.tenant_id = #{saleDetailDto.tenantId}
+        <if test="saleDetailDto.customerName !=null and saleDetailDto.customerName != ''">
+            and po.customer_name like concat('%', #{saleDetailDto.customerName}, '%')
+        </if>
+        <if test="saleDetailDto.salerName !=null and saleDetailDto.salerName != ''">
+            and po.saler_name like concat('%', #{saleDetailDto.salerName}, '%')
+        </if>
+        <if test="saleDetailDto.ordNo !=null and saleDetailDto.ordNo != ''">
+            and po.ord_no like concat('%', #{saleDetailDto.ordNo}, '%')
+        </if>
+        <if test="saleDetailDto.goodsName !=null and saleDetailDto.goodsName != ''">
+            and poi.goods_name like concat('%', #{saleDetailDto.goodsName}, '%')
+        </if>
+        <if test="saleDetailDto.actualPaymentStatus !=null and saleDetailDto.actualPaymentStatus != ''">
+            and po.actual_payment_status =#{saleDetailDto.actualPaymentStatus}
+        </if>
+        <if test="saleDetailDto.businesDateStart !=null and saleDetailDto.businesDateStart !=''">
+            and DATE_FORMAT(po.busines_date,'%Y-%m-%d') &gt;= #{saleDetailDto.businesDateStart}
+        </if>
+        <if test="saleDetailDto.businesDateEnd !=null and saleDetailDto.businesDateEnd !=''">
+            and DATE_FORMAT(po.busines_date,'%Y-%m-%d') &lt;= #{saleDetailDto.businesDateEnd}
+        </if>
+        <if test="saleDetailDto.isContain !=null and saleDetailDto.isContain !=''">
+              and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核')
+        </if>
+        <if test="saleDetailDto.isContain ==null or saleDetailDto.isContain ==''">
+            and FIND_IN_SET(po.`status`,'已发货,退款请核')
+        </if>
+        ORDER BY
+        po.busines_date
+    </select>
+    <select id="saleDetailList" resultType="org.springblade.salesPart.dto.SaleDetail">
+        SELECT
+        po.customer_name AS customerName,
+        po.saler_name AS salerName,
+        po.storage_name AS storageName,
+        po.ord_no AS ordNo,
+        DATE_FORMAT(po.busines_date,'%Y-%m-%d') AS businesDate,
+        CASE
+        po.actual_payment_status
+        WHEN '1' THEN
+        '待付款'
+        WHEN '2' THEN
+        '已付款'
+        WHEN '3' THEN
+        '尾款'
+        WHEN '4' THEN
+        '已退款' ELSE 0
+        END AS actualPaymentStatus,
+        poi.brand_name AS brandName,
+        poi.goods_name AS goodsName,
+        poi.property_name AS propertyName,
+        poi.pattern AS pattern,
+        poi.goods_num AS goodsNum,
+        poi.price AS price,
+        poi.sub_total_money AS subTotalMoney,
+        poi.costprie AS costprie,
+        IF
+        ( poi.sub_total_money, poi.sub_total_money, 0 )-
+        IF
+        ( poi.costprie, poi.costprie, 0 ) AS profit,
+        po.`status` AS status
+        FROM
+        `pjpf_order_items` poi
+        LEFT JOIN pjpf_order po ON poi.pid = po.id
+        WHERE
+        poi.is_deleted = '0'
+        AND po.is_deleted = '0'
+        AND po.bs_type = 'XS'
+        AND poi.tenant_id = #{saleDetailDto.tenantId}
+        AND po.tenant_id = #{saleDetailDto.tenantId}
+        <if test="saleDetailDto.customerName !=null and saleDetailDto.customerName != ''">
+            and po.customer_name like concat('%', #{saleDetailDto.customerName}, '%')
+        </if>
+        <if test="saleDetailDto.salerName !=null and saleDetailDto.salerName != ''">
+            and po.saler_name like concat('%', #{saleDetailDto.salerName}, '%')
+        </if>
+        <if test="saleDetailDto.ordNo !=null and saleDetailDto.ordNo != ''">
+            and po.ord_no like concat('%', #{saleDetailDto.ordNo}, '%')
+        </if>
+        <if test="saleDetailDto.goodsName !=null and saleDetailDto.goodsName != ''">
+            and poi.goods_name like concat('%', #{saleDetailDto.goodsName}, '%')
+        </if>
+        <if test="saleDetailDto.actualPaymentStatus !=null and saleDetailDto.actualPaymentStatus != ''">
+            and po.actual_payment_status =#{saleDetailDto.actualPaymentStatus}
+        </if>
+        <if test="saleDetailDto.businesDateStart !=null and saleDetailDto.businesDateStart !=''">
+            and DATE_FORMAT(po.busines_date,'%Y-%m-%d') &gt;= #{saleDetailDto.businesDateStart}
+        </if>
+        <if test="saleDetailDto.businesDateEnd !=null and saleDetailDto.businesDateEnd !=''">
+            and DATE_FORMAT(po.busines_date,'%Y-%m-%d') &lt;= #{saleDetailDto.businesDateEnd}
+        </if>
+        <if test="saleDetailDto.isContain !=null and saleDetailDto.isContain !=''">
+            and FIND_IN_SET(po.`status`,'待确认,待发货,已发货,退款请核,已取消')
+        </if>
+        <if test="saleDetailDto.isContain ==null or saleDetailDto.isContain ==''">
+            and FIND_IN_SET(po.`status`,'已发货,退款请核,已取消')
+        </if>
+        ORDER BY
+        po.busines_date
+    </select>
 
 </mapper>

+ 6 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderItemsService.java

@@ -20,6 +20,8 @@ package org.springblade.salesPart.order.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.entity.PjOrderItems;
 import org.springblade.salesPart.vo.OrderItemsVO;
 
@@ -43,4 +45,8 @@ public interface IOrderItemsService extends IService<PjOrderItems> {
 	IPage<OrderItemsVO> selectOrderItemsPage(IPage<OrderItemsVO> page, OrderItemsVO orderItems);
 
     R submitList(List<PjOrderItems> orderItems);
+
+    IPage<SaleDetailDto> saleDetail(SaleDetail saleDetailDto, IPage<SaleDetailDto> page);
+
+	List<SaleDetailDto> saleDetailList(SaleDetail saleDetailDto);
 }

+ 13 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderItemsServiceImpl.java

@@ -22,6 +22,8 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.entity.PjOrderItems;
 import org.springblade.salesPart.order.mapper.OrderItemsMapper;
 import org.springblade.salesPart.order.service.IOrderItemsService;
@@ -77,4 +79,15 @@ public class OrderItemsServiceImpl extends ServiceImpl<OrderItemsMapper, PjOrder
 		return R.data(orderItems);
 	}
 
+	@Override
+	public IPage<SaleDetailDto> saleDetail(SaleDetail saleDetailDto, IPage<SaleDetailDto> page) {
+		return page.setRecords(baseMapper.saleDetailPage(page, saleDetailDto));
+	}
+
+	@Override
+	public List<SaleDetailDto> saleDetailList(SaleDetail saleDetailDto) {
+		return baseMapper.saleDetailList(saleDetailDto);
+	}
+
+
 }

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

@@ -1,16 +1,19 @@
 package org.springblade.salesPart.statistics.controller;
 
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springblade.core.secure.utils.AuthUtil;
+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.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.dto.StayDoOrder;
-import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.statistics.service.IStatisticsService;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.Map;
 
@@ -56,7 +59,7 @@ public class StatisticsController {
 	 */
 	@GetMapping("/salesVolumesStatistics")
 	public R salesVolumesStatistics(@RequestParam(value = "statusDate") String statusDate,
-							  @RequestParam(value = "endDate") String endDate) {
+									@RequestParam(value = "endDate") String endDate) {
 		return statisticsService.salesVolumesStatistics(statusDate, endDate);
 	}
 
@@ -87,4 +90,30 @@ public class StatisticsController {
 		return statisticsService.sizeSalesVolumeProportion(statusDate, endDate);
 	}
 
+
+	/**
+	 * 统计销售明细
+	 */
+	@GetMapping("/saleDetail")
+	public R<IPage<SaleDetailDto>> saleDetail(SaleDetail saleDetailDto, Query query) {
+		return statisticsService.saleDetail(saleDetailDto, Condition.getPage(query));
+	}
+
+	/**
+	 * 统计销售明细合计
+	 */
+	@GetMapping("/saleDetailSum")
+	public R saleDetailSum(SaleDetail saleDetailDto) {
+		return statisticsService.saleDetailSum(saleDetailDto);
+	}
+
+	/**
+	 * 统计销售明细导出
+	 */
+	@GetMapping("/saleDetailExport")
+	public void saleDetailExport(SaleDetail saleDetailDto, HttpServletResponse response) {
+		List<SaleDetailDto> saleDetailDtoList = statisticsService.saleDetailExport(saleDetailDto);
+		ExcelUtil.export(response, "统计销售明细", "统计销售明细", saleDetailDtoList, SaleDetailDto.class);
+	}
+
 }

+ 22 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/statistics/service/IStatisticsService.java

@@ -16,7 +16,10 @@
  */
 package org.springblade.salesPart.statistics.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.dto.StayDoOrder;
 
 import java.util.List;
@@ -70,4 +73,23 @@ public interface IStatisticsService {
 	 * @return
 	 */
 	R salesVolumesStatistics(String statusDate, String endDate);
+
+	/**
+	 * 统计销售明细
+	 * @param saleDetailDto
+	 * @return
+	 */
+	R<IPage<SaleDetailDto>> saleDetail(SaleDetail saleDetailDto, IPage<SaleDetailDto> page);
+
+	/**
+	 * 统计销售明细 合计
+	 * @param saleDetailDto
+	 * @return
+	 */
+	R saleDetailSum(SaleDetail saleDetailDto);
+
+	/**
+	 * 统计销售明细导出
+	 */
+	List<SaleDetailDto> saleDetailExport(SaleDetail saleDetailDto);
 }

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

@@ -17,10 +17,13 @@
 package org.springblade.salesPart.statistics.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.dto.SaleDetail;
+import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.dto.StayDoOrder;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjOrderItems;
@@ -465,4 +468,59 @@ public class StatisticsServiceImpl implements IStatisticsService {
 		map.put("corpsNumber", corpsNumber);
 		return R.data(map);
 	}
+
+	@Override
+	public R<IPage<SaleDetailDto>> saleDetail(SaleDetail saleDetailDto, IPage<SaleDetailDto> page) {
+		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		return R.data(orderItemsService.saleDetail(saleDetailDto, page));
+	}
+
+	@Override
+	public R saleDetailSum(SaleDetail saleDetailDto) {
+		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		Map<String, Object> map = new HashMap<>();
+		List<SaleDetailDto> saleDetailDtoList = orderItemsService.saleDetailList(saleDetailDto);
+		if (!saleDetailDtoList.isEmpty()) {
+			map.put("goodsSum", saleDetailDtoList.stream().filter(e->!"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP));
+			map.put("amount", saleDetailDtoList.stream().filter(e->!"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getSubTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+			map.put("costprie", saleDetailDtoList.stream().filter(e->!"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getCostprie).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+			map.put("profit", saleDetailDtoList.stream().filter(e->!"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+			map.put("goodsSumCancellation", saleDetailDtoList.stream().filter(e->"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(0, RoundingMode.HALF_UP));
+			map.put("amountCancellation", saleDetailDtoList.stream().filter(e->"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getSubTotalMoney).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+			map.put("costprieCancellation", saleDetailDtoList.stream().filter(e->"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getCostprie).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+			map.put("profitCancellation", saleDetailDtoList.stream().filter(e->"已取消".equals(e.getStatus()))
+				.map(SaleDetailDto::getProfit).reduce(BigDecimal.ZERO, BigDecimal::add)
+				.setScale(2, RoundingMode.HALF_UP));
+		} else {
+			map.put("goodsSum", "0");
+			map.put("amount", "0.00");
+			map.put("costprie", "0.00");
+			map.put("profit", "0.00");
+			map.put("goodsSumCancellation", "0");
+			map.put("amountCancellation", "0.00");
+			map.put("costprieCancellation", "0.00");
+			map.put("profitCancellation", "0.00");
+		}
+		return R.data(map);
+	}
+
+	@Override
+	public List<SaleDetailDto> saleDetailExport(SaleDetail saleDetailDto) {
+		saleDetailDto.setTenantId(AuthUtil.getTenantId());
+		return orderItemsService.saleDetailList(saleDetailDto);
+	}
 }