From 7c6f033b8754b07bf5c75ae8745a982d76f9abb4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 23 Sep 2022 19:28:14 +0800
Subject: [PATCH] Merge branch 'group_buy' of http://120.27.238.55:7000/r/xc-mall into group_buy

---
 src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java                |    2 
 src/main/java/cc/mrbird/febs/mall/entity/MallLeaderDefault.java                  |   19 ++
 src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java                 |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java  |   66 +++++-
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java    |   15 +
 src/main/java/cc/mrbird/febs/common/utils/ZzSmsSend.java                         |   84 ++++++++-
 src/main/resources/mapper/modules/MallOrderInfoMapper.xml                        |   78 ++++++++
 src/main/resources/mapper/modules/MallLeaderDefaultMapper.xml                    |    8 
 pom.xml                                                                          |    5 
 src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java                   |   45 ++--
 src/main/resources/mapper/modules/MallGoodsMapper.xml                            |    7 
 src/main/java/cc/mrbird/febs/mall/controller/CommonController.java               |   36 ++++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java |   89 ++++++++-
 src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java             |    5 
 src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderDefaultMapper.java            |   11 +
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java       |    2 
 src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java                    |    2 
 src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java         |    2 
 src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java               |    2 
 src/main/resources/mapper/modules/MallGoodsSkuMapper.xml                         |    7 
 20 files changed, 424 insertions(+), 63 deletions(-)

diff --git a/pom.xml b/pom.xml
index 782a844..0cb7b4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dysmsapi20170525</artifactId>
+            <version>2.0.18</version>
+        </dependency>
+        <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
             <version>${aliyun-oss.version}</version>
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index 6024226..fd186af 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -26,7 +26,7 @@
         registration.excludePathPatterns("/api/member/cashOutSetting");
         registration.excludePathPatterns("/api/leader/leaderList");
         registration.excludePathPatterns("/api/leader/leaderListInFence");
-        registration.excludePathPatterns("/api/leader/leaderTitle");
+        registration.excludePathPatterns("/api/leader/noLoginLeaderTitle");
         registration.excludePathPatterns("/api/xcxPay/wxpayCallback");
         registration.excludePathPatterns("/api/xcxPay/rechargeCallBack");
     }
diff --git a/src/main/java/cc/mrbird/febs/common/utils/ZzSmsSend.java b/src/main/java/cc/mrbird/febs/common/utils/ZzSmsSend.java
index 92ced9e..21e5422 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/ZzSmsSend.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/ZzSmsSend.java
@@ -6,7 +6,11 @@
 import cn.hutool.core.util.XmlUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
 import lombok.extern.slf4j.Slf4j;
+import com.aliyun.tea.*;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -18,6 +22,60 @@
  **/
 @Slf4j
 public class ZzSmsSend {
+
+    public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                // 您的 AccessKey ID
+                .setAccessKeyId(accessKeyId)
+                // 您的 AccessKey Secret
+                .setAccessKeySecret(accessKeySecret);
+        // 访问的域名
+        config.endpoint = "dysmsapi.aliyuncs.com";
+        return new com.aliyun.dysmsapi20170525.Client(config);
+    }
+
+    private static final String SIGNNAME = "汇达农业";
+    private static final String TEMPLATECODE = "SMS_251041117";
+    public static boolean sendALiYun(String phone,String TemplateParam){
+        com.aliyun.dysmsapi20170525.Client client = null;
+        try {
+            client = createClient("LTAI4GBuydqbJ5bTsDP97Lpd", "vbCjQtPxABWjqtUlQfzjlA0qAY96fh");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
+//                .setSignName("阿里云短信测试")
+                .setSignName(SIGNNAME)
+//                .setTemplateCode("SMS_154950909")
+                .setTemplateCode(TEMPLATECODE)
+//                .setPhoneNumbers("15274802129")
+                .setPhoneNumbers(phone)
+//                .setTemplateParam("{\"code\":\"1234\"}");
+                .setTemplateParam("{\"code\":\""+TemplateParam+"\"}");
+        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
+        try {
+            // 复制代码运行请自行打印 API 的返回值
+            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
+            log.info("短信发送:{}", sendSmsResponse);
+            JSONObject jsonObject = JSONUtil.parseObj(sendSmsResponse);
+            System.out.print(jsonObject);
+            if(200 == sendSmsResponse.getStatusCode()) {
+                return true;
+            }else{
+                return false;
+            }
+        } catch (TeaException error) {
+            // 如有需要,请打印 error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 如有需要,请打印 error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+        return false;
+
+    }
 
     private static final String URL = "http://zzsms365.com/v2sms.aspx?action=send";
 
@@ -52,17 +110,19 @@
     }
 
     public static void main(String[] args) {
-        Map<String, Object> data = new HashMap<>();
-        Long time = System.currentTimeMillis();
-        data.put("userid", USER_ID);
-        data.put("timestamp", time);
-        data.put("mobile", "15773002834");
-        String signStr = ACCOUNT + PWD + time;
-        String sign = SecureUtil.md5(signStr);
-        data.put("sign", sign);
-        data.put("content", "【HiBit】尊敬的用户,恭喜您于2010-03-25有一笔充值已成功到账,充值数量为10。");
-
-        String post = HttpUtil.post(URL, data);
-        System.out.println(post);
+//        Map<String, Object> data = new HashMap<>();
+//        Long time = System.currentTimeMillis();
+//        data.put("userid", USER_ID);
+//        data.put("timestamp", time);
+//        data.put("mobile", "15773002834");
+//        String signStr = ACCOUNT + PWD + time;
+//        String sign = SecureUtil.md5(signStr);
+//        data.put("sign", sign);
+//        data.put("content", "【HiBit】尊敬的用户,恭喜您于2010-03-25有一笔充值已成功到账,充值数量为10。");
+//
+//        String post = HttpUtil.post(URL, data);
+//        System.out.println(post);
+        boolean b = sendALiYun( "15274802129", "123456");
+        System.out.println(b);
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
index 71b604a..c019b2e 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -349,7 +349,7 @@
             orderStateDto.setGoodsName(StrUtil.sub(productNames,0,15)+"...");
             String takeUniqueCode = mallOrderInfo.getTakeUniqueCode();
             MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
-            orderStateDto.setAddressArea(StrUtil.sub(mallTeamLeader.getAddressArea(),0,20)+"...");
+            orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
             orderStateDto.setDetailAddress(StrUtil.sub(mallTeamLeader.getDetailAddress(),0,20)+"...");
             orderStateDto.setRemark("果蔬等生鲜,请尽快取货");
             orderStateDto.setLeaderPhone(mallTeamLeader.getPhone());
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
index 3354f45..fdee968 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
@@ -134,6 +134,21 @@
         return iApiMallTeamLeaderService.leaderTitle(apiLeaderTitleDto);
     }
 
+    /**
+     * 商品列表页的团长信息
+     * 有团长特征码直接显示该团长,
+     * 有经纬度,按照经纬度选择距离最近的
+     * 没有选择团长列表的第一个
+     */
+    @ApiOperation(value = "商品列表页的团长信息", notes = "商品列表页的团长信息")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiLeaderInfoVo.class)
+    })
+    @PostMapping("/noLoginLeaderTitle")
+    public FebsResponse noLoginLeaderTitle(@RequestBody ApiLeaderTitleDto apiLeaderTitleDto) {
+        return iApiMallTeamLeaderService.noLoginLeaderTitle(apiLeaderTitleDto);
+    }
+
     @ApiOperation(value = "获取团长订单角标数量")
     @GetMapping(value = "/findTeamOrderMarkCnt")
     public FebsResponse findTeamOrderMarkCnt() {
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java b/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
index 752a2bc..00c7369 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/CommonController.java
@@ -76,6 +76,42 @@
         return new FebsResponse().fail().message("验证码发送失败");
     }
 
+    @ApiOperation(value = "获取阿里云验证码接口", notes = "获取阿里云验证码接口")
+    @GetMapping(value = "/aliVerifyCode")
+    public FebsResponse aliVerifyCode(@ApiParam(name = "account", value = "手机号", required = true) @RequestParam(value = "account") String account,
+                                   @ApiParam(name = "type", value = "类型1-手机号", required = true) @RequestParam("type") String type) {
+        log.info("#账号:{}, 类型:{}#", account, type);
+
+        Integer code = (int) ((Math.random() * 9 + 1) * 100000);
+        if (StrUtil.isNotBlank(redisUtils.getString(AppContants.VERIFY_CODE_PREFIX + account))) {
+            throw new FebsException("验证码已发送");
+        }
+
+        // 发送手机验证码
+        if (AppContants.ACCOUNT_TYPE_MOBILE.equals(type)) {
+            boolean result = ZzSmsSend.sendALiYun(account, code.toString());
+            if (result) {
+                Map<String, Object> map = new HashMap<>();
+                boolean flag = redisUtils.set(AppContants.VERIFY_CODE_PREFIX + account, code, 120);
+                map.put("code", flag);
+                return new FebsResponse().success().message("验证码发送成功");
+            }
+            // 发送邮件验证码
+        } else if (AppContants.ACCOUNT_TYPE_EMAIL.equals(type)) {
+            boolean flag = SubMailSend.sendMail(account, code.toString());
+            if (flag) {
+                redisUtils.set(AppContants.VERIFY_CODE_PREFIX + account, code, 120);
+                return new FebsResponse().success().message("验证码发送成功");
+            } else {
+                return new FebsResponse().fail().message("验证码发送失败");
+            }
+        } else {
+            log.info("未定义账号类型");
+            throw new FebsException("未定义账号类型");
+        }
+        return new FebsResponse().fail().message("验证码发送失败");
+    }
+
     /**
      *  图片上传
      * @return
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallLeaderDefault.java b/src/main/java/cc/mrbird/febs/mall/entity/MallLeaderDefault.java
new file mode 100644
index 0000000..acfce88
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallLeaderDefault.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.mall.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+//默认团长
+@Data
+@TableName("mall_leader_default")
+public class MallLeaderDefault {
+    @TableId(value = "id",type = IdType.AUTO)
+    private Long id;
+
+    private Long memberId;
+
+    private String uniqueCode;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
index 4314de6..fe37826 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
@@ -50,4 +50,6 @@
     MallGoodsCommentVo findMallGoodsCommentLevelByGoodsId(@Param("id")Long id);
 
     Integer upDateStockAndVolumeByGoodsId(@Param("id")Long id,@Param("cnt")Integer cnt);
+
+    Integer updateStockAndVolumeByGoodsId(@Param("id")Long id,@Param("cnt")Integer cnt);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
index fe8ad12..41152a7 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsSkuMapper.java
@@ -21,4 +21,6 @@
     int delSkuByIds(@Param("list") List<Long> ids);
 
     Integer upDateStockAndVolumeBySkuId(@Param("id")Long id, @Param("cnt")Integer cnt);
+
+    Integer updateStockAndVolumeBySkuId(@Param("id")Long id, @Param("cnt")Integer cnt);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderDefaultMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderDefaultMapper.java
new file mode 100644
index 0000000..8016bc5
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderDefaultMapper.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallLeaderDefault;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+public interface MallLeaderDefaultMapper extends BaseMapper<MallLeaderDefault> {
+
+    MallLeaderDefault selectByMemberId(@Param("memberId")Long id);
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
index 3e789f2..540ec89 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
@@ -45,6 +45,8 @@
 
     List<MallOrderInfo> selectOrderInfoByStatus(@Param("status") Integer status);
 
+    List<MallOrderInfo> selectOrderInfoUpTime(@Param("status") Integer status);
+
     Integer selectCntDirectOrTeam(@Param("type") Integer type, @Param("inviteId") String inviteId);
 
     Integer selectCntDirect(@Param("inviteId") String inviteId);
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
index 4064e7c..5241080 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/OrderOvertimeJob.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.mall.quartz;
 
 import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.mall.entity.MallGoods;
 import cc.mrbird.febs.mall.entity.MallGoodsSku;
 import cc.mrbird.febs.mall.entity.MallOrderInfo;
@@ -45,31 +46,35 @@
     @Scheduled(cron = "0 0/5 * * * ? ")
     public void overtimeJob() {
         log.info("订单超时任务执行");
-        List<MallOrderInfo> orderList = orderInfoMapper.selectOrderInfoByStatus(OrderStatusEnum.WAIT_PAY.getValue());
+        List<MallOrderInfo> orderList = orderInfoMapper.selectOrderInfoUpTime(OrderStatusEnum.WAIT_PAY.getValue());
         if (CollUtil.isNotEmpty(orderList)) {
             for (MallOrderInfo orderInfo : orderList) {
-                long subTime = DateUtil.between(orderInfo.getOrderTime(), new Date(), DateUnit.MINUTE, false);
+                //更新订单状态
+                orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
+                orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
+                orderInfoMapper.updateById(orderInfo);
 
-                if (subTime > 15) {
-                    orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
-                    orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
-                    orderInfoMapper.updateById(orderInfo);
+                List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
+                if(CollUtil.isNotEmpty(mallOrderItemList)){
+                    for(MallOrderItem mallOrderItem : mallOrderItemList){
+                        MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+                        if (sku == null) {
+                            throw new FebsException("购买商品或sku不存在");
+                        }
 
-                    List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
-                    if (CollUtil.isNotEmpty(mallOrderItemList)) {
-                        for (MallOrderItem mallOrderItem : mallOrderItemList) {
-                            Long goodsId = mallOrderItem.getGoodsId();
-                            Long skuId = mallOrderItem.getSkuId();
-                            Integer cnt = mallOrderItem.getCnt();
-                            MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
-                            mallGoods.setVolume(mallGoods.getVolume() - cnt);
-                            mallGoods.setStock(mallGoods.getStock() + cnt);
-                            mallGoodsMapper.updateById(mallGoods);
+//                        if (sku.getStock() < mallOrderItem.getCnt()) {
+//                            throw new FebsException(sku.getSkuName() + "库存不足");
+//                        }
 
-                            MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
-                            mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt);
-                            mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt);
-                            mallGoodsSkuMapper.updateById(mallGoodsSku);
+                        MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                        Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+                        if(1 != goodsResult){
+                            throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                        }
+
+                        Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+                        if(1 != skuResult){
+                            throw new FebsException(sku.getSkuName() + "库存不足");
                         }
                     }
                 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
index e9d495d..585a1d5 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallTeamLeaderService.java
@@ -37,4 +37,6 @@
     List<ApiOrderProfitVo> findLeaderProfitListInPage(ApiOrderProfitDto apiOrderProfitDto);
 
     FebsResponse findSomeLeaderListInPage(ApiLeaderListDto apiLeaderListDto);
+
+    FebsResponse noLoginLeaderTitle(ApiLeaderTitleDto apiLeaderTitleDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index 5a34903..2c4106a 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -100,6 +100,9 @@
 
         //订单范围内才允许下单
         MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
+        if(ObjectUtil.isEmpty(address)){
+            throw new FebsException("请重新选择提货人信息");
+        }
 //        MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
 //        if(ObjectUtil.isNotEmpty(mallElectronicFence)){
 //            String inStr = iMallElectronicFenceService.fenceToLocation(mallElectronicFence.getGKey(),
@@ -260,23 +263,34 @@
         orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
         orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
         this.baseMapper.updateById(orderInfo);
-        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
+
+
+
+        List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
         if(CollUtil.isNotEmpty(mallOrderItemList)){
             for(MallOrderItem mallOrderItem : mallOrderItemList){
-                Long goodsId = mallOrderItem.getGoodsId();
-                Long skuId = mallOrderItem.getSkuId();
-                Integer cnt = mallOrderItem.getCnt();
-                MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
-                mallGoods.setVolume(mallGoods.getVolume() - cnt);
-                mallGoods.setStock(mallGoods.getStock() + cnt);
-                mallGoodsMapper.updateById(mallGoods);
+                MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+                if (sku == null) {
+                    throw new FebsException("购买商品或sku不存在");
+                }
 
-                MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
-                mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt);
-                mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt);
-                mallGoodsSkuMapper.updateById(mallGoodsSku);
+                if (sku.getStock() < mallOrderItem.getCnt()) {
+                    throw new FebsException(sku.getSkuName() + "库存不足");
+                }
+
+                MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+                if(1 != goodsResult){
+                    throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                }
+
+                Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+                if(1 != skuResult){
+                    throw new FebsException(sku.getSkuName() + "库存不足");
+                }
             }
         }
+
     }
 
     /**
@@ -483,7 +497,8 @@
         IPage<MallOrderInfo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
 
         orderListDto.setMemberId(member.getId());
-        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+//        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+        IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiOrderListInPage(page, orderListDto);
         if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) {
             mallOrderInfos.getRecords().forEach(item -> {
                 item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId()));
@@ -688,6 +703,31 @@
             orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
             orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
             this.baseMapper.updateById(orderInfo);
+
+            List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
+            if(CollUtil.isNotEmpty(mallOrderItemList)){
+                for(MallOrderItem mallOrderItem : mallOrderItemList){
+                    MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+                    if (sku == null) {
+                        throw new FebsException("购买商品或sku不存在");
+                    }
+
+//                    if (sku.getStock() < mallOrderItem.getCnt()) {
+//                        throw new FebsException(sku.getSkuName() + "库存不足");
+//                    }
+
+                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+                    Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+                    if(1 != goodsResult){
+                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+                    }
+
+                    Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+                    if(1 != skuResult){
+                        throw new FebsException(sku.getSkuName() + "库存不足");
+                    }
+                }
+            }
         }
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
index 738bc5c..cdc13c5 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -64,6 +64,7 @@
     private final MallGoodsSkuMapper mallGoodsSkuMapper;
     private final MallElectronicFenceMapper mallElectronicFenceMapper;
     private final IMallElectronicFenceServiceImpl iMallElectronicFenceService;
+    private final MallLeaderDefaultMapper mallLeaderDefaultMapper;
 
     @Override
     @Transactional
@@ -154,6 +155,7 @@
 
     @Override
     public FebsResponse getApiLeaderInfoVoById(Long id) {
+        MallMember member = LoginUserUtil.getLoginUser();
         MallTeamLeader mallTeamLeader = this.baseMapper.selectById(id);
         ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo();
         apiLeaderInfoVo.setId(mallTeamLeader.getId());
@@ -171,6 +173,14 @@
             String longLatStr = mallElectronicFence.getLonglatiarr();
             apiLeaderInfoVo.setLonglatiarr(longLatStr);
         }
+        MallLeaderDefault mallLeaderDefault1 = mallLeaderDefaultMapper.selectByMemberId(member.getId());
+        if(ObjectUtil.isNotEmpty(mallLeaderDefault1)){
+            mallLeaderDefaultMapper.deleteById(mallLeaderDefaultMapper.selectByMemberId(member.getId()).getId());
+        }
+        MallLeaderDefault mallLeaderDefault = new MallLeaderDefault();
+        mallLeaderDefault.setMemberId(member.getId());
+        mallLeaderDefault.setUniqueCode(mallTeamLeader.getUniqueCode());
+        mallLeaderDefaultMapper.insert(mallLeaderDefault);
         return new FebsResponse().success().data(apiLeaderInfoVo);
     }
 
@@ -222,7 +232,7 @@
             orderStateDto.setGoodsName(StrUtil.sub(productNames,0,20)+"...");
             String takeUniqueCode = mallOrderInfo.getTakeUniqueCode();
             MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
-            orderStateDto.setAddressArea(StrUtil.sub(mallTeamLeader.getAddressArea(),0,20)+"...");
+            orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
             orderStateDto.setDetailAddress(StrUtil.sub(mallTeamLeader.getDetailAddress(),0,20)+"...");
             orderStateDto.setLeaderPhone(mallTeamLeader.getPhone());
             orderStateDto.setOpenId(mallMemberMapper.selectById(mallOrderInfo.getMemberId()).getOpenId());
@@ -279,20 +289,29 @@
         Double latitude = apiLeaderTitleDto.getLatitude() == null ? 0 : apiLeaderTitleDto.getLatitude();
         ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo();
         MallTeamLeader mallTeamLeader = new MallTeamLeader();
-        //特征码扫码
-        if(StrUtil.isNotEmpty(uniqueCode)){
-            mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode);
-
-        //经纬度定位
-        }else if(longitude != 0 && latitude != 0){
-            mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude);
-        //直接进入,默认选择列表第一个
+        MallMember member = LoginUserUtil.getLoginUser();
+        if(ObjectUtil.isNotEmpty(member)){
+            MallLeaderDefault mallLeaderDefault = mallLeaderDefaultMapper.selectByMemberId(member.getId());
+            if(ObjectUtil.isNotEmpty(mallLeaderDefault)){
+                mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(mallLeaderDefault.getUniqueCode());
+            }
         }else{
-            List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList();
-            if(CollUtil.isNotEmpty(mallTeamLeaderList)){
-                mallTeamLeader = mallTeamLeaderList.get(0);
+            //特征码扫码
+            if(StrUtil.isNotEmpty(uniqueCode)){
+                mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode);
+
+                //经纬度定位
+            }else if(longitude != 0 && latitude != 0){
+                mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude);
+                //直接进入,默认选择列表第一个
+            }else{
+                List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList();
+                if(CollUtil.isNotEmpty(mallTeamLeaderList)){
+                    mallTeamLeader = mallTeamLeaderList.get(0);
+                }
             }
         }
+
         if(ObjectUtil.isNotEmpty(mallTeamLeader)){
             apiLeaderInfoVo.setId(mallTeamLeader.getId());
             apiLeaderInfoVo.setName(mallTeamLeader.getName());
@@ -543,4 +562,50 @@
         return new FebsResponse().success().data(apiLeaderListVos);
     }
 
+    @Override
+    public FebsResponse noLoginLeaderTitle(ApiLeaderTitleDto apiLeaderTitleDto) {
+        String uniqueCode = apiLeaderTitleDto.getUniqueCode();
+        Double longitude = apiLeaderTitleDto.getLongitude() == null ? 0 : apiLeaderTitleDto.getLongitude();
+        Double latitude = apiLeaderTitleDto.getLatitude() == null ? 0 : apiLeaderTitleDto.getLatitude();
+        ApiLeaderInfoVo apiLeaderInfoVo = new ApiLeaderInfoVo();
+        MallTeamLeader mallTeamLeader = new MallTeamLeader();
+        //特征码扫码
+        if(StrUtil.isNotEmpty(uniqueCode)){
+            mallTeamLeader = this.baseMapper.selectLeaderByUniqueCode(uniqueCode);
+
+            //经纬度定位
+        }else if(longitude != 0 && latitude != 0){
+            mallTeamLeader = this.baseMapper.selectLeaderByLonAndLat(longitude,latitude);
+            //直接进入,默认选择列表第一个
+        }else{
+            List<MallTeamLeader> mallTeamLeaderList = this.baseMapper.getMallTeamLeaderList();
+            if(CollUtil.isNotEmpty(mallTeamLeaderList)){
+                mallTeamLeader = mallTeamLeaderList.get(0);
+            }
+        }
+
+        if(ObjectUtil.isNotEmpty(mallTeamLeader)){
+            apiLeaderInfoVo.setId(mallTeamLeader.getId());
+            apiLeaderInfoVo.setName(mallTeamLeader.getName());
+            apiLeaderInfoVo.setPhone(mallTeamLeader.getPhone());
+            apiLeaderInfoVo.setAddressPic(mallTeamLeader.getAddressPic());
+            apiLeaderInfoVo.setUniqueCode(mallTeamLeader.getUniqueCode());
+            apiLeaderInfoVo.setProvince(mallTeamLeader.getProvince());
+            apiLeaderInfoVo.setCity(mallTeamLeader.getCity());
+            apiLeaderInfoVo.setTownship(mallTeamLeader.getTownship());
+            apiLeaderInfoVo.setDetailAddress(mallTeamLeader.getDetailAddress());
+            apiLeaderInfoVo.setAddressArea(mallTeamLeader.getAddressArea());
+            MallElectronicFence mallElectronicFence = mallElectronicFenceMapper.selectByTeamLeaderCode(mallTeamLeader.getUniqueCode());
+            if(ObjectUtil.isNotEmpty(mallElectronicFence)){
+                apiLeaderInfoVo.setLonglatiarr(mallElectronicFence.getLonglatiarr());
+            }
+            apiLeaderInfoVo.setLongitude(mallTeamLeader.getLongitude());
+            apiLeaderInfoVo.setLatitude(mallTeamLeader.getLatitude());
+        }
+        if(ObjectUtil.isEmpty(apiLeaderInfoVo)){
+            return new FebsResponse().success();
+        }
+        return new FebsResponse().success().data(apiLeaderInfoVo);
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java
index 1645921..7897586 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/XcxPayServiceImpl.java
@@ -225,10 +225,9 @@
         orderStateMsgVo.setTemplate_id(info.getTemplateId());//订阅消息模板id
         orderStateMsgVo.setPage(info.getPage());
         Map<String, WxTemplateData> m = new HashMap<>(4);
-        m.put("thing4.DATA", new WxTemplateData(info.getAddressArea()));
-        m.put("phone_number14.DATA", new WxTemplateData(info.getLeaderPhone()));
+        m.put("thing19.DATA", new WxTemplateData(info.getAddressArea()));
+        m.put("phone_number18.DATA", new WxTemplateData(info.getLeaderPhone()));
         m.put("thing3.DATA", new WxTemplateData(info.getGoodsName()));
-        m.put("thing5.DATA", new WxTemplateData(info.getDetailAddress()));
         m.put("thing15.DATA", new WxTemplateData(info.getRemark()));
         orderStateMsgVo.setData(m);
         String s = JSONUtil.toJsonStr(orderStateMsgVo);
diff --git a/src/main/resources/mapper/modules/MallGoodsMapper.xml b/src/main/resources/mapper/modules/MallGoodsMapper.xml
index 697cbed..6f5ee74 100644
--- a/src/main/resources/mapper/modules/MallGoodsMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -271,4 +271,11 @@
         where id=#{id} and  stock - #{cnt} <![CDATA[ >= ]]> 0
     </update>
 
+    <update id="updateStockAndVolumeByGoodsId">
+        update mall_goods
+        set stock = stock + #{cnt},
+            volume = volume - #{cnt}
+        where id=#{id} and  volume - #{cnt} <![CDATA[ >= ]]> 0
+    </update>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
index 49deb04..2757dce 100644
--- a/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
+++ b/src/main/resources/mapper/modules/MallGoodsSkuMapper.xml
@@ -45,4 +45,11 @@
             sku_volume = sku_volume + #{cnt}
         where id=#{id} and  stock - #{cnt} <![CDATA[ >= ]]> 0
     </update>
+
+    <update id="updateStockAndVolumeBySkuId">
+        update mall_goods_sku
+        set stock = stock + #{cnt},
+            sku_volume = sku_volume - #{cnt}
+        where id=#{id} and  sku_volume - #{cnt} <![CDATA[ >= ]]> 0
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallLeaderDefaultMapper.xml b/src/main/resources/mapper/modules/MallLeaderDefaultMapper.xml
new file mode 100644
index 0000000..afc48a7
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallLeaderDefaultMapper.xml
@@ -0,0 +1,8 @@
+<?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="cc.mrbird.febs.mall.mapper.MallLeaderDefaultMapper">
+
+    <select id="selectByMemberId" resultType="cc.mrbird.febs.mall.entity.MallLeaderDefault">
+        select * from mall_leader_default where member_id=#{memberId}
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
index 1c02bb4..9babf59 100644
--- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
+++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -71,7 +71,6 @@
         left join mall_member b on a.member_id = b.id
         left join mall_team_leader c on a.take_unique_code = c.unique_code
         <where>
-            a.del_flag=2
             <if test="record != null">
                 <if test="record.payResult != null and record.payResult != ''">
                     and a.pay_result = #{record.payResult}
@@ -259,6 +258,10 @@
         select * from mall_order_info where status=#{status}
     </select>
 
+    <select id="selectOrderInfoUpTime" resultType="cc.mrbird.febs.mall.entity.MallOrderInfo">
+        select * from mall_order_info where status=#{status} and now() > date_add(order_time,interval 15 minute)
+    </select>
+
     <select id="selectCntDirectOrTeam" resultType="java.lang.Integer">
         select IFNULL(count(1), 0) from mall_order_info a
           inner join mall_member b on a.member_id=b.ID
@@ -366,4 +369,77 @@
         select * from mall_order_info where status=#{status}
          and date_format(pay_time, '%Y-%m-%d') = date_format(#{paytime}, '%Y-%m-%d')
     </select>
+
+    <resultMap id="NewOrderInfoMap" type="cc.mrbird.febs.mall.entity.MallOrderInfo">
+        <id column="id" property="id" />
+        <result column="order_no" property="orderNo" />
+        <result column="member_id" property="memberId" />
+        <result column="order_time" property="orderTime" />
+        <result column="pay_time" property="payTime" />
+        <result column="amount" property="amount" />
+        <result column="pay_method" property="payMethod" />
+        <result column="pay_order_no" property="payOrderNo" />
+        <result column="pay_result" property="payResult" />
+        <result column="status" property="status" />
+        <result column="cancel_type" property="cancelType" />
+        <result column="name" property="name" />
+        <result column="phone" property="phone" />
+        <result column="address" property="address" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <result column="order_type" property="orderType" />
+        <result column="comment_state" property="commentState" />
+        <result column="carriage" property="carriage" />
+        <result column="remark" property="remark" />
+        <result column="take_code" property="takeCode" />
+        <result column="take_unique_code" property="takeUniqueCode" />
+        <result column="delivery_state" property="deliveryState" />
+        <result column="is_home" property="isHome" />
+        <result column="del_flag" property="delFlag" />
+        <result column="leader_name" property="leaderName" />
+        <result column="leader_phone" property="leaderPhone" />
+        <result column="address_pic" property="addressPic" />
+        <result column="address_area" property="addressArea" />
+        <result column="province" property="province" />
+        <result column="leaderLongitude" property="leaderLongitude" />
+        <result column="leaderLatitude" property="leaderLatitude" />
+        <result column="province" property="province" />
+        <result column="city" property="city" />
+        <result column="township" property="township" />
+        <result column="detail_address" property="detailAddress" />
+    </resultMap>
+
+    <select id="selectNewApiOrderListInPage" resultMap="NewOrderInfoMap">
+        select
+        a.*,
+        c.name leader_name,
+        c.phone leader_phone,
+        c.address_pic,
+        c.address_area,
+        c.province,
+        c.city,
+        c.township,
+        c.detail_address
+        from mall_order_info a
+        inner join mall_team_leader c on a.take_unique_code=c.unique_code
+        <where>
+            a.del_flag=2
+            <if test="record.memberId != null">
+                and a.member_id=#{record.memberId}
+            </if>
+            <if test="record.status == 4 and record.status != 0">
+                and a.status = 4
+            </if>
+            <if test="record.status != 4 and record.status != 0 and record.status != 5">
+                and a.status = #{record.status}
+            </if>
+            <if test="record.status == 5">
+                and a.status = 7 or b.state in (2,3)
+            </if>
+            <if test="record.orderType != null">
+                and a.order_type=#{record.orderType}
+            </if>
+        </where>
+        order by a.created_time desc
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1