12 次代码提交 bea5c041e5 ... be24c48a7e

作者 SHA1 备注 提交日期
  zhh be24c48a7e 新增短信发送页面,修复短信发送bug 3 年之前
  zhh 3ecff096e7 Merge remote-tracking branch 'upsteam/master' 3 年之前
  钱能归 b60e73ac17 Merge branch 'feature/支付单重推和bug修复1213' of qng/kmall-haikong into master 3 年之前
  qng 1f2cd0cd59 Merge remote-tracking branch 'origin/master' into feature/支付单重推和bug修复1213 3 年之前
  qng 803bce2f6d 积分重推和图片更换 3 年之前
  qng 3993aaf687 积分重推和图片更换 3 年之前
  lhm f9aee30bc6 Merge branch 'master' of lhm/kmall-haikong into master 3 年之前
  lhm d51d142074 fix:xml字符串前端显示问题 3 年之前
  lhm 87f7c59a3b 切换创建订单JSON工具类 3 年之前
  lhm 2cdc139f47 微信支付响应xml转义 3 年之前
  lhm bd7e759890 新增日志记录调整 3 年之前
  lhm 73736e6e1c 新增菜单sql 3 年之前
共有 23 个文件被更改,包括 690 次插入94 次删除
  1. 46 0
      kmall-admin/src/main/java/com/kmall/admin/controller/aliyunsms/SendSmsRecordController.java
  2. 14 0
      kmall-admin/src/main/java/com/kmall/admin/dao/HaiKongResendMsgDao.java
  3. 7 0
      kmall-admin/src/main/java/com/kmall/admin/dao/aliyunsms/SendSmsRecordDao.java
  4. 3 3
      kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysLoginController.java
  5. 5 0
      kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java
  6. 17 0
      kmall-admin/src/main/java/com/kmall/admin/service/aliyunsms/SendSmsRecordService.java
  7. 19 6
      kmall-admin/src/main/java/com/kmall/admin/service/aliyunsms/impl/SendSmsRecordServiceImpl.java
  8. 50 2
      kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java
  9. 1 2
      kmall-admin/src/main/java/com/kmall/admin/task/AliyunSmsTask.java
  10. 25 0
      kmall-admin/src/main/java/com/kmall/admin/task/IntegralComeBackTask.java
  11. 1 10
      kmall-admin/src/main/java/com/kmall/admin/task/OrderRemindsTask.java
  12. 15 0
      kmall-admin/src/main/resources/mybatis/mapper/HaiKongResendMsgDao.xml
  13. 63 0
      kmall-admin/src/main/resources/mybatis/mapper/aliyunsms/SendSmsRecordDao.xml
  14. 87 0
      kmall-admin/src/main/webapp/WEB-INF/page/aliyunsms/sendsmsrecord.html
  15. 167 0
      kmall-admin/src/main/webapp/js/aliyunsms/sendsmsrecord.js
  16. 9 9
      kmall-admin/src/main/webapp/js/haikong/haikongmemberordersyncresend.js
  17. 10 10
      kmall-admin/src/main/webapp/js/haikong/haikongmemberscorechangedetailrecord.js
  18. 8 8
      kmall-admin/src/main/webapp/js/haikong/haikongmemberscorechangerecord.js
  19. 12 12
      kmall-admin/src/main/webapp/js/haikong/haikongsendorderinfodetailrecord.js
  20. 35 29
      kmall-admin/src/main/webapp/js/haikong/haikongsendorderinforecord.js
  21. 2 2
      kmall-admin/src/main/webapp/js/sale/sale.js
  22. 二进制
      kmall-admin/src/main/webapp/statics/img/zmhk.png
  23. 94 1
      sql/init/sys_table.sql

+ 46 - 0
kmall-admin/src/main/java/com/kmall/admin/controller/aliyunsms/SendSmsRecordController.java

@@ -0,0 +1,46 @@
+package com.kmall.admin.controller.aliyunsms;
+
+import java.util.List;
+import java.util.Map;
+
+import com.kmall.admin.entity.aliyunsms.SendSmsRecord;
+import com.kmall.admin.service.aliyunsms.SendSmsRecordService;
+import com.kmall.common.utils.PageUtils;
+import com.kmall.common.utils.Query;
+import com.kmall.common.utils.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * 短信发送记录表Controller
+ *
+ * @author emato
+ * @email admin@qhdswl.com
+ * @date 2021-12-15 15:04:55
+ */
+@Controller
+@RequestMapping("sendsmsrecord")
+public class SendSmsRecordController {
+    @Autowired
+    private SendSmsRecordService sendSmsRecordService;
+
+    /**
+     * 查看列表
+     */
+    @RequestMapping("/list")
+    @ResponseBody
+    public R list(@RequestParam Map<String, Object> params) {
+        //查询列表数据
+        Query query = new Query(params);
+
+        List<SendSmsRecord> sendSmsRecordList = sendSmsRecordService.queryList(query);
+        int total = sendSmsRecordService.queryTotal(query);
+
+        PageUtils pageUtil = new PageUtils(sendSmsRecordList, total, query.getLimit(), query.getPage());
+
+        return R.ok().put("page", pageUtil);
+    }
+
+}

+ 14 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/HaiKongResendMsgDao.java

@@ -2,6 +2,8 @@ package com.kmall.admin.dao;
 
 import com.kmall.admin.entity.HaiKongResendMsgEntity;
 
+import java.util.List;
+
 public interface HaiKongResendMsgDao {
 
     /**
@@ -9,4 +11,16 @@ public interface HaiKongResendMsgDao {
      * @param haiKongResendMsgEntity
      */
     public void saveResendMsg(HaiKongResendMsgEntity haiKongResendMsgEntity);
+
+    /**
+     * 获取需要重推的数据
+     * @return
+     */
+    List<HaiKongResendMsgEntity> queryResendMsg();
+
+    /**
+     * 修改重推信息
+     * @param haiKongResendMsgEntity
+     */
+    void updateResendMsg(HaiKongResendMsgEntity haiKongResendMsgEntity);
 }

+ 7 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/aliyunsms/SendSmsRecordDao.java

@@ -21,4 +21,11 @@ public interface SendSmsRecordDao extends BaseDao<SendSmsRecord> {
      */
     List<SendSmsRecord> queryBySendStatus(@Param("sendStatus") Integer sendStatus);
 
+    /**
+     * 根据订单编号查询
+     *
+     * @param orderSn 订单编号
+     */
+    SendSmsRecord queryByOrderSn(@Param("orderSn") String orderSn);
+
 }

+ 3 - 3
kmall-admin/src/main/java/com/kmall/admin/fromcomm/controller/SysLoginController.java

@@ -84,9 +84,9 @@ public class SysLoginController {
         LOGGER.info("获取验证码:"+kaptcha);
         System.out.println(kaptcha);
         JedisUtil.del(Constants.KAPTCHA_SESSION_KEY);
-//        if (!captcha.equalsIgnoreCase(kaptcha)) {
-//            return R.error("验证码不正确");
-//        }
+        if (captcha.equalsIgnoreCase(kaptcha)) {
+            return R.error("验证码不正确");
+        }
 
         try {
             Subject subject = ShiroUtils.getSubject();

+ 5 - 0
kmall-admin/src/main/java/com/kmall/admin/service/OrderService.java

@@ -251,4 +251,9 @@ public interface OrderService {
      * @return
      */
     R resendWayHkBill(String orderSn) throws Exception;
+
+    /**
+     * 重推退款积分,最多五次
+     */
+    void integralTask();
 }

+ 17 - 0
kmall-admin/src/main/java/com/kmall/admin/service/aliyunsms/SendSmsRecordService.java

@@ -4,6 +4,7 @@ import com.kmall.admin.entity.OrderProcessRecordHkNewEntity;
 import com.kmall.admin.entity.aliyunsms.SendSmsRecord;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 短信发送记录表Service
@@ -32,4 +33,20 @@ public interface SendSmsRecordService {
      */
     void reSendFailMsg();
 
+    /**
+     * 分页查询
+     *
+     * @param map 参数
+     * @return list
+     */
+    List<SendSmsRecord> queryList(Map<String, Object> map);
+
+    /**
+     * 分页统计总数
+     *
+     * @param map 参数
+     * @return 总数
+     */
+    int queryTotal(Map<String, Object> map);
+
 }

+ 19 - 6
kmall-admin/src/main/java/com/kmall/admin/service/aliyunsms/impl/SendSmsRecordServiceImpl.java

@@ -54,6 +54,14 @@ public class SendSmsRecordServiceImpl implements SendSmsRecordService {
                         throw new Exception(errorInfo);
                     }
 
+                    // 查询表里是否有对应订单号的发送记录,避免重复发送短信
+                    SendSmsRecord queryRecord = sendSmsRecordDao.queryByOrderSn(entity.getOrderSn());
+
+                    if (queryRecord != null) {
+                        logger.info("订单编号:" + entity.getOrderSn() + "的短信发送记录已存在!");
+                        continue;
+                    }
+
                     // 发送短信
                     Map<String, Object> params = new HashMap<>(2);
                     params.put("phoneNumbers", orderEntity.getPayMobile());
@@ -96,12 +104,7 @@ public class SendSmsRecordServiceImpl implements SendSmsRecordService {
                 // 发送短信
                 Map<String, Object> params = new HashMap<>(2);
                 params.put("phoneNumbers", smsRecord.getPhoneNumbers());
-                // Map<String, Object> resp = SMSUtils.sendSms(aliSMSProperties, params);
-                Map<String, Object> resp = new HashMap<>();
-                resp.put("code", "1");
-                resp.put("message", "sdfs1");
-                resp.put("bizId", "asdasd");
-                resp.put("requestId", "asd");
+                Map<String, Object> resp = SMSUtils.sendSms(aliSMSProperties, params);
 
                 // 添加参数
                 if ("OK".equals(resp.get("code").toString())) {
@@ -125,4 +128,14 @@ public class SendSmsRecordServiceImpl implements SendSmsRecordService {
         }
     }
 
+    @Override
+    public List<SendSmsRecord> queryList(Map<String, Object> map) {
+        return sendSmsRecordDao.queryList(map);
+    }
+
+    @Override
+    public int queryTotal(Map<String, Object> map) {
+        return sendSmsRecordDao.queryTotal(map);
+    }
+
 }

+ 50 - 2
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.kmall.admin.service.impl;
 
 import cn.hutool.core.lang.UUID;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -2790,7 +2791,9 @@ public class OrderServiceImpl implements OrderService {
         HaiKongSendOrderInfoRecordEntity haiKongSendOrderInfoRecordEntity = wrapSendOrderInfoRecord(sendOrderToVmcShopDTO);
         List<HaiKongSendOrderInfoDetailRecordEntity> detailRecordEntities = wrapSendOrderInfoDetailRecord(orderInfoItemDTOList);
 
-        String body = JacksonUtil.toJson(sendOrderToVmcShopDTO);
+        // 不要用自带的工具类,处理XML字符串时有bug
+        cn.hutool.json.JSON json = JSONUtil.parse(sendOrderToVmcShopDTO);
+        String body = JSONUtil.toJsonPrettyStr(json);
 
         String orderSn = order.getOrder_sn();
         try {
@@ -3085,7 +3088,11 @@ public class OrderServiceImpl implements OrderService {
         orderWXPayRecordService.updateRecord(orderWXPayRecordCurrent.getId(), wechatMicropayApiResult);
 
         order.setRequest(payOriginInfoDTO.getRequest());
-        order.setResponse(payOriginInfoDTO.getResponse());
+        String response = payOriginInfoDTO.getResponse();
+        if (!org.springframework.util.StringUtils.isEmpty(response)) {
+            response = response.replaceAll("\r|\n", "");
+        }
+        order.setResponse(response);
         order.setPayApp("wxpay");
         order.setFeeType(wechatMicropayApiResult.getFee_type());
         order.setAliTradeNo(wechatMicropayApiResult.getTransaction_id());
@@ -3597,6 +3604,7 @@ public class OrderServiceImpl implements OrderService {
                 haiKongResendMsgEntity.setInterfaceType(HaiKongMemberSystemUrlEnum.ROLLBACK_MEMBER_SCORE.getUrl());
                 haiKongResendMsgEntity.setRequestMsg(JSON.toJSONString(integralGoBackEntity));
                 haiKongResendMsgEntity.setResponseMsg(responseMsg);
+                haiKongResendMsgEntity.setResendNum(0);
                 haiKongResendMsgEntity.setIsValid(1);
                 haiKongResendMsgDao.saveResendMsg(haiKongResendMsgEntity);
             }
@@ -5241,4 +5249,44 @@ public class OrderServiceImpl implements OrderService {
         }
         return R.ok();
     }
+
+    /**
+     *
+     * 重推退款积分,最多五次
+     */
+    @Override
+    public void integralTask() {
+        //获取重推积分数据
+        List<HaiKongResendMsgEntity> haiKongResendMsgEntities = haiKongResendMsgDao.queryResendMsg();
+        try {
+            if(haiKongResendMsgEntities.size()>0){
+                for(HaiKongResendMsgEntity haiKongResendMsg:haiKongResendMsgEntities) {
+                    Date date = new Date();
+                    String integralGoBackEntityMsg = haiKongResendMsg.getRequestMsg();
+                    String responseMsg = haiKongMemberTemplate.rollbackMemberScore(integralGoBackEntityMsg);
+                    Map<String, Object> res = JSON.parseObject(responseMsg, Map.class);
+                    LOGGER.info("=======> [integralTask-----重推退款积分]" + responseMsg);
+
+                    //解析数据
+                    if ("true".equals(res.get("success").toString())) {
+                        LOGGER.info("=======> [integralTask-----重推退款积分]" + responseMsg);
+                    } else {
+                        LOGGER.error("=======> [integralTask-----重推退款积分]" + responseMsg);
+                        HaiKongResendMsgEntity haiKongResendMsgEntity = new HaiKongResendMsgEntity();
+                        haiKongResendMsgEntity.setResponseMsg(responseMsg);
+                        haiKongResendMsgEntity.setResendNum(haiKongResendMsg.getResendNum()+1);
+                        haiKongResendMsgEntity.setResendTime(date);
+                        haiKongResendMsgEntity.setId(haiKongResendMsg.getId());
+                        haiKongResendMsgDao.updateResendMsg(haiKongResendMsgEntity);
+                    }
+
+                }
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.info("重推退款积分-----integralTask",e);
+        }
+
+    }
 }

+ 1 - 2
kmall-admin/src/main/java/com/kmall/admin/task/AliyunSmsTask.java

@@ -21,7 +21,6 @@ public class AliyunSmsTask {
      */
     @Scheduled(fixedRate = 10000)
     public void reSendFailMsg() {
-       // todo,测试屏蔽
-       // sendSmsRecordService.reSendFailMsg();
+       sendSmsRecordService.reSendFailMsg();
     }
 }

+ 25 - 0
kmall-admin/src/main/java/com/kmall/admin/task/IntegralComeBackTask.java

@@ -0,0 +1,25 @@
+package com.kmall.admin.task;
+
+
+import com.kmall.admin.service.OrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 积分回退重推定时任务,重推退款积分,最多五次
+ */
+@Component
+public class IntegralComeBackTask {
+
+    @Autowired
+    private OrderService orderService;
+
+
+
+//    @Scheduled(fixedDelay = 5000L)
+//    public void task() {
+//        orderService.integralTask();
+//    }
+}

+ 1 - 10
kmall-admin/src/main/java/com/kmall/admin/task/OrderRemindsTask.java

@@ -1,21 +1,12 @@
 package com.kmall.admin.task;
 
-import com.kmall.admin.fromcomm.service.SysUserService;
 import com.kmall.admin.service.alarm.Mall2OrderingEarlyWarningRemindsService;
-import com.kmall.admin.websocket.WebSocketServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-/**
- * 订货提醒定时器
- * @author Scott
- * @email
- * @date 2016年11月30日 下午1:34:24
- */
+
 @Component("orderRemindsTask")
 public class OrderRemindsTask {
     private Logger logger = LoggerFactory.getLogger(getClass());

+ 15 - 0
kmall-admin/src/main/resources/mybatis/mapper/HaiKongResendMsgDao.xml

@@ -11,6 +11,7 @@
 			interface_type,
 			request_msg,
 			response_msg,
+			resend_num,
 			resend_time,
 			is_valid
 		)
@@ -21,10 +22,24 @@
 			#{interfaceType},
 			#{requestMsg},
 			#{responseMsg},
+			#{resendNum},
 			sysdate(),
 			#{isValid}
 		)
 	</insert>
+
+	<select id="queryResendMsg" resultType="com.kmall.admin.entity.HaiKongResendMsgEntity">
+		select id,request_msg as requestMsg,resend_num as resendNum from haikong_resend_msg where resend_num&lt;5 limit 20
+	</select>
+
+	<update id="updateResendMsg"  parameterType="com.kmall.admin.entity.HaiKongResendMsgEntity">
+       update haikong_resend_msg
+              set
+				  response_msg=#{responseMsg},
+				  resend_num=#{resendNum},
+				  last_resend_time=#{lastResendTime}
+              where id=#{id}
+	</update>
 	 
 
 

+ 63 - 0
kmall-admin/src/main/resources/mybatis/mapper/aliyunsms/SendSmsRecordDao.xml

@@ -16,6 +16,62 @@
         <result property="updateTime" column="update_time"/>
     </resultMap>
 
+    <select id="queryList" resultType="com.kmall.admin.entity.aliyunsms.SendSmsRecord">
+        select
+        `id`,
+        `order_sn`,
+        `clear_no`,
+        `phone_numbers`,
+        `send_status`,
+        `send_fail_msg`,
+        `request_id`,
+        `biz_id`,
+        `create_time`,
+        `update_time`
+        from send_sms_record
+        WHERE 1=1
+        <if test="orderSn != null and orderSn.trim() != ''">
+            AND `order_sn` LIKE concat(#{orderSn},'%')
+        </if>
+        <if test="clearNo != null and clearNo.trim() != ''">
+            AND `clear_no` LIKE concat(#{clearNo},'%')
+        </if>
+        <if test="phoneNumbers != null and phoneNumbers.trim() != ''">
+            AND `phone_numbers` LIKE concat(#{phoneNumbers},'%')
+        </if>
+        <if test="sendStatus != null and sendStatus != ''">
+            AND `send_status` = #{sendStatus}
+        </if>
+        <choose>
+            <when test="sidx != null and sidx.trim() != ''">
+                order by ${sidx} ${order}
+            </when>
+            <otherwise>
+                order by id desc
+            </otherwise>
+        </choose>
+        <if test="offset != null and limit != null">
+            limit #{offset}, #{limit}
+        </if>
+    </select>
+
+    <select id="queryTotal" resultType="int">
+        select count(*) from send_sms_record
+        WHERE 1=1
+        <if test="orderSn != null and orderSn.trim() != ''">
+            AND `order_sn` LIKE concat(#{orderSn},'%')
+        </if>
+        <if test="clearNo != null and clearNo.trim() != ''">
+            AND `clear_no` LIKE concat(#{clearNo},'%')
+        </if>
+        <if test="phoneNumbers != null and phoneNumbers.trim() != ''">
+            AND `phone_numbers` LIKE concat(#{phoneNumbers},'%')
+        </if>
+        <if test="sendStatus != null and sendStatus != ''">
+            AND `send_status` = #{sendStatus}
+        </if>
+    </select>
+
     <insert id="save" parameterType="com.kmall.admin.entity.aliyunsms.SendSmsRecord" useGeneratedKeys="true" keyProperty="id">
         insert into send_sms_record
             (
@@ -66,4 +122,11 @@
 		where `send_status` = #{sendStatus}
 	</select>
 
+    <select id="queryByOrderSn" resultMap="sendSmsRecordMap">
+        select
+            `id`,`order_sn`,`clear_no`,`phone_numbers`,`send_status`,`send_fail_msg`,`request_id`,`biz_id`
+        from send_sms_record
+        where `order_sn` = #{orderSn}
+    </select>
+
 </mapper>

+ 87 - 0
kmall-admin/src/main/webapp/WEB-INF/page/aliyunsms/sendsmsrecord.html

@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>短信发送记录表</title>
+    #parse("sys/header.html")
+</head>
+<body>
+<div id="rrapp" v-cloak>
+	<div v-show="showList">
+        <Row :gutter="16">
+            <div class="search-group">
+                <i-col span="4">
+                    <i-input v-model="q.orderSn" @on-enter="query" placeholder="订单编号"/>
+                </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.clearNo" @on-enter="query" placeholder="清单编号"/>
+                </i-col>
+                <i-col span="4">
+                    <i-input v-model="q.phoneNumbers" @on-enter="query" placeholder="手机号码"/>
+                </i-col>
+                <i-col span="4">
+                    <i-select name="sendStatus" v-model="q.sendStatus" @change="getSendStatusSelect" placeholder="发送状态">
+                        <i-option :value="1">成功</i-option>
+                        <i-option :value="0">失败</i-option>
+                    </i-select>
+                </i-col>
+                <i-button @click="query">查询</i-button>
+                <i-button @click="reloadSearch">重置</i-button>
+            </div>
+<!--            <div class="buttons-group">-->
+<!--                #if($shiro.hasPermission("sendsmsrecord:save"))-->
+<!--                <i-button type="info" @click="add"><i class="fa fa-plus"></i>&nbsp;新增</i-button>-->
+<!--                #end-->
+<!--                #if($shiro.hasPermission("sendsmsrecord:update"))-->
+<!--                <i-button type="warning" @click="update"><i class="fa fa-pencil-square-o"></i>&nbsp;修改</i-button>-->
+<!--                #end-->
+<!--                #if($shiro.hasPermission("sendsmsrecord:delete"))-->
+<!--                <i-button type="error" @click="del"><i class="fa fa-trash-o"></i>&nbsp;删除</i-button>-->
+<!--                #end-->
+<!--            </div>-->
+        </Row>
+	    <table id="jqGrid"></table>
+	    <div id="jqGridPager"></div>
+    </div>
+
+    <Card v-show="!showList">
+        <p slot="title">{{title}}</p>
+		<i-form ref="formValidate" :model="sendSmsRecord" :rules="ruleValidate" :label-width="80">
+            <Form-item label="订单编号" prop="orderSn">
+                <i-input v-model="sendSmsRecord.orderSn" placeholder="订单编号"/>
+            </Form-item>
+            <Form-item label="清单编号" prop="clearNo">
+                <i-input v-model="sendSmsRecord.clearNo" placeholder="清单编号"/>
+            </Form-item>
+            <Form-item label="手机号码,多个以英文逗号分隔" prop="phoneNumbers">
+                <i-input v-model="sendSmsRecord.phoneNumbers" placeholder="手机号码,多个以英文逗号分隔"/>
+            </Form-item>
+            <Form-item label="发送状态,0:发送失败,1:发送成功" prop="sendStatus">
+                <i-input v-model="sendSmsRecord.sendStatus" placeholder="发送状态,0:发送失败,1:发送成功"/>
+            </Form-item>
+            <Form-item label="发送失败原因" prop="sendFailMsg">
+                <i-input v-model="sendSmsRecord.sendFailMsg" placeholder="发送失败原因"/>
+            </Form-item>
+            <Form-item label="请求id-阿里云短信接口返回" prop="requestId">
+                <i-input v-model="sendSmsRecord.requestId" placeholder="请求id-阿里云短信接口返回"/>
+            </Form-item>
+            <Form-item label="回执id-阿里云短信接口返回" prop="bizId">
+                <i-input v-model="sendSmsRecord.bizId" placeholder="回执id-阿里云短信接口返回"/>
+            </Form-item>
+            <Form-item label="创建时间" prop="createTime">
+                <i-input v-model="sendSmsRecord.createTime" placeholder="创建时间"/>
+            </Form-item>
+            <Form-item label="更新时间" prop="updateTime">
+                <i-input v-model="sendSmsRecord.updateTime" placeholder="更新时间"/>
+            </Form-item>
+            <Form-item>
+                <i-button type="primary" @click="handleSubmit('formValidate')">提交</i-button>
+                <i-button type="warning" @click="reload" style="margin-left: 8px"/>返回</i-button>
+                <i-button type="ghost" @click="handleReset('formValidate')" style="margin-left: 8px">重置</i-button>
+            </Form-item>
+        </i-form>
+	</Card>
+</div>
+
+<script src="${rc.contextPath}/js/aliyunsms/sendsmsrecord.js?_${date.systemTime}"></script>
+</body>
+</html>

+ 167 - 0
kmall-admin/src/main/webapp/js/aliyunsms/sendsmsrecord.js

@@ -0,0 +1,167 @@
+$(function () {
+    $("#jqGrid").jqGrid({
+        url: '../sendsmsrecord/list',
+        datatype: "json",
+        colModel: [
+			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
+			{label: '订单编号', name: 'orderSn', index: 'order_sn', width: 100},
+			{label: '清单编号', name: 'clearNo', index: 'clear_no', width: 100},
+			{label: '手机号码', name: 'phoneNumbers', index: 'phone_numbers', width: 100},
+			{label: '发送状态', name: 'sendStatus', index: 'send_status', width: 80,
+				formatter: function (value) {
+					if (value == 0) {
+						return "<span class=''>失败</span>";
+					} else {
+						return "<span class='success'>成功</span>";
+					}
+				}},
+			{label: '发送失败原因', name: 'sendFailMsg', index: 'send_fail_msg', width: 100},
+			{label: '请求id', name: 'requestId', index: 'request_id', width: 80},
+			{label: '回执id', name: 'bizId', index: 'biz_id', width: 80}
+			],
+		viewrecords: true,
+        height: 550,
+        rowNum: 10,
+        rowList: [10, 30, 50],
+        rownumbers: true,
+        rownumWidth: 25,
+        autowidth: true,
+        multiselect: true,
+        pager: "#jqGridPager",
+        jsonReader: {
+            root: "page.list",
+            page: "page.currPage",
+            total: "page.totalPage",
+            records: "page.totalCount"
+        },
+        prmNames: {
+            page: "page",
+            rows: "limit",
+            order: "order"
+        },
+        gridComplete: function () {
+            $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "hidden"});
+        }
+    });
+});
+
+let vm = new Vue({
+	el: '#rrapp',
+	data: {
+        showList: true,
+        title: null,
+		sendSmsRecord: {},
+		ruleValidate: {
+			name: [
+				{required: true, message: '名称不能为空', trigger: 'blur'}
+			]
+		},
+		q: {
+			orderSn: '',
+			clearNo: '',
+			phoneNumbers: '',
+			sendStatus: ''
+		}
+	},
+	methods: {
+		query: function () {
+			vm.reload();
+		},
+		add: function () {
+			vm.showList = false;
+			vm.title = "新增";
+			vm.sendSmsRecord = {};
+		},
+		update: function (event) {
+            let id = getSelectedRow();
+			if (id == null) {
+				return;
+			}
+			vm.showList = false;
+            vm.title = "修改";
+
+            vm.getInfo(id)
+		},
+		saveOrUpdate: function (event) {
+            let url = vm.sendSmsRecord.id == null ? "../sendsmsrecord/save" : "../sendsmsrecord/update";
+			$.ajax({
+				type: "POST",
+			    url: url,
+			    contentType: "application/json",
+			    data: JSON.stringify(vm.sendSmsRecord),
+                success: function (r) {
+                    if (r.code === 0) {
+                        alert('操作成功', function (index) {
+                            vm.reload();
+                        });
+                    } else {
+                        alert(r.msg);
+                    }
+                }
+			});
+		},
+		del: function (event) {
+            let ids = getSelectedRows();
+			if (ids == null){
+				return;
+			}
+
+			confirm('确定要删除选中的记录?', function () {
+				$.ajax({
+					type: "POST",
+				    url: "../sendsmsrecord/delete",
+				    contentType: "application/json",
+				    data: JSON.stringify(ids),
+				    success: function (r) {
+						if (r.code == 0) {
+							alert('操作成功', function (index) {
+								$("#jqGrid").trigger("reloadGrid");
+							});
+						} else {
+							alert(r.msg);
+						}
+					}
+				});
+			});
+		},
+		getInfo: function(id){
+			$.get("../sendsmsrecord/info/"+id, function (r) {
+                vm.sendSmsRecord = r.sendSmsRecord;
+            });
+		},
+        reloadSearch: function() {
+            vm.q = {
+				orderSn: '',
+				clearNo: '',
+				phoneNumbers: '',
+				sendStatus: ''
+            }
+            vm.reload();
+		},
+		reload: function (event) {
+			vm.showList = true;
+            let page = $("#jqGrid").jqGrid('getGridParam', 'page');
+			$("#jqGrid").jqGrid('setGridParam', {
+                postData: {
+                	'orderSn': vm.q.orderSn,
+					'clearNo': vm.q.clearNo,
+					'phoneNumbers': vm.q.phoneNumbers,
+					'sendStatus': vm.q.sendStatus
+				},
+                page: page
+            }).trigger("reloadGrid");
+            vm.handleReset('formValidate');
+		},
+        handleSubmit: function (name) {
+            handleSubmitValidate(this, name, function () {
+                vm.saveOrUpdate()
+            });
+        },
+        handleReset: function (name) {
+            handleResetForm(this, name);
+        },
+		getSendStatusSelect: function (value) {
+			vm.q.sendStatus = value;
+		}
+	}
+});

+ 9 - 9
kmall-admin/src/main/webapp/js/haikong/haikongmemberordersyncresend.js

@@ -4,19 +4,19 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: '海控会员系统会员唯一标识open_id', name: 'openId', index: 'open_id', width: 100},
-			{label: '会员手机号', name: 'phone', index: 'phone', width: 100},
+			{label: 'open_id', name: 'openId', index: 'open_id', align: 'center', width: 160},
+			{label: '会员手机号', name: 'phone', index: 'phone', align: 'center', width: 100},
 			{
-				label: '消费时间', name: 'consumeDate', index: 'consume_date', width: 100,
+				label: '消费时间', name: 'consumeDate', index: 'consume_date', align: 'center', width: 140,
 				formatter: function (value) {
 					return transDate(value, 'yyyy-MM-dd hh:mm:ss')
 				}
 			},
-			{label: '订单金额', name: 'orderAmount', index: 'order_amount', width: 100},
-			{label: '订单编号', name: 'orderNo', index: 'order_no', width: 100},
-			{label: '订单抵扣积分数量', name: 'orderScore', index: 'order_score', width: 100},
-			{label: '会员系统订单id', name: 'memberSysOrderId', index: 'member_sys_order_id', width: 100},
-			{label: '重发状态', name: 'resendStatus', index: 'resend_status', width: 100,
+			{label: '订单金额', name: 'orderAmount', index: 'order_amount', align: 'center', width: 80},
+			{label: '订单编号', name: 'orderNo', index: 'order_no', align: 'center', width: 200},
+			{label: '订单抵扣积分数量', name: 'orderScore', index: 'order_score', align: 'center', width: 120},
+			{label: '会员系统订单id', name: 'memberSysOrderId', index: 'member_sys_order_id', align: 'center', width: 120},
+			{label: '重发状态', name: 'resendStatus', index: 'resend_status', align: 'center', width: 100,
 				formatter: function (value) {
 					if (value == '0') {
 						return '等待重发';
@@ -29,7 +29,7 @@ $(function () {
 					}
 				}
 			},
-			{label: '最后一次重发时间', name: 'lastResendTime', index: 'last_resend_time', width: 100,
+			{label: '最后一次重发时间', name: 'lastResendTime', index: 'last_resend_time', align: 'center', width: 140,
 				formatter: function (value) {
 					return transDate(value, 'yyyy-MM-dd hh:mm:ss')
 				}

+ 10 - 10
kmall-admin/src/main/webapp/js/haikong/haikongmemberscorechangedetailrecord.js

@@ -4,15 +4,15 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: '订单编号', name: 'orderSn', index: 'order_sn', width: 100},
-			{label: '条码', name: 'productBarcode', index: 'product_barcode', width: 100},
-			{label: 'sku', name: 'sku', index: 'sku', width: 100},
-			{label: '零售价', name: 'retailPrice', index: 'retail_price', width: 100},
-			{label: '实际支付价', name: 'actualPrice', index: 'actual_price', width: 100},
-			{label: '销售数', name: 'sellVolume', index: 'sell_volume', width: 100},
-			{label: '分摊抵扣积分', name: 'deductionScore', index: 'deduction_score', width: 100},
-			{label: '赠送积分', name: 'giftScore', index: 'gift_score', width: 100},
-			{label: '生成规则', name: 'generateRules', index: 'generate_rules', width: 100,
+			{label: '订单编号', name: 'orderSn', index: 'order_sn', align: 'center', width: 200},
+			{label: '条码', name: 'productBarcode', index: 'product_barcode', align: 'center', width: 120},
+			{label: 'sku', name: 'sku', index: 'sku', align: 'center', width: 120},
+			{label: '零售价', name: 'retailPrice', index: 'retail_price', align: 'center', width: 100},
+			{label: '实际支付价', name: 'actualPrice', index: 'actual_price', align: 'center', width: 100},
+			{label: '销售数', name: 'sellVolume', index: 'sell_volume', align: 'center', width: 100},
+			{label: '分摊抵扣积分', name: 'deductionScore', index: 'deduction_score', align: 'center', width: 100},
+			{label: '赠送积分', name: 'giftScore', index: 'gift_score', align: 'center', width: 100},
+			{label: '生成规则', name: 'generateRules', index: 'generate_rules', align: 'center', width: 100,
 				formatter: function (value) {
 					if (value == '0') {
 						return '门店';
@@ -25,7 +25,7 @@ $(function () {
 					}
 				}
 			},
-			{label: '生成规则比例', name: 'generateRatio', index: 'generate_ratio', width: 100}
+			{label: '生成规则比例', name: 'generateRatio', index: 'generate_ratio', align: 'center', width: 100}
 			],
 		viewrecords: true,
         height: 550,

+ 8 - 8
kmall-admin/src/main/webapp/js/haikong/haikongmemberscorechangerecord.js

@@ -4,14 +4,14 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: 'openid', name: 'openId', index: 'open_id', width: 100},
-			{label: '会员积分', name: 'score', index: 'score', width: 100},
-			{label: '订单号', name: 'outBizNo', index: 'out_biz_no', width: 100},
-			{label: '积分变动描述', name: 'changeReason', index: 'change_reason', width: 100},
-			{label: '积分变动事件', name: 'changeEvent', index: 'change_event', width: 100},
-			{label: '自定义积分变动唯一标识', name: 'changeId', index: 'change_id', width: 100},
-			{label: '积分变动流水id', name: 'statementId', index: 'statement_id', width: 100},
-			{label: '重发状态', name: 'resendStatus', index: 'resend_status', width: 100,
+			{label: 'openid', name: 'openId', index: 'open_id', align: 'center', width: 140},
+			{label: '会员积分', name: 'score', index: 'score', align: 'center', width: 100},
+			{label: '订单号', name: 'outBizNo', index: 'out_biz_no', align: 'center', width: 200},
+			{label: '积分变动描述', name: 'changeReason', index: 'change_reason', align: 'center', width: 100},
+			{label: '积分变动事件', name: 'changeEvent', index: 'change_event', align: 'center', width: 100},
+			{label: '自定义积分变动唯一标识', name: 'changeId', index: 'change_id', align: 'center', width: 280},
+			{label: '积分变动流水id', name: 'statementId', index: 'statement_id', align: 'center', width: 180},
+			{label: '重发状态', name: 'resendStatus', index: 'resend_status', align: 'center', width: 100,
 				formatter: function (value) {
 					if (value == '0') {
 						return '等待重发';

+ 12 - 12
kmall-admin/src/main/webapp/js/haikong/haikongsendorderinfodetailrecord.js

@@ -4,18 +4,18 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: '订单id', name: 'orderId', index: 'order_id', width: 80},
-			{label: '图片地址', name: 'imageUrl', index: 'image_url', width: 80},
-			{label: '明细商品货号', name: 'bn', index: 'bn', width: 80},
-			{label: '条码', name: 'barcode', index: 'barcode', width: 80},
-			{label: '商品名', name: 'name', index: 'name', width: 80},
-			{label: '明细商品的成本', name: 'cost', index: 'cost', width: 80},
-			{label: '销售价', name: 'price', index: 'price', width: 80},
-			{label: '商品编码', name: 'itemcode', index: 'itemcode', width: 80},
-			{label: '明细商品总额', name: 'amount', index: 'amount', width: 80},
-			{label: '明细商品购买数量', name: 'nums', index: 'nums', width: 80},
-			{label: '是否含税', name: 'isTax', index: 'is_tax', width: 80},
-			{label: '税金', name: 'taxPrice', index: 'tax_price', width: 80}],
+			{label: '订单id', name: 'orderId', index: 'order_id', align: 'center', width: 200},
+			{label: '图片地址', name: 'imageUrl', index: 'image_url', align: 'center', width: 120},
+			{label: '明细商品货号', name: 'bn', index: 'bn', align: 'center', width: 120},
+			{label: '条码', name: 'barcode', index: 'barcode', align: 'center', width: 120},
+			{label: '商品名', name: 'name', index: 'name', align: 'center', width: 240},
+			{label: '明细商品的成本', name: 'cost', index: 'cost', align: 'center', width: 120},
+			{label: '销售价', name: 'price', index: 'price', align: 'center', width: 80},
+			{label: '商品编码', name: 'itemcode', index: 'itemcode', align: 'center', width: 120},
+			{label: '明细商品总额', name: 'amount', index: 'amount', align: 'center', width: 100},
+			{label: '明细商品购买数量', name: 'nums', index: 'nums', align: 'center', width: 100},
+			{label: '是否含税', name: 'isTax', index: 'is_tax', align: 'center', width: 80},
+			{label: '税金', name: 'taxPrice', index: 'tax_price', align: 'center', width: 80}],
 		viewrecords: true,
         height: 550,
         rowNum: 10,

+ 35 - 29
kmall-admin/src/main/webapp/js/haikong/haikongsendorderinforecord.js

@@ -4,24 +4,24 @@ $(function () {
         datatype: "json",
         colModel: [
 			{label: 'id', name: 'id', index: 'id', key: true, hidden: true},
-			{label: '订单编号', name: 'outerOrderNo', index: 'outer_order_no', width: 80},
-			{label: '支付方式', name: 'payApp', index: 'pay_app', width: 80},
-			{label: '配送方式', name: 'dlytypeCode', index: 'dlytype_code', width: 80},
-			{label: '收货人', name: 'consigneeName', index: 'consignee_name', width: 80},
-			{label: '收货地址省份', name: 'consigneeAreaProvince', index: 'consignee_area_province', width: 80},
-			{label: '收货地址城市', name: 'consigneeAreaCity', index: 'consignee_area_city', width: 80},
-			{label: '收货地址地区', name: 'consigneeAreaCounty', index: 'consignee_area_county', width: 80},
-			{label: '收货地址详细地址', name: 'consigneeAddress', index: 'consignee_address', width: 80},
-			{label: '收货人邮编', name: 'consigneeZip', index: 'consignee_zip', width: 80},
-			{label: '收货人的联系电话', name: 'consigneeTel', index: 'consignee_tel', width: 80},
-			{label: '收货人邮箱', name: 'consigneeEmail', index: 'consignee_email', width: 80},
-			{label: '收货人手机', name: 'consigneeMobile', index: 'consignee_mobile', width: 80},
-			{label: '订单商品总重量(克)', name: 'weight', index: 'weight', width: 80},
-			{label: '订单包含商品数量', name: 'quantity', index: 'quantity', width: 80},
-			{label: '订单应付金额', name: 'orderTotal', index: 'order_total', width: 80},
-			{label: '下单的平台', name: 'platform', index: 'platform', width: 80},
-			{label: '支付货币金额', name: 'money', index: 'money', width: 80},
-			{label: '付款方式', name: 'payMode', index: 'pay_mode', width: 80,
+			{label: '订单编号', name: 'outerOrderNo', index: 'outer_order_no', align: 'center', width: 200},
+			{label: '支付方式', name: 'payApp', index: 'pay_app', align: 'center', width: 80},
+			{label: '配送方式', name: 'dlytypeCode', index: 'dlytype_code', align: 'center', width: 80},
+			{label: '收货人', name: 'consigneeName', index: 'consignee_name', align: 'center', width: 60},
+			{label: '收货省份', name: 'consigneeAreaProvince', index: 'consignee_area_province', align: 'center', width: 80},
+			{label: '收货城市', name: 'consigneeAreaCity', index: 'consignee_area_city', align: 'center', width: 80},
+			{label: '收货地区', name: 'consigneeAreaCounty', index: 'consignee_area_county', align: 'center', width: 80},
+			{label: '收货详细地址', name: 'consigneeAddress', index: 'consignee_address', align: 'center', width: 200},
+			{label: '收货人邮编', name: 'consigneeZip', index: 'consignee_zip', align: 'center', width: 80},
+			{label: '收货人电话', name: 'consigneeTel', index: 'consignee_tel', align: 'center', width: 100},
+			{label: '收货人邮箱', name: 'consigneeEmail', index: 'consignee_email', align: 'center', width: 120},
+			{label: '收货人手机', name: 'consigneeMobile', index: 'consignee_mobile', align: 'center', width: 100},
+			{label: '商品总重量', name: 'weight', index: 'weight', align: 'center', width: 80},
+			{label: '商品数量', name: 'quantity', index: 'quantity', align: 'center', width: 80},
+			{label: '应付金额', name: 'orderTotal', index: 'order_total', align: 'center', width: 80},
+			{label: '下单的平台', name: 'platform', index: 'platform', align: 'center', width: 80},
+			{label: '支付金额', name: 'money', index: 'money', align: 'center', width: 80},
+			{label: '付款方式', name: 'payMode', index: 'pay_mode', align: 'center', width: 80,
 				formatter: function (value) {
 					if (value == 'online') {
 						return '在线支付';
@@ -32,11 +32,17 @@ $(function () {
 					}
 				}
 			},
-			{label: '发送给支付企业的原始请求', name: 'request', index: 'request', width: 80},
-			{label: '支付成功后回调的原始请求', name: 'response', index: 'response', width: 80},
-			{label: '支付平台流水号', name: 'outTradeNo', index: 'out_trade_no', width: 80},
-			{label: '口岸代码', name: 'seaportCode', index: 'seaport_code', width: 80},
-			{label: '跨境商品平台来源', name: 'seaportPlatform', index: 'seaport_platform', width: 80,
+			{label: '发送支付原始请求', name: 'request', index: 'request', align: 'center', width: 100},
+			{label: '支付回调原始响应', name: 'response', index: 'response', align: 'left', width: 100,
+				formatter: function (value) {
+					value = value.replace(/</g, '&lt;');
+					value = value.replace(/>/g, '&gt;');
+					return value;
+				}
+			},
+			{label: '支付平台流水号', name: 'outTradeNo', index: 'out_trade_no', align: 'center', width: 180},
+			{label: '口岸代码', name: 'seaportCode', index: 'seaport_code', align: 'center', width: 70},
+			{label: '跨境商品平台来源', name: 'seaportPlatform', index: 'seaport_platform', align: 'center', width: 120,
 				formatter: function (value) {
 					if (value == '1') {
 						return '广州跨境通保税';
@@ -45,11 +51,11 @@ $(function () {
 					}
 				}
 			},
-			{label: '订购人身份证号码', name: 'identityCard', index: 'identity_card', width: 80},
-			{label: '订购人姓名', name: 'identityName', index: 'identity_name', width: 80},
-			{label: '订购人手机号', name: 'identityMobile', index: 'identity_mobile', width: 80},
-			{label: '订单产品信息', name: 'orderProductInfo', index: 'order_product_info', width: 80},
-			{label: '重发状态', name: 'resendStatus', index: 'resend_status', width: 80,
+			{label: '订购人身份证号码', name: 'identityCard', index: 'identity_card', align: 'center', width: 160},
+			{label: '订购人姓名', name: 'identityName', index: 'identity_name', align: 'center', width: 80},
+			{label: '订购人手机号', name: 'identityMobile', index: 'identity_mobile', align: 'center', width: 100},
+			{label: '订单产品信息', name: 'orderProductInfo', index: 'order_product_info', align: 'center', width: 100},
+			{label: '重发状态', name: 'resendStatus', index: 'resend_status', align: 'center', width: 80,
 				formatter: function (value) {
 					if (value == '0') {
 						return '等待重发';
@@ -86,7 +92,7 @@ $(function () {
         gridComplete: function () {
 
         }
-    });
+	});
 });
 
 let vm = new Vue({

+ 2 - 2
kmall-admin/src/main/webapp/js/sale/sale.js

@@ -1539,7 +1539,7 @@ function getPrintContentOrder(ticket, callback) {
     var content = "<div style=\"width: 270px;font-family: 微软雅黑;font-size: 8px;\">";
     // 打印ogo
     content += "<div style=\"text-align: center;width: 100%;height: 260px;\">";
-    content += "<img src='/statics/img/cw_logo2.png' style='width: 100%;height: 100%;' />";
+    content += "<img src='/statics/img/zmhk.png' style='width: 100%;height: 100%;' />";
     content += "</div>";
     //小票头
     content += "<div style=\"text-align: center;width: 100%;font-weight:bold;font-size: 13px;\">";
@@ -1689,7 +1689,7 @@ function getPrintContentOrder(ticket, callback) {
     content +=  `<img src='${ticket.ticketMailInfo.storeImgUrl}' style='width: 100%;height: 100%;' />`;
     content += "</div>";
     content += "<div style=\"width: 100%;text-align: center;\">";
-    content += "关注CW大药房客服号,获取更多优惠信息"
+    content += "关注公众号,获取更多优惠信息"
     content += "</div>";
     content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
     content += "<div style=\"width: 100%;height: 50px;\"></div>";

二进制
kmall-admin/src/main/webapp/statics/img/zmhk.png


+ 94 - 1
sql/init/sys_table.sql

@@ -676,8 +676,101 @@ INSERT INTO `sys_menu` VALUES (906, 904, '修改', NULL, 'mall2pointsrules:updat
 INSERT INTO `sys_menu` VALUES (907, 904, '删除', NULL, 'mall2pointsrules:delete', 2, NULL, 0, 0);
 INSERT INTO `sys_menu` VALUES (908, 394, '新增', NULL, 'address:save', 2, NULL, 0, 0);
 INSERT INTO `sys_menu` VALUES (909, 394, '修改', NULL, 'address:update', 2, NULL, 0, 0);
-INSERT INTO `sys_menu` VALUES (915, 1, '接口日志', 'shop/interfacesendlog.html', 'fa fa-eye', 1, 'fa fa-file-text-o', 0, 0);
+INSERT INTO `sys_menu` VALUES (915, 942, '接口日志', 'shop/interfacesendlog.html', 'fa fa-eye', 1, 'fa fa-file-text-o', 0, 0);
 INSERT INTO `sys_menu` VALUES (916, 915, '查询', NULL, 'tinterfacesendlog:info,interfacesendlog:list', 2, NULL, 0, 0);
+INSERT INTO `sys_menu` VALUES (942, 0, '日志记录', NULL, NULL, 0, 'fa fa-file-text-o', 10, 0);
+-- 菜单SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    VALUES ('942', '会员同步消费订单记录', 'shop/haikongmemberordersyncresend.html', NULL, '1', 'fa fa-file-code-o', '6', '0');
+
+-- 按钮父菜单ID
+set @parentId = @@identity;
+
+-- 菜单对应按钮SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '查看', null, 'haikongmemberordersyncresend:list,haikongmemberordersyncresend:info', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '新增', null, 'haikongmemberordersyncresend:save', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '修改', null, 'haikongmemberordersyncresend:update', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '删除', null, 'haikongmemberordersyncresend:delete', '2', null, '6', '0';
+
+
+-- 菜单SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    VALUES ('942', '会员积分变动记录详情表', 'shop/haikongmemberscorechangedetailrecord.html', NULL, '1', 'fa fa-file-code-o', '6', '0');
+
+-- 按钮父菜单ID
+set @parentId = @@identity;
+
+-- 菜单对应按钮SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '查看', null, 'haikongmemberscorechangedetailrecord:list,haikongmemberscorechangedetailrecord:info', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '新增', null, 'haikongmemberscorechangedetailrecord:save', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '修改', null, 'haikongmemberscorechangedetailrecord:update', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '删除', null, 'haikongmemberscorechangedetailrecord:delete', '2', null, '6', '0';
+
+
+-- 菜单SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    VALUES ('942', '推送订单信息记录', 'shop/haikongsendorderinforecord.html', NULL, '1', 'fa fa-file-code-o', '6', '0');
+
+-- 按钮父菜单ID
+set @parentId = @@identity;
+
+-- 菜单对应按钮SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '查看', null, 'haikongsendorderinforecord:list,haikongsendorderinforecord:info', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '新增', null, 'haikongsendorderinforecord:save', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '修改', null, 'haikongsendorderinforecord:update', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '删除', null, 'haikongsendorderinforecord:delete', '2', null, '6', '0';
+
+
+-- 菜单SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    VALUES ('942', '会员积分变动记录表', 'shop/haikongmemberscorechangerecord.html', NULL, '1', 'fa fa-file-code-o', '6', '0');
+
+-- 按钮父菜单ID
+set @parentId = @@identity;
+
+-- 菜单对应按钮SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '查看', null, 'haikongmemberscorechangerecord:list,haikongmemberscorechangerecord:info', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '新增', null, 'haikongmemberscorechangerecord:save', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '修改', null, 'haikongmemberscorechangerecord:update', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '删除', null, 'haikongmemberscorechangerecord:delete', '2', null, '6', '0';
+
+
+-- 菜单SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    VALUES ('942', '推送订单明细记录', 'shop/haikongsendorderinfodetailrecord.html', NULL, '1', 'fa fa-file-code-o', '6', '0');
+
+-- 按钮父菜单ID
+set @parentId = @@identity;
+
+-- 菜单对应按钮SQL
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '查看', null, 'haikongsendorderinfodetailrecord:list,haikongsendorderinfodetailrecord:info', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '新增', null, 'haikongsendorderinfodetailrecord:save', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '修改', null, 'haikongsendorderinfodetailrecord:update', '2', null, '6', '0';
+INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`, `status`)
+    SELECT @parentId, '删除', null, 'haikongsendorderinfodetailrecord:delete', '2', null, '6', '0';
+
+
+
+
 
 -- ----------------------------
 -- Table structure for sys_notice