Explorar o código

feat:新增支付渠道的流水号、优化订单列表sql性能

xuyongjun hai 1 ano
pai
achega
f2400b2018

+ 31 - 1
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java

@@ -45,7 +45,29 @@ public class SalesOrder implements Serializable {
     private String salesAddressPostcode;    //收件人邮政编码
     private Integer salesAmount;            //订单总金额
     private Integer salesPayMoney;          //已付金额 - 支付金额/折扣价
-    private Integer salesPayType;           //付款方式  1:微信支付 2:现金支付3:已支付定金¥99 4:刷卡支付 5:支付宝支付
+    /**
+     * 付款方式  1:微信支付 2:现金支付3:已支付定金¥99 4:刷卡支付 5:支付宝支付
+     * update 2023-07-18 新增抖音抖店类型;拉取订单时做映射
+     * 10:货到付款
+     * 11:小程序
+     * 12:银行卡
+     * 13:余额
+     * 14:无需支付(0元单)
+     * 15:DOU分期(信用支付)
+     * 16:新卡支付
+     * 17:先用后付
+     * 京东支付支付类型:
+     * 30:邮局汇款
+     * 31:自提
+     * 32:在线支付
+     * 33:公司转账
+     */
+    private Integer salesPayType;
+    /**
+     * 支付渠道的流水号:京东没有默认订单号
+     * add 2023-07-18
+     */
+    private String salesPaymentNo;
     private Integer salesWaitMoney;         //待付金额
     private Integer salesLastMoney;         //本次支付金额
     private Integer salesShippingFee;       //邮费
@@ -537,6 +559,14 @@ public class SalesOrder implements Serializable {
         this.salesPayType = salesPayType;
     }
 
+    public String getSalesPaymentNo() {
+        return salesPaymentNo;
+    }
+
+    public void setSalesPaymentNo(String salesPaymentNo) {
+        this.salesPaymentNo = salesPaymentNo;
+    }
+
     public Integer getSalesWaitMoney() {
         return salesWaitMoney;
     }

+ 149 - 2
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/mapper/salesOrderMapper.xml

@@ -20,6 +20,7 @@
     <result column="sales_amount" property="salesAmount" jdbcType="INTEGER" />
     <result column="sales_pay_money" property="salesPayMoney" jdbcType="INTEGER" />
     <result column="sales_pay_type" property="salesPayType" jdbcType="INTEGER" />
+    <result column="sales_payment_no" property="salesPaymentNo" jdbcType="VARCHAR" />
     <result column="sales_wait_money" property="salesWaitMoney" jdbcType="INTEGER" />
     <result column="sales_last_money" property="salesLastMoney" jdbcType="INTEGER" />
     <result column="sales_shipping_fee" property="salesShippingFee" jdbcType="INTEGER" />
@@ -37,7 +38,7 @@
   <sql id="salesOrderInfo" >
         sales_id,sales_orderId,sales_openId,sales_discount_money,sales_pledge_money,sales_remain_deposit,
         sales_send_type,sales_send_time,sales_sales_time,sales_post_num,sales_post_firm,sales_address_info,sales_address_tel,
-        sales_address_name,sales_amount,sales_pay_money,sales_pay_type,sales_wait_money,sales_last_money,sales_shipping_fee,sales_pay_time,
+        sales_address_name,sales_amount,sales_pay_money,sales_pay_type,sales_payment_no,sales_wait_money,sales_last_money,sales_shipping_fee,sales_pay_time,
         sales_create_time,sales_admin_remark,sales_user_remark,sales_pay_number,sales_store_id,sales_company_id,sales_type,sales_deal_code,sales_order_status,
         sales_status,sales_shipping_status,sales_pay_status,sales_process_status,sales_is_send,sales_is_locked,sales_is_separate,sales_is_download,sales_main_order_id,
         sales_batch_id,sales_add_type,sales_admin_id,sales_deliver,sales_address_postcode,order_case_date
@@ -745,7 +746,148 @@
         </where>
     </select>-->
     <select id="listSalesOrderNum" resultType="Integer" parameterType="SalesOrder" >
+        <!-- update 2023-07-18 优化查询速度 -->
         SELECT
+        COUNT(DISTINCT soi.sales_id)
+        FROM tb_rst_sales_order_info soi
+        LEFT JOIN tb_rst_sales_order_item oi ON soi.sales_id = oi.item_order_id
+        LEFT JOIN tb_rst_cm_relation cr ON soi.sales_customer_id = cr.customer_id
+        LEFT JOIN tb_rst_cm_proc_method pm ON pm.proc_method_id = cr.proc_method_id
+        LEFT JOIN tb_rst_cm_proc_type pt ON pt.proc_type_id = pm.proc_type_id
+        <where>
+            <if test="isSelectCustomer !=null and isSelectCustomer !='' and isSelectCustomer == 2 ">
+                soi.sales_batch_id != 'KS00000000000001'
+            </if>
+            <if test="salesIsDownload !=null and salesIsDownload !=''">
+                AND sales_is_download = #{salesIsDownload}
+            </if>
+            <if test="salesShippingStatus !=null">
+                AND sales_shipping_status = #{salesShippingStatus}
+            </if>
+            <if test="salesStatus !=null">
+                AND sales_status = #{salesStatus}
+            </if>
+            <if test="salesOrderStatus !=null">
+                AND sales_order_status = #{salesOrderStatus}
+            </if>
+            <if test="salesDeliver !=null">
+                AND sales_deliver = #{salesDeliver}
+            </if>
+            <if test="salesStoreId !=null and salesStoreId !=''">
+                AND sales_store_id = #{salesStoreId}
+            </if>
+            <if test="salesPostFirm !=null and salesPostFirm !=''">
+                AND sales_post_firm = #{salesPostFirm}
+            </if>
+            <if test="salesPostNum !=null and salesPostNum !=''">
+                AND sales_post_num like CONCAT('%',#{salesPostNum},'%')
+            </if>
+            <if test="salesCompanyId !=null and salesCompanyId !=''">
+                AND sales_company_id = #{salesCompanyId}
+            </if>
+            <if test="salesId !=null">
+                AND sales_id = #{salesId}
+            </if>
+            <if test="salesOrderId !=null and salesOrderId !=''">
+                AND sales_orderId = #{salesOrderId}
+            </if>
+            <if test="salesDealCode !=null and salesDealCode !=''">
+                AND sales_deal_code = #{salesDealCode}
+            </if>
+            <if test="salesExOrderId !=null and salesExOrderId !=''">
+                AND sales_ex_orderId = #{salesExOrderId}
+            </if>
+            <if test="salesAddressTel !=null and salesAddressTel !=''">
+                AND sales_address_tel like CONCAT('%',#{salesAddressTel},'%')
+            </if>
+            <if test="salesAddressName !=null and salesAddressName !=''">
+                AND sales_address_name like CONCAT('%',#{salesAddressName},'%')
+            </if>
+            <if test="salesBatchId !=null and salesBatchId !=''">
+                AND sales_batch_id = #{salesBatchId}
+            </if>
+            <if test="salesAddressInfo !=null and salesAddressInfo !=''">
+                AND sales_address_info like CONCAT('%',#{salesAddressInfo},'%')
+            </if>
+            <if test="startDate != null and startDate != ''">
+                AND sales_create_time <![CDATA[>=]]> #{startDate}
+            </if>
+            <if test="endDate != null and endDate != ''">
+                AND sales_create_time <![CDATA[<=]]> #{endDate}
+            </if>
+            <if test="salesAdminId != null ">
+                AND sales_admin_id = #{salesAdminId}
+            </if>
+            <if test="salesAddType != null ">
+                AND sales_add_type = #{salesAddType}
+            </if>
+            <if test="itemProductName !=null and itemProductName !=''">
+                AND (oi.item_product_color like CONCAT('%',#{itemProductName},'%') OR oi.item_product_name LIKE CONCAT('%',#{itemProductName},'%'))
+            </if>
+            <if test="colorId !=null and colorId !=''">
+                AND oi.item_color_id = #{colorId}
+            </if>
+            <if test="salesIds != null and salesIds != ''">
+                AND sales_id IN
+                <foreach collection="salesIds" item="node" index="index" separator="," open="(" close=")">
+                    #{node}
+                </foreach >
+                or sales_belong_orderId IN
+                <foreach collection="salesIds" item="node" index="index" separator="," open="(" close=")">
+                    #{node}
+                </foreach >
+            </if>
+            <if test="storeIds != null">
+                AND sales_store_id IN
+                <foreach collection="storeIds" item="storeId" index="index" separator="," open="(" close=")">
+                    #{storeId}
+                </foreach >
+            </if>
+            <if test="salesWarehouseId != null ">
+                AND sales_warehouse_id = #{salesWarehouseId}
+            </if>
+            <if test="salesIsSublist != null  and salesIsSublist !=''">
+                AND sales_is_sublist = #{salesIsSublist}
+            </if>
+            <if test="procTypeId != null  and procTypeId !=''">
+                AND pt.proc_type_id = #{procTypeId}
+            </if>
+            <if test="orderHasCaseDate != null  and orderHasCaseDate == 1">
+                AND order_case_date is not null
+            </if>
+            <if test="orderHasCaseDate != null  and orderHasCaseDate == 2">
+                AND order_case_date is null
+            </if>
+            <if test="statisticalType != null  and statisticalType == 1">
+                AND sales_status != 3 and sales_status = 0
+            </if>
+            <if test="statisticalType != null  and statisticalType == 2">
+                AND sales_status != 3 and sales_post_firm IS NULL AND sales_status = 1
+            </if>
+            <if test="statisticalType != null  and statisticalType == 3">
+                AND sales_status != 3 and sales_shipping_status = 0 AND sales_status = 1 AND sales_post_firm IS NOT NULL
+            </if>
+            <if test="statisticalType != null  and statisticalType == 4">
+                AND sales_status != 3 and sales_shipping_status = 11 AND sales_status = 1 AND sales_post_firm IS NOT NULL
+            </if>
+            <if test="statisticalType != null  and statisticalType == 5">
+                AND sales_status != 3 and sales_deliver = 1 AND sales_shipping_status = 1 AND sales_status = 1 AND sales_post_firm IS NOT NULL
+            </if>
+            <if test="statisticalType != null  and statisticalType == 6">
+                AND sales_status != 3 and sales_deliver = 2 AND sales_shipping_status = 1 AND sales_status = 1 AND sales_post_firm IS NOT NULL AND order_case_date IS NULL
+            </if>
+            <if test="statisticalType != null  and statisticalType == 7">
+                AND sales_status != 3 and sales_deliver = 2 AND sales_shipping_status = 1 AND sales_status = 1 AND sales_post_firm IS NOT NULL AND order_case_date IS NULL AND TIMESTAMPDIFF(HOUR,sales_deliver_time,NOW()) &gt;= 3 AND TIMESTAMPDIFF(HOUR,sales_deliver_time,NOW()) &lt;= 24
+            </if>
+            <if test="statisticalType != null  and statisticalType == 8">
+                AND sales_status != 3 and sales_deliver = 2 AND sales_shipping_status = 1 AND sales_status = 1 AND sales_post_firm IS NOT NULL AND order_case_date IS NULL AND TIMESTAMPDIFF(HOUR,sales_deliver_time,NOW()) &gt;= 24
+            </if>
+            <if test="salesIsErrorSign != null and salesIsErrorSign == 1">
+                AND sales_status != 3 and sales_deliver = 2 AND sales_error_state = 1 AND sales_shipping_status = 1 AND sales_status = 1 AND sales_post_firm IS NOT NULL AND order_case_date IS NOT NULL AND sales_send_time != order_case_date AND sales_sign_time is NULL AND sales_create_time >= '2020.05.01' AND TIMESTAMPDIFF(HOUR,order_case_date,NOW()) >= 85
+            </if>
+        </where>
+        ORDER BY NULL
+        <!-- SELECT
         COUNT(1)
         FROM
         (
@@ -901,7 +1043,7 @@
         LEFT JOIN tb_rst_cm_proc_type pt ON pt.proc_type_id = pm.proc_type_id
         LEFT JOIN tb_rst_sys_admin ao ON temp.sales_admin_id = ao.admin_id
         ORDER BY
-        temp.sales_create_time DESC
+        temp.sales_create_time DESC -->
     </select>
 
     <!-- 订单项集合 -->
@@ -1059,6 +1201,7 @@
                 sales_amount,
                 sales_pay_money,
                 sales_pay_type,
+                sales_payment_no,
                 sales_wait_money,
                 sales_last_money,
                 sales_shipping_fee,
@@ -1114,6 +1257,7 @@
                 #{salesAmount},
                 #{salesPayMoney},
                 #{salesPayType},
+                #{salesPaymentNo},
                 #{salesWaitMoney},
                 #{salesLastMoney},
                 #{salesShippingFee},
@@ -1289,6 +1433,9 @@
       <if test="salesPayType != null ">
         sales_pay_type = #{salesPayType},
       </if >
+      <if test="salesPaymentNo != null ">
+        sales_payment_no = #{salesPaymentNo},
+      </if >
       <if test="salesWaitMoney != null ">
         sales_wait_money = #{salesWaitMoney},
       </if >

+ 21 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/DouyinTask.java

@@ -44,6 +44,7 @@ import static com.iamberry.rst.controllers.mq.TaobaoConfig.*;
 
 /**
  * 抖音抖店订单同步
+ * https://op.jinritemai.com/docs/api-docs/15/1342
  *
  * @author xuyongjun
  * @since 2023-06-20
@@ -286,6 +287,7 @@ public class DouyinTask {
         order.setSalesAmount(trade.getOrderAmount().intValue());
         order.setSalesPayMoney(trade.getPayAmount().intValue());
         order.setSalesPayType(getSalesPayType(trade.getPayType()));
+        order.setSalesPaymentNo(trade.getChannelPaymentNo());
         order.setSalesWaitMoney(0);
         order.setSalesShippingFee(trade.getPostAmount().intValue());
         order.setSalesLastMoney(0);
@@ -408,12 +410,30 @@ public class DouyinTask {
     /**
      * 转换支付类型
      * @param payType 【支付类型】 0、货到付款 1 、微信 2、支付宝 3、小程序 4、银行卡 5、余额 7、无需支付(0元单) 8、DOU分期(信用支付) 9、新卡支付 12、先用后付
-     * @return 1:微信支付 2:现金支付3:已支付定金¥99 4:刷卡支付 5:支付宝支付
+     * @return 付款方式  1:微信支付 2:现金支付3:已支付定金¥99 4:刷卡支付 5:支付宝支付
+     * update 2023-07-18 新增抖音抖店类型;拉取订单时做映射
+     * 10:货到付款
+     * 11:小程序
+     * 12:银行卡
+     * 13:余额
+     * 14:无需支付(0元单)
+     * 15:DOU分期(信用支付)
+     * 16:新卡支付
+     * 17:先用后付
      */
     private Integer getSalesPayType(Long payType) {
         Map<Long, Integer> mapper = new HashMap<>();
+        mapper.put(0L, 10);
         mapper.put(1L, 1);
         mapper.put(2L, 5);
+        mapper.put(3L, 1);
+        mapper.put(4L, 12);
+        mapper.put(5L, 13);
+        mapper.put(7L, 14);
+        mapper.put(8L, 15);
+        mapper.put(9L, 16);
+        mapper.put(12L, 17);
+
         Integer value = mapper.get(payType);
 
         // 如果没有匹配上的,默认支付宝

+ 29 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/JingdongTask.java

@@ -55,6 +55,7 @@ import static com.iamberry.rst.controllers.mq.TaobaoConfig.DB_JD_PULL_ORDER_LIMI
 import static com.iamberry.rst.controllers.mq.TaobaoConfig.DB_JD_TOKEN_ID;
 
 /**
+ * https://jos.jd.com/apilistnewdetail?apiGroupId=55&apiId=14263&apiName=null
  * @author root
  */
 @Component
@@ -385,7 +386,9 @@ public class JingdongTask {
         order.setSalesAddressTel(orderPrivacyModel == null ? consigneeInfo.getMobile() : orderPrivacyModel.getConsMobilePhone());
         order.setSalesAmount(changeY2F(trade.getOrderTotalPrice()));
         order.setSalesPayMoney(changeY2F(trade.getOrderPayment()));
-        order.setSalesPayType(5);
+        order.setSalesPayType(getSalesPayType(trade.getPayType()));
+        //京东没有返回流水号,默认用订单号
+        order.setSalesPaymentNo(tid);
         order.setSalesWaitMoney(0);
         order.setSalesShippingFee(changeY2F(trade.getFreightPrice()));
         order.setSalesLastMoney(0);
@@ -515,6 +518,31 @@ public class JingdongTask {
         return order;
     }
 
+    /**
+     * 映射到数据库中
+     *
+     * @param payType 京东出参: 1货到付款, 2邮局汇款, 3自提, 4在线支付, 5公司转账, 6银行卡转账
+     * @return {@link SalesOrder} salesPayType 付款方式
+     */
+    private Integer getSalesPayType(String payType) {
+        Map<String, Integer> mapper = new HashMap<>(6);
+        mapper.put("1", 10);
+        mapper.put("2", 30);
+        mapper.put("3", 31);
+        mapper.put("4", 32);
+        mapper.put("5", 33);
+        mapper.put("6", 12);
+
+        Integer value = mapper.get(payType);
+
+        // 如果没有匹配上的,默认支付宝
+        if (value == null) {
+            return 5;
+        }
+
+        return value;
+    }
+
     private static int changeY2F(String price) {
         double p = Double.parseDouble(price);
         return (int)(p * 100);

+ 3 - 0
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java

@@ -43,6 +43,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
+ * https://developer.alibaba.com/docs/api.htm?spm=a219a.7386797.0.0.7a4f75feDVxqfS&source=search&apiId=128
  * @author root
  */
 @Component
@@ -412,6 +413,8 @@ public class TaobaoTask {
         order.setSalesAmount(changeY2F(trade.getPayment()));
         order.setSalesPayMoney(changeY2F(trade.getPayment()));
         order.setSalesPayType(5);
+        // 支付宝交易号
+        order.setSalesPaymentNo(trade.getAlipayNo());
         order.setSalesWaitMoney(0);
         order.setSalesShippingFee(0);
         order.setSalesLastMoney(0);

+ 12 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/add_order.ftl

@@ -186,6 +186,18 @@
                         <option value="2">现金支付</option>
                         <option value="4">刷卡支付</option>
                         <option value="5">支付宝支付</option>
+                        <option value="10">货到付款</option>
+                        <option value="11">小程序</option>
+                        <option value="12">银行卡</option>
+                        <option value="13">余额</option>
+                        <option value="14">无需支付(0元单)</option>
+                        <option value="15">DOU分期(信用支付)</option>
+                        <option value="16">新卡支付</option>
+                        <option value="17">先用后付</option>
+                        <option value="30">邮局汇款</option>
+                        <option value="31">自提</option>
+                        <option value="32">在线支付</option>
+                        <option value="33">公司转账</option>
                     </select>
                 </div>
             </div>

+ 12 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/add_sdorder.ftl

@@ -180,6 +180,18 @@
                             <option value="2">现金支付</option>
                             <option value="4">刷卡支付</option>
                             <option value="5">支付宝支付</option>
+                            <option value="10">货到付款</option>
+                            <option value="11">小程序</option>
+                            <option value="12">银行卡</option>
+                            <option value="13">余额</option>
+                            <option value="14">无需支付(0元单)</option>
+                            <option value="15">DOU分期(信用支付)</option>
+                            <option value="16">新卡支付</option>
+                            <option value="17">先用后付</option>
+                            <option value="30">邮局汇款</option>
+                            <option value="31">自提</option>
+                            <option value="32">在线支付</option>
+                            <option value="33">公司转账</option>
                         </select>
 				    </span>
                 </div>

+ 28 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/sales_order_detail.ftl

@@ -122,6 +122,30 @@
                     刷卡支付
                 <#elseif order.salesPayType == 5>
                     支付宝支付
+                <#elseif order.salesPayType == 10>
+                    货到付款
+                <#elseif order.salesPayType == 11>
+                    小程序
+                <#elseif order.salesPayType == 12>
+                    银行卡
+                <#elseif order.salesPayType == 13>
+                    余额
+                <#elseif order.salesPayType == 14>
+                    无需支付(0元单)
+                <#elseif order.salesPayType == 15>
+                    DOU分期(信用支付)
+                <#elseif order.salesPayType == 16>
+                    新卡支付
+                <#elseif order.salesPayType == 17>
+                    先用后付
+                <#elseif order.salesPayType == 30>
+                    邮局汇款
+                <#elseif order.salesPayType == 31>
+                    自提
+                <#elseif order.salesPayType == 32>
+                    在线支付
+                <#elseif order.salesPayType == 33>
+                    公司转账
                 </#if>
                 </span></td>
                 <td width="10"></td>
@@ -129,6 +153,10 @@
                 <td width="10" style="font-weight: normal;"><span>${(order.salesPayTime?string("yyyy-MM-dd HH:mm:ss"))!''}</span></td>
             </tr>
             <tr>
+                <th width="10">付款渠道流水号:</th>
+                <td width="10" colspan="4"><span>${order.salesPaymentNo!''}</span></td>
+            </tr>
+            <tr>
                 <th width="10">录入人:</th>
                 <td width="10" style="font-weight: normal;">${order.salesAdminName!''}</td>
 

+ 12 - 0
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/update_order.ftl

@@ -225,6 +225,18 @@
                             <option value="2" <#if order.salesPayType = 2>selected</#if>>现金支付</option>
                             <option value="4" <#if order.salesPayType = 4>selected</#if>>刷卡支付</option>
                             <option value="5" <#if order.salesPayType = 5>selected</#if>>支付宝支付</option>
+                            <option value="10" <#if order.salesPayType = 10>selected</#if>>货到付款</option>
+                            <option value="11" <#if order.salesPayType = 11>selected</#if>>小程序</option>
+                            <option value="12" <#if order.salesPayType = 12>selected</#if>>银行卡</option>
+                            <option value="13" <#if order.salesPayType = 13>selected</#if>>余额</option>
+                            <option value="14" <#if order.salesPayType = 14>selected</#if>>无需支付(0元单)</option>
+                            <option value="15" <#if order.salesPayType = 15>selected</#if>>DOU分期(信用支付)</option>
+                            <option value="16" <#if order.salesPayType = 16>selected</#if>>新卡支付</option>
+                            <option value="17" <#if order.salesPayType = 17>selected</#if>>先用后付</option>
+                            <option value="30" <#if order.salesPayType = 30>selected</#if>>邮局汇款</option>
+                            <option value="31" <#if order.salesPayType = 31>selected</#if>>自提</option>
+                            <option value="32" <#if order.salesPayType = 32>selected</#if>>在线支付</option>
+                            <option value="33" <#if order.salesPayType = 33>selected</#if>>公司转账</option>
                         </select>
 				    </span>
                 </div>