lichao 3 лет назад
Родитель
Сommit
6c70a5ac43

+ 5 - 0
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/Order.java

@@ -270,6 +270,11 @@ public class Order implements Serializable {
 	@ApiModelProperty(value = "车体积")
 	private String fleetVolum;
 	/**
+	 * 车队备注
+	 */
+	@ApiModelProperty(value = "车队备注")
+	private String fleetRemarks;
+	/**
 	 * 单车运费
 	 */
 	@ApiModelProperty(value = "单车收费")

+ 112 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/OrderReconciliationVo.java

@@ -0,0 +1,112 @@
+package org.springblade.purchase.sales.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 销售对账视图实体类
+ *
+ * @author BladeX
+ * @since 2022-08-09
+ */
+@Data
+public class OrderReconciliationVo implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 租户id
+	 */
+	private String tenantId;
+
+	/**
+	 * 主键
+	 */
+	private Long id;
+
+	/**
+	 * 系统编号
+	 */
+	private String sysNo;
+
+	/**
+	 * 客户或供应商id(全称)
+	 */
+	private Long corpId;
+
+	/**
+	 * 客户中文名
+	 */
+	private String corpName;
+
+	/**
+	 * 创建时间
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	private Date createTime;
+
+	/**
+	 * 业务员
+	 */
+	private String chargeMember;
+
+	/**
+	 * 收入
+	 */
+	private BigDecimal debitAmount;
+
+	/**
+	 * 成本
+	 */
+	private BigDecimal purchaseAmount;
+
+	/**
+	 * 利润
+	 */
+	private BigDecimal profit;
+
+	/**
+	 * 开始时间
+	 */
+	private String beginCreateTime;
+
+	/**
+	 * 结束时间
+	 */
+	private String endCreateTime;
+
+	/**
+	 * 商品名称
+	 */
+	private String cname;
+
+	/**
+	 * 规格
+	 */
+	private String typeno;
+
+	/**
+	 * 级别
+	 */
+	private String specsTwo;
+
+	/**
+	 * 花纹
+	 */
+	private String brandItem;
+
+	/**
+	 * 销售数量
+	 */
+	private String orderQuantity;
+
+	/**
+	 * 单价
+	 */
+	private String price;
+}

+ 103 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderDetailedExcel.java

@@ -0,0 +1,103 @@
+package org.springblade.purchase.sales.excel;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 统计分析 销售明细对账导出实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class OrderDetailedExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 系统编号
+	 */
+	@ExcelProperty(value = "系统编号")
+	private String sysNo;
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+
+	/**
+	 * 业务日期
+	 */
+	@ExcelProperty(value = "业务日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	private Date createTime;
+
+	/**
+	 * 业务员
+	 */
+	@ExcelProperty(value = "业务员")
+	private String chargeMember;
+
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String cname;
+
+	/**
+	 * 规格
+	 */
+	@ExcelProperty(value = "规格")
+	private String typeno;
+
+	/**
+	 * 级别
+	 */
+	@ExcelProperty(value = "级别")
+	private String specsTwo;
+
+	/**
+	 * 花纹
+	 */
+	@ExcelProperty(value = "花纹")
+	private String brandItem;
+
+	/**
+	 * 销售数量
+	 */
+	@ExcelProperty(value = "销售数量")
+	private String orderQuantity;
+
+	/**
+	 * 单价
+	 */
+	@ExcelProperty(value = "单价")
+	private String price;
+
+	/**
+	 * 收入
+	 */
+	@ExcelProperty(value = "收入")
+	private BigDecimal debitAmount;
+
+	/**
+	 * 成本
+	 */
+	@ExcelProperty(value = "成本")
+	private BigDecimal purchaseAmount;
+
+	/**
+	 * 利润
+	 */
+	@ExcelProperty(value = "利润")
+	private BigDecimal profit;
+}

+ 67 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderReconciliationExcel.java

@@ -0,0 +1,67 @@
+package org.springblade.purchase.sales.excel;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *  统计分析 销售对账导出
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class OrderReconciliationExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 系统编号
+	 */
+	@ExcelProperty(value = "系统编号")
+	private String sysNo;
+
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+
+	/**
+	 * 业务时间
+	 */
+	@ExcelProperty(value = "业务时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	private Date createTime;
+
+	/**
+	 * 业务员
+	 */
+	@ExcelProperty(value = "业务员")
+	private String chargeMember;
+
+	/**
+	 * 收入
+	 */
+	@ExcelProperty(value = "收入")
+	private BigDecimal debitAmount;
+
+	/**
+	 * 成本
+	 */
+	@ExcelProperty(value = "成本")
+	private BigDecimal purchaseAmount;
+
+	/**
+	 * 利润
+	 */
+	@ExcelProperty(value = "利润")
+	private BigDecimal profit;
+
+}

+ 44 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -775,4 +775,48 @@ public class ExportOrderController extends BladeController {
 		List<SalesProfitExcel> list = orderService.selSalesProfitExport(detailsVo);
 		ExcelUtil.export(response, "销售利润", "销售利润", list, SalesProfitExcel.class);
 	}
+
+	/**
+	 * 统计分析 销售对账
+	 */
+	@GetMapping("/orderReconciliation")
+	@ApiOperation(value = "销售对账统计", notes = "销售对账统计")
+	public R orderReconciliation(OrderReconciliationVo order, Query query) {
+		order.setTenantId(SecureUtil.getTenantId());
+		IPage<OrderReconciliationVo> pages = orderService.orderReconciliation(Condition.getPage(query), order);
+		return R.data(pages);
+	}
+
+	/**
+	 * 统计分析 销售对账列表导出
+	 */
+	@GetMapping("/reconciliationExport")
+	@ApiOperation(value = "销售对账导出", notes = "销售对账导出")
+	public void reconciliationExport(OrderReconciliationVo order, HttpServletResponse response){
+		order.setTenantId(SecureUtil.getTenantId());
+		List<OrderReconciliationExcel> list = orderService.reconciliationExport(order);
+		ExcelUtil.export(response, "销售对账", "销售对账", list, OrderReconciliationExcel.class);
+	}
+
+	/**
+	 * 统计分析 销售明细对账
+	 */
+	@GetMapping("/reconciliationDetailed")
+	@ApiOperation(value = "销售明细对账统计", notes = "销售明细对账统计")
+	public R reconciliationDetailed(OrderReconciliationVo order, Query query) {
+		order.setTenantId(SecureUtil.getTenantId());
+		IPage<OrderReconciliationVo> pages = orderService.reconciliationDetailed(Condition.getPage(query), order);
+		return R.data(pages);
+	}
+
+	/**
+	 * 统计分析 销售明细对账导出
+	 */
+	@GetMapping("/orderDetailedExport")
+	@ApiOperation(value = "销售明细对账导出", notes = "销售明细对账导出")
+	public void orderDetailedExport(OrderReconciliationVo order, HttpServletResponse response){
+		order.setTenantId(SecureUtil.getTenantId());
+		List<OrderDetailedExcel> list = orderService.orderDetailedExport(order);
+		ExcelUtil.export(response, "销售明细对账", "销售明细对账", list, OrderDetailedExcel.class);
+	}
 }

+ 20 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java

@@ -149,4 +149,24 @@ public interface OrderMapper extends BaseMapper<Order> {
 	 */
 	@SqlParser(filter=true)
 	int updateOrderMessage(Order order);
+
+	/**
+	 * 统计分析 销售对账列表和检索条件查询
+	 */
+	List<OrderReconciliationVo> orderReconciliation(IPage<OrderReconciliationVo> page,@Param("order")  OrderReconciliationVo order);
+
+	/**
+	 * 统计分析 销售对账列表导出
+	 */
+	List<OrderReconciliationExcel> reconciliationExport(@Param("order") OrderReconciliationVo order);
+
+	/**
+	 * 统计分析 销售明细对账列表和检索条件查询
+	 */
+	List<OrderReconciliationVo> reconciliationDetailed(IPage<OrderReconciliationVo> page,@Param("order") OrderReconciliationVo order);
+
+	/**
+	 * 销售明细对账导出
+	 */
+	List<OrderDetailedExcel> orderDetailedExport(@Param("order") OrderReconciliationVo order);
 }

+ 183 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -1075,6 +1075,189 @@ ORDER BY
         order by BO.create_time desc
     </select>
 
+    <select id="orderReconciliation" resultType="org.springblade.purchase.sales.vo.OrderReconciliationVo">
+        SELECT
+            BO.id AS id,
+            BO.sys_no AS sysNo,
+            BO.corp_id AS corpId,
+            BCD.cname AS corpName,
+            BO.create_time AS createTime,
+            BO.charge_member AS chargeMember,
+            BO.debit_amount AS debitAmount,
+            BOI.purchaseAmount AS purchaseAmount,
+            (BO.debit_amount - BOI.purchaseAmount) AS profit
+        FROM business_order BO
+        LEFT JOIN basic_corps_desc BCD ON BCD.id = BO.corp_id
+        LEFT JOIN
+         (
+             SELECT
+                 pid,
+                 IFNULL( SUM( purchase_amount ), 0 ) AS purchaseAmount
+             FROM
+                 business_order_items
+             GROUP BY
+                 pid
+         ) BOI ON BOI.pid = BO.id
+        <where>
+            BO.is_deleted = '0'
+            AND BO.tenant_id = #{order.tenantId}
+            AND BO.bill_type = 'XS'
+            <if test="order.sysNo != null and order.sysNo != ''">
+                AND BO.sys_no like concat('%', #{order.sysNo}, '%')
+            </if>
+            <if test="order.corpId != null and order.corpId != ''">
+                AND BO.corp_id = #{order.corpId}
+            </if>
+            <if test="order.beginCreateTime !=null and order.beginCreateTime != ''">
+                and BO.create_time &gt;= #{order.beginCreateTime}
+            </if>
+            <if test="order.endCreateTime !=null and order.endCreateTime != ''">
+                and BO.create_time &lt;= #{order.endCreateTime}
+            </if>
+            <if test="order.chargeMember != null and order.chargeMember != ''">
+                AND BO.charge_member like concat('%', #{order.chargeMember}, '%')
+            </if>
+        </where>
+        order by BO.create_time desc
+    </select>
+
+    <select id="reconciliationExport" resultType="org.springblade.purchase.sales.excel.OrderReconciliationExcel">
+        SELECT
+        BO.id AS id,
+        BO.sys_no AS sysNo,
+        BO.corp_id AS corpId,
+        BCD.cname AS corpName,
+        BO.create_time AS createTime,
+        BO.charge_member AS chargeMember,
+        BO.debit_amount AS debitAmount,
+        BOI.purchaseAmount AS purchaseAmount,
+        (BO.debit_amount - BOI.purchaseAmount) AS profit
+        FROM business_order BO
+        LEFT JOIN basic_corps_desc BCD ON BCD.id = BO.corp_id
+        LEFT JOIN
+        (
+        SELECT
+        pid,
+        IFNULL( SUM( purchase_amount ), 0 ) AS purchaseAmount
+        FROM
+        business_order_items
+        GROUP BY
+        pid
+        ) BOI ON BOI.pid = BO.id
+        <where>
+            BO.is_deleted = '0'
+            AND BO.tenant_id = #{order.tenantId}
+            AND BO.bill_type = 'XS'
+            <if test="order.sysNo != null and order.sysNo != ''">
+                AND BO.sys_no like concat('%', #{order.sysNo}, '%')
+            </if>
+            <if test="order.corpId != null and order.corpId != ''">
+                AND BO.corp_id = #{order.corpId}
+            </if>
+            <if test="order.beginCreateTime !=null and order.beginCreateTime != ''">
+                and BO.create_time &gt;= #{order.beginCreateTime}
+            </if>
+            <if test="order.endCreateTime !=null and order.endCreateTime != ''">
+                and BO.create_time &lt;= #{order.endCreateTime}
+            </if>
+            <if test="order.chargeMember != null and order.chargeMember != ''">
+                AND BO.charge_member like concat('%', #{order.chargeMember}, '%')
+            </if>
+        </where>
+        order by BO.create_time desc
+    </select>
+    <select id="reconciliationDetailed" resultType="org.springblade.purchase.sales.vo.OrderReconciliationVo">
+        SELECT
+            BO.id AS id,
+            BO.sys_no AS sysNo,
+            BCD.id AS corpId,
+            BCD.cname AS corpName,
+            BO.create_time AS createTime,
+            BO.charge_member AS chargeMember,
+            BGD.cname AS cname,
+            BGD.typeno AS typeno,
+            BGD.specs_two AS specsTwo,
+            BGD.brand_item AS brandItem,
+            BOI.order_quantity AS orderQuantity,
+            BOI.price AS price,
+            BOI.amount AS debitAmount,
+            BOI.purchase_amount AS purchaseAmount,
+            (BOI.amount - BOI.purchase_amount) AS profit
+        FROM business_order BO
+        LEFT JOIN basic_corps_desc BCD ON BCD.id = BO.corp_id
+        LEFT JOIN business_order_items BOI ON BOI.pid = BO.id
+        LEFT JOIN basic_goods_desc BGD ON BGD.id = BOI.item_id
+        <where>
+            BO.is_deleted = '0'
+            AND BO.tenant_id = #{order.tenantId}
+            AND BO.bill_type = 'XS'
+            AND BO.ID = #{order.id}
+            <if test="order.sysNo != null and order.sysNo != ''">
+                AND BO.sys_no like concat('%', #{order.sysNo}, '%')
+            </if>
+            <if test="order.corpId != null and order.corpId != ''">
+                AND BO.corp_id = #{order.corpId}
+            </if>
+            <if test="order.beginCreateTime !=null and order.beginCreateTime != ''">
+                and BO.create_time &gt;= #{order.beginCreateTime}
+            </if>
+            <if test="order.endCreateTime !=null and order.endCreateTime != ''">
+                and BO.create_time &lt;= #{order.endCreateTime}
+            </if>
+            <if test="order.chargeMember != null and order.chargeMember != ''">
+                AND BO.charge_member like concat('%', #{order.chargeMember}, '%')
+            </if>
+            <if test="order.cname != null and order.cname != ''">
+                AND BGD.cname like concat('%', #{order.cname}, '%')
+            </if>
+        </where>
+        order by BO.create_time desc
+    </select>
+    <select id="orderDetailedExport" resultType="org.springblade.purchase.sales.excel.OrderDetailedExcel">
+        SELECT
+        BO.sys_no AS sysNo,
+        BCD.cname AS corpName,
+        BO.create_time AS createTime,
+        BO.charge_member AS chargeMember,
+        BGD.cname AS cname,
+        BGD.typeno AS typeno,
+        BGD.specs_two AS specsTwo,
+        BGD.brand_item AS brandItem,
+        BOI.order_quantity AS orderQuantity,
+        BOI.price AS price,
+        BOI.amount AS debitAmount,
+        BOI.purchase_amount AS purchaseAmount,
+        (BOI.amount - BOI.purchase_amount) AS profit
+        FROM business_order BO
+        LEFT JOIN basic_corps_desc BCD ON BCD.id = BO.corp_id
+        LEFT JOIN business_order_items BOI ON BOI.pid = BO.id
+        LEFT JOIN basic_goods_desc BGD ON BGD.id = BOI.item_id
+        <where>
+            BO.is_deleted = '0'
+            AND BO.tenant_id = #{order.tenantId}
+            AND BO.bill_type = 'XS'
+            AND BO.ID = #{order.id}
+            <if test="order.sysNo != null and order.sysNo != ''">
+                AND BO.sys_no like concat('%', #{order.sysNo}, '%')
+            </if>
+            <if test="order.corpId != null and order.corpId != ''">
+                AND BO.corp_id = #{order.corpId}
+            </if>
+            <if test="order.beginCreateTime !=null and order.beginCreateTime != ''">
+                and BO.create_time &gt;= #{order.beginCreateTime}
+            </if>
+            <if test="order.endCreateTime !=null and order.endCreateTime != ''">
+                and BO.create_time &lt;= #{order.endCreateTime}
+            </if>
+            <if test="order.chargeMember != null and order.chargeMember != ''">
+                AND BO.charge_member like concat('%', #{order.chargeMember}, '%')
+            </if>
+            <if test="order.cname != null and order.cname != ''">
+                AND BGD.cname like concat('%', #{order.cname}, '%')
+            </if>
+        </where>
+        order by BO.create_time desc
+    </select>
     <update id="updateOrderMessage" parameterType="org.springblade.purchase.sales.entity.Order">
         update  business_order
         <trim prefix="SET" suffixOverrides=",">

+ 19 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -211,5 +211,24 @@ public interface IOrderService extends IService<Order> {
 	 */
 	List<SalesProfitExcel> selSalesProfitExport(SalesDetailsVo detailsVo );
 
+	/**
+	 * 统计分析 销售对账列表
+	 */
+	IPage<OrderReconciliationVo> orderReconciliation(IPage<OrderReconciliationVo> page, OrderReconciliationVo order);
+
+	/**
+	 * 统计分析 销售对账导出
+	 */
+	List<OrderReconciliationExcel> reconciliationExport(OrderReconciliationVo order);
 
+	/**
+	 * 统计分析 销售明细对账
+	 */
+	IPage<OrderReconciliationVo> reconciliationDetailed(IPage<OrderReconciliationVo> page, OrderReconciliationVo order);
+
+
+	/**
+	 * 销售明细对账导出
+	 */
+	List<OrderDetailedExcel> orderDetailedExport(OrderReconciliationVo order);
 }

+ 32 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1412,6 +1412,38 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return baseMapper.selSalesProfitExport(detailsVo);
 	}
 
+	/**
+	 * 统计分析 销售对账
+	 */
+	@Override
+	public IPage<OrderReconciliationVo> orderReconciliation(IPage<OrderReconciliationVo> page, OrderReconciliationVo order) {
+		return page.setRecords(baseMapper.orderReconciliation(page, order));
+	}
+
+	/**
+	 * 统计分析 销售对账列表导出
+	 */
+	@Override
+	public List<OrderReconciliationExcel> reconciliationExport(OrderReconciliationVo order) {
+		return baseMapper.reconciliationExport(order);
+	}
+
+	/**
+	 * 统计分析 销售明细对账
+	 */
+	@Override
+	public IPage<OrderReconciliationVo> reconciliationDetailed(IPage<OrderReconciliationVo> page,OrderReconciliationVo order){
+		return page.setRecords(baseMapper.reconciliationDetailed(page, order));
+	}
+
+	/**
+	 * 销售明细对账导出
+	 */
+	@Override
+	public List<OrderDetailedExcel> orderDetailedExport(OrderReconciliationVo order){
+		return baseMapper.orderDetailedExport(order);
+	}
+
 	@Override
 	public MonthSales monthSales(OrderVO order) {
 		MonthSales monthSales = new MonthSales();