Browse Source

系统增加实付金额的功能。

xian 3 years ago
parent
commit
f885370ecb

+ 11 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/cm/SalesOrder.java

@@ -2,6 +2,7 @@ package com.iamberry.rst.core.cm;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.iamberry.rst.core.fm.ComplaintDetectInfo;
+import com.iamberry.rst.core.order.OrderMoneyLogs;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
@@ -161,6 +162,16 @@ public class SalesOrder implements Serializable {
     /** 赠品订单所属销售订单 */
     private Integer salesVestId;
 
+    private List<OrderMoneyLogs> logs;
+
+    public List<OrderMoneyLogs> getLogs() {
+        return logs;
+    }
+
+    public void setLogs(List<OrderMoneyLogs> logs) {
+        this.logs = logs;
+    }
+
     public Integer getSalesGive() {
         return salesGive;
     }

+ 82 - 0
watero-rst-core/src/main/java/com.iamberry.rst.core/order/OrderMoneyLogs.java

@@ -0,0 +1,82 @@
+package com.iamberry.rst.core.order;
+
+import com.iamberry.rst.core.sys.Admin;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Xian
+ */
+public class OrderMoneyLogs implements Serializable {
+
+    private Integer logsId;
+
+    private Integer salesId;
+
+    private Integer adminId;
+
+    private Integer logsAfterNum;
+
+    private Integer logsBoforeNum;
+
+    private Date logsCreateTime;
+
+    private Admin admin;
+
+    public Admin getAdmin() {
+        return admin;
+    }
+
+    public void setAdmin(Admin admin) {
+        this.admin = admin;
+    }
+
+    public Integer getLogsId() {
+        return logsId;
+    }
+
+    public void setLogsId(Integer logsId) {
+        this.logsId = logsId;
+    }
+
+    public Integer getSalesId() {
+        return salesId;
+    }
+
+    public void setSalesId(Integer salesId) {
+        this.salesId = salesId;
+    }
+
+    public Integer getAdminId() {
+        return adminId;
+    }
+
+    public void setAdminId(Integer adminId) {
+        this.adminId = adminId;
+    }
+
+    public Integer getLogsAfterNum() {
+        return logsAfterNum;
+    }
+
+    public void setLogsAfterNum(Integer logsAfterNum) {
+        this.logsAfterNum = logsAfterNum;
+    }
+
+    public Integer getLogsBoforeNum() {
+        return logsBoforeNum;
+    }
+
+    public void setLogsBoforeNum(Integer logsBoforeNum) {
+        this.logsBoforeNum = logsBoforeNum;
+    }
+
+    public Date getLogsCreateTime() {
+        return logsCreateTime;
+    }
+
+    public void setLogsCreateTime(Date logsCreateTime) {
+        this.logsCreateTime = logsCreateTime;
+    }
+}

+ 4 - 0
watero-rst-interface/src/main/java/com/iamberry/rst/faces/order/OrderService.java

@@ -282,4 +282,8 @@ public interface OrderService {
     List<SalesOrder> querySalesOrderItemListBySalesId(int salesId);
 
     public void updateSalesOrderPostType(SalesOrder salesOrders, String postType);
+
+    int addMoneyLogs(OrderMoneyLogs logs);
+
+    List<OrderMoneyLogs> list(Integer salesId);
 }

+ 37 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderServiceImpl.java

@@ -13,7 +13,9 @@ import com.iamberry.rst.core.sys.OrderCheckStatus;
 import com.iamberry.rst.core.sys.Relu;
 import com.iamberry.rst.faces.order.EfastOrderService;
 import com.iamberry.rst.faces.order.OrderService;
+import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
 import com.iamberry.rst.service.order.mapper.OrderMapper;
+import com.iamberry.rst.service.order.mapper.OrderMoneyLogsMapper;
 import com.iamberry.rst.service.product.mapper.ProductMapper;
 import com.iamberry.rst.service.sys.mapper.SysMapper;
 import com.iamberry.rst.util.PageUtil;
@@ -22,6 +24,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
@@ -43,6 +46,11 @@ public class OrderServiceImpl implements OrderService{
     private EfastOrderService efastOrderService;
     @Autowired
     private ProductMapper productMapper;
+    @Autowired
+    private OrderMoneyLogsMapper moneyLogsMapper;
+    @Autowired
+    private SalesOrderMapper salesOrderMapper;
+
     private static Logger logger = LoggerFactory.getLogger(OrderServiceImpl.class);
     /**
      * 租赁类型缓存
@@ -160,10 +168,39 @@ public class OrderServiceImpl implements OrderService{
     public List<SalesOrder> querySalesOrderItemListBySalesId(int salesId){
         return orderMapper.querySalesOrderItemListBySalesId(salesId);
     }
+
+    @Override
     public void updateSalesOrderPostType(SalesOrder salesOrders, String postType){
         salesOrders.setSalesPostFirm(postType);
         orderMapper.updateSalesOrderPostType(salesOrders);
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class}, isolation = Isolation.REPEATABLE_READ)
+    public int addMoneyLogs(OrderMoneyLogs logs) {
+        // 编辑订单金额信息
+        SalesOrder salesOrder = new SalesOrder();
+        salesOrder.setSalesId(logs.getSalesId());
+        salesOrder.setSalesPayMoney(logs.getLogsBoforeNum());
+        salesOrderMapper.updateSalesOrder(salesOrder);
+        // 录入记录
+        return moneyLogsMapper.add(logs);
+    }
+
+    @Override
+    public List<OrderMoneyLogs> list(Integer salesId) {
+        List<OrderMoneyLogs> list = moneyLogsMapper.list(salesId);
+        if (list == null || list.isEmpty()) {
+            return null;
+        }
+        for (OrderMoneyLogs orderMoneyLogs : list) {
+            Admin admin = new Admin();
+            admin.setAdminId(orderMoneyLogs.getAdminId());
+            orderMoneyLogs.setAdmin(sysMapper.get(admin));
+        }
+        return list;
+    }
+
     @Override
     public OrderSource getSource(Integer sourceId) {
         return orderMapper.getSource(sourceId);

+ 20 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/OrderMoneyLogsMapper.java

@@ -0,0 +1,20 @@
+package com.iamberry.rst.service.order.mapper;
+
+import com.iamberry.rst.core.order.OrderMoneyLogs;
+
+import java.util.List;
+
+public interface OrderMoneyLogsMapper {
+
+    int del(Integer logsId);
+
+    int add(OrderMoneyLogs record);
+
+    OrderMoneyLogs get(Integer logsId);
+
+    int edit(OrderMoneyLogs record);
+
+    List<OrderMoneyLogs> list(Integer orderId);
+
+
+}

+ 42 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/mapper/OrderMoneyLogsMapper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.iamberry.rst.service.order.mapper.OrderMoneyLogsMapper" >
+
+  <select id="get" resultType="OrderMoneyLogs" parameterType="java.lang.Integer" >
+    select * from tb_rst_order_money_logs where logs_id = #{logsId,jdbcType=INTEGER}
+  </select>
+  <delete id="del" parameterType="java.lang.Integer" >
+    delete from tb_rst_order_money_logs where logs_id = #{logsId,jdbcType=INTEGER}
+  </delete>
+
+  <insert id="add" parameterType="OrderMoneyLogs" >
+    insert into tb_rst_order_money_logs (logs_id, sales_id, admin_id, 
+      logs_after_num, logs_bofore_num, logs_create_time)
+    values (#{logsId,jdbcType=INTEGER}, #{salesId,jdbcType=INTEGER}, #{adminId,jdbcType=INTEGER}, 
+      #{logsAfterNum,jdbcType=INTEGER}, #{logsBoforeNum,jdbcType=INTEGER}, NOW())
+  </insert>
+
+  <update id="edit" parameterType="OrderMoneyLogs" >
+    update tb_rst_order_money_logs
+    <set >
+      <if test="salesId != null" >
+        sales_id = #{salesId,jdbcType=INTEGER},
+      </if>
+      <if test="adminId != null" >
+        admin_id = #{adminId,jdbcType=INTEGER},
+      </if>
+      <if test="logsAfterNum != null" >
+        logs_after_num = #{logsAfterNum,jdbcType=INTEGER},
+      </if>
+      <if test="logsBoforeNum != null" >
+        logs_bofore_num = #{logsBoforeNum,jdbcType=INTEGER},
+      </if>
+    </set>
+    where logs_id = #{logsId,jdbcType=INTEGER}
+  </update>
+
+  <select id="list" parameterType="java.lang.Integer" resultType="OrderMoneyLogs">
+    select * from tb_rst_order_money_logs where sales_id = #{salesId,jdbcType=INTEGER}
+  </select>
+
+</mapper>

+ 35 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminSalesOrderController.java

@@ -93,6 +93,8 @@ public class AdminSalesOrderController {
     private OrderDepartService orderDepartService;
     @Autowired
     private SysService sysService;
+    @Autowired
+    private OrderService orderService;
 
     /**
      * 分页查询订单列表信息
@@ -242,7 +244,8 @@ public class AdminSalesOrderController {
         order.setSalesOrderItemList(itemList);
         //查询更正信息
         List<OrderCorrectInfo> listOrderCorrectInfo = salesOrderService.listOrderCorrectInfo(order.getSalesId());
-
+        // 查询金额编辑记录
+        order.setLogs(orderService.list(order.getSalesId()));
         //查询物流公司信息
         if(order.getSalesPostFirm() != null ){
             LogisticsInfo logisticsInfo = new LogisticsInfo();
@@ -266,6 +269,34 @@ public class AdminSalesOrderController {
         return mv;
     }
 
+    /**
+     * 为订单添加金额记录
+     */
+    @RequestMapping("/addMoneyLogsUI")
+    @RequiresPermissions("salesOrder:select:salesOrder")
+    public ModelAndView addMoneyLogsUI(@RequestParam("id") Integer id) {
+        // 查询订单
+        SalesOrder order = new SalesOrder();
+        order.setSalesId(id);
+        List<SalesOrder> orderList = salesOrderService.listSalesOrder(order);
+        order = orderList.get(0);
+        // 返回数据
+        ModelAndView mv = new ModelAndView("order/salesOrder/add_money_logs");
+        mv.addObject("order", order);
+        return mv;
+    }
+
+    /**
+     * 添加订单金额变动记录
+     */
+    @ResponseBody
+    @RequestMapping("/addMoneyLogs")
+    @RequiresPermissions("salesOrder:select:salesOrder")
+    public ResponseJson addMoneyLogs(OrderMoneyLogs data) {
+        data.setAdminId(AdminUtils.getLoginAdminId());
+        return orderService.addMoneyLogs(data) >= 1 ? ResponseJson.getSUCCESS() : ResponseJson.getFAILURE();
+    }
+
 
 
     /**
@@ -2419,4 +2450,7 @@ public class AdminSalesOrderController {
         }
         return rj;
     }
+
+
+
 }

+ 2 - 0
watero-rst-web/src/main/resources/watero-rst-orm.xml

@@ -44,6 +44,7 @@
 		<typeAlias type="com.iamberry.rst.core.order.ProductAreaRela" alias="ProductAreaRela"/>
 		<typeAlias type="com.iamberry.rst.core.order.ProductArea" alias="ProductArea"/>
 		<typeAlias type="com.iamberry.rst.core.order.OrderDepart" alias="OrderDepart"/>
+		<typeAlias type="com.iamberry.rst.core.order.OrderMoneyLogs" alias="OrderMoneyLogs"/>
 
 		<typeAlias type="com.iamberry.rst.core.sms.SmsMessage" alias="SmsMessage"/>
 		<typeAlias type="com.iamberry.rst.core.sms.OrderMessage" alias="OrderMessage"/>
@@ -336,6 +337,7 @@
 		<mapper resource="com/iamberry/rst/service/order/mapper/provincesLogisticsMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/order/mapper/orderWarehouseMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/order/mapper/orderDepartMapper.xml"/>
+		<mapper resource="com/iamberry/rst/service/order/mapper/OrderMoneyLogsMapper.xml"/>
 		<!--订单拉取平台-->
 		<mapper resource="com/iamberry/rst/service/order/mapper/orderSyncLogMapper.xml"/>
 		<mapper resource="com/iamberry/rst/service/order/mapper/orderSyncPlatformMapper.xml"/>

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

@@ -0,0 +1,200 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="renderer" content="webkit|ie-comp|ie-stand">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-siteapp" />
+    <LINK rel="Bookmark" href="/favicon.ico" >
+    <LINK rel="Shortcut Icon" href="/favicon.ico" />
+    <#include "/base/add_base.ftl">
+    <script type="text/javascript" src="${path}/common/lib/Validform/Validform_v5.3.2_min.js"></script>
+    <title>订单实付金额</title>
+</head>
+<body>
+
+<div class="pd-20">
+    <form action="/admin/salesOrder/addMoneyLogs" method="post" class="form form-horizontal" id="form-admin-add">
+
+        <input type="hidden" name="salesId" value="${(order.salesId)!}">
+        <input type="hidden" name="logsAfterNum" value="${(order.salesPayMoney)!}">
+        <input type="hidden" id="logsBoforeNum" name="logsBoforeNum" value="">
+
+        <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3" style="padding-left: 0;margin-left: 0px;width: 17%;"><span class="c-red"></span>用户信息:</label>
+            <div class="formControls col-xs-8 col-sm-9" style="padding-top: 3px;">
+                ${(order.salesAddressName)!} <span style="margin-left: 10px"></span> ${(order.salesAddressTel)!}
+            </div>
+            <div class="col-4"> </div>
+        </div>
+
+        <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3" style="padding-left: 0;margin-left: 0px;width: 17%;"><span class="c-red"></span>当前金额:</label>
+            <div class="formControls col-xs-8 col-sm-9" style="padding-top: 3px;">
+                ${(order.salesPayMoney/100)?string.currency}
+            </div>
+            <div class="col-4"> </div>
+        </div>
+
+        <div class="row cl">
+            <label class="form-label col-xs-4 col-sm-3" style="padding-left: 0;margin-left: 0px;width: 17%;"><span class="c-red">*</span>最终金额:</label>
+            <div class="formControls col-xs-8 col-sm-9" style="padding-top: 3px;">
+                <input type="text" placeholder="最终金额" id="logsBoforeNum-Str" class="input-text" datatype="/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/" nullmsg="最终金额不合法">
+            </div>
+            <div class="col-4"> </div>
+        </div>
+
+        <div class="row cl">
+            <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3" style="margin-left: 17%;">
+                <input class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;提交&nbsp;&nbsp;">
+            </div>
+        </div>
+    </form>
+</div>
+</body>
+<script type="text/javascript">
+    function user_callback() {
+        var cetdMoney = $("#logsBoforeNum-Str").val();
+        $("#logsBoforeNum").val(parseInt(parseFloat(cetdMoney)*100));
+        return true;
+    }
+    /* 开启校验 */
+    $(function(){
+        $("#form-admin-add").Validform({
+            tiptype:function(msg, o, cssctl){
+                if (o.type === 3) {
+                    layer.msg(msg,{icon:2,time:1500});
+                }
+            },
+            ignoreHidden: false,
+            callback:function(form){
+                var send = true;
+                if (typeof user_callback !== "undefined") {
+                    send = user_callback();
+                }
+                if (typeof send === "undefined") {
+                    add();
+                }
+                if (send) {
+                    add();
+                }
+                return false;
+            }
+        });
+    });
+    /* 当前方法 */
+    function add() {
+        //此处请求后台程序,下方是成功后的前台处理……
+        ajax("POST", $("#form-admin-add").attr("action"), formatJSON(), function(res) {
+            if (typeof success_callback !== "undefined") {
+                success_callback(res);
+            } else {
+                if (res.resultCode === 200 && res.returnCode === 200) {
+                    layer.msg('操作成功!',{icon: 6,time:1000}, function (){
+                        var index = parent.layer.getFrameIndex(window.name);
+                        parent.layer.close(index);
+                    });
+                } else {
+                    var error = null;
+                    try {
+                        error = res.returnMsg.error;
+                    } catch (error) {
+
+                    }
+                    if (error != null && typeof error !== "undefined") {
+                        layer.msg("【操作失败】" + error,{icon: 1,time:3000});
+                    } else {
+                        layer.msg('请求失败,请重试!',{icon: 1,time:1000});
+                    }
+                }
+            }
+        }, function() {
+            if (typeof faild_callback !== "undefined") {
+                faild_callback();
+            }
+        });
+    }
+
+    /*将表单format 为  JSON*/
+    function formatJSON() {
+        var o={};
+        $($("#form-admin-add").serializeArray()).each(function(){
+            if (this.value !== "" && this.value != null) {
+                // 如果value为空,则不要填充啦
+                if (o[this.name] !== undefined) {
+                    if (!o[this.name].push) {
+                        o[this.name] = [o[this.name]];
+                    }
+                    o[this.name].push(this.value || '');
+                } else {
+                    o[this.name] = this.value || '';
+                }
+            }
+        });
+        return o;
+    }
+
+
+    /**
+     * Ajax请求封装
+     * @param type              请求方式:GET、POST
+     * @param uri               请求URI
+     * @param data              请求数据
+     * @param success_Callback  请求成功时的回调地址
+     * @param faild_callback    请求失败时的回调地址
+     * @param async             是否发起异步请求
+     */
+    function ajax(type, uri, data, success_Callback, faild_callback, async) {
+        if (!async && async !== false) {
+            async = true;
+        }
+        type = type || "POST";
+        var index = null;
+        $.ajax({
+            type: type,
+            url: root_path + uri,
+            data: data,
+            dataType: "json",
+            async:async,
+            traditional: true,
+            beforeSend: function () {
+                /* AJAX请求前,展示加载层 */
+                index = layer.load(0, {zIndex:1989101500, isOutAnim:true, shade: [0.8,'#fff']});
+            },
+            success: function(data){
+                /* 请求成功 判断是否触发服务器逻辑的错误 */
+                if (data.error) {
+                    /* 如果触发错误,则不会回调成功方法 */
+                    var info = (data.error == "auth_error") ? "[权限有误] 请联系管理员分配对应权限!" : "[服务器错误]" + data.error_msg;
+                    layer.msg(info,{icon: 1,time:1700});
+                    return;
+                }
+                /* 回调成功的方法 */
+                success_Callback(data);
+            },
+            complete: function (xhr) {
+                /* 请求结束后 关闭加载层 */
+                layer.close(index);
+            },
+            error: function (xhr) {
+                /* 此处需要将错误,传递会服务器,以便以后分析处理 */
+                /*new Image().src = root_path + "/html_error/" + encodeURI(xhr.statusText);
+                layer.msg('请求失败,请重试!',{icon: 1,time:1000});*/
+                try {
+                    var data = JSON.parse(xhr.responseText);
+                    var info = (data.error == "auth_error") ? "[权限有误] 请联系管理员分配对应权限!" : "[服务器错误]" + data.error_msg;
+                    layer.msg(info,{icon: 1,time:1700});
+                } catch (e) {
+                    new Image().src = root_path + "/html_error/" + encodeURI(xhr.statusText);
+                    layer.msg('请求失败,请重试!',{icon: 1,time:1000});
+                }
+                try {
+                    faild_callback(xhr);
+                } catch (e) {
+                }
+            }
+        });
+    }
+</script>
+</html>

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

@@ -550,6 +550,35 @@
             </table>
         </#if>
 
+        <#if (order.logs)??>
+            <div class="row cl">
+                <label class="form-label col-3">
+                    <div class="tit-2">
+                        金额变动记录
+                    </div>
+                </label>
+                <div class="formControls col-10 col-sm-10">
+                </div>
+            </div>
+
+            <table class="table table-bordered" style="margin-top: 10px;">
+                <tr class="text-c">
+                    <th>操作人</th>
+                    <th>操作时间</th>
+                    <th>变动前</th>
+                    <th>变动后</th>
+                </tr>
+                <#list order.logs as l>
+                    <tr class="text-c">
+                        <td>${(l.admin.adminName)!}</td>
+                        <td>${(l.logsCreateTime?string("yyyy-MM-dd HH:mm:ss"))!''}</td>
+                        <td>${(l.logsAfterNum/100)?string.currency}</td>
+                        <td>${(l.logsBoforeNum/100)?string.currency}</td>
+                    </tr>
+                    </#list>
+            </table>
+        </#if>
+
          <#--<button type="button" style="cursor:pointer;height: 35px;margin-top: 10px;"onClick="" class="my-btn-search"><<返回</button>-->
     </form>
     </div>

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

@@ -328,6 +328,11 @@
                                 </a>
                             </#if>
                         </#if>
+
+                        <a style="text-decoration:none;" href="javascript:void(0);" title="订单实付金额" onclick="order_money(${order.salesId})">
+                            <i class="Hui-iconfont">&#xe6b7;</i>
+                        </a>
+
                         <a class="confirm_order_target" style="text-decoration:none;display: none" href="javascript:void(0);" title="确认订单" alt="确认订单" onclick="confirm_one(${order.salesId!''})">
                             <i class="Hui-iconfont">&#xe615;</i>
                         </a>
@@ -436,6 +441,11 @@
         increaseArea: '20%'
     });
 
+    /** 订单实付金额 */
+    function order_money(id) {
+        layer_show('订单实付金额', '${path}/admin/salesOrder/addMoneyLogsUI?id=' + id,'800','600');
+    }
+
     /*判断上传类型 1:上传excel推送订单   2:下载订单  2:上传efast物流信息excel */
     var editorType;
     var _editor;