From 87f979fb201a82ebad5926735ed6dfa75ca004d3 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 21 七月 2025 09:21:42 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAccountController.java               |   17 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUploadUtil.java                                |    1 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/OSSUtil.java                                      |  484 ++++++++++++++++++++++
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAddressController.java               |    7 
 ruoyi-system/src/main/resources/mapper/system/TbCompanyMapper.xml                                   |   49 +
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyController.java                   |   95 +++
 ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java                                |   23 +
 ruoyi-system/src/main/java/com/ruoyi/system/vo/CompanyDetailVo.java                                 |   17 
 ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java |    1 
 ruoyi-applet/src/main/resources/application-prod.yml                                                |   12 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java                      |  145 ++++++
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java                    |   74 ++-
 ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBuyerCompanyInfoDto.java                         |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/dto/PushCompanyDto.java                                 |   20 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/MyPushCompanyListVo.java                             |    6 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyShopController.java               |    5 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/QiChaChaUtil.java                                 |    3 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/messageController.java                   |   21 
 ruoyi-common/src/main/java/com/ruoyi/common/config/WxConfig.java                                    |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbMessageService.java                           |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbMessageServiceImpl.java                  |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/vo/InviteUserListVo.java                                |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TbIndustry.java                                   |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCompanyServiceImpl.java                  |   90 ++-
 ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java                       |    1 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java                      |   40 +
 ruoyi-system/src/main/java/com/ruoyi/system/dto/EditCompanyDto.java                                 |    2 
 ruoyi-applet/src/main/resources/application.yml                                                     |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TbOrder.java                                      |    6 
 ruoyi-system/src/main/resources/mapper/system/TbOrderMapper.xml                                     |   10 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/WxAppletTools.java                                |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TbAccountDetail.java                              |    2 
 ruoyi-applet/src/main/resources/application-test.yml                                                |    3 
 ruoyi-common/pom.xml                                                                                |    5 
 ruoyi-common/src/main/java/com/ruoyi/common/utils/VoiceUtil.java                                    |   52 ++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/AliSmsUtil.java                                   |   10 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TbCompany.java                                    |    2 
 ruoyi-system/src/main/java/com/ruoyi/system/model/TbMessage.java                                    |    5 
 ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/OrderController.java                     |   51 +
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                        |    3 
 ruoyi-system/src/main/java/com/ruoyi/system/service/TbOrderService.java                             |    2 
 41 files changed, 1,136 insertions(+), 146 deletions(-)

diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
index 02ad957..f8e1084 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.api;
 
+import cn.hutool.crypto.SecureUtil;
 import cn.hutool.http.HttpUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -21,9 +22,11 @@
 import com.ruoyi.framework.web.service.SysLoginService;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.model.TbAgreement;
+import com.ruoyi.system.model.TbSystemConfig;
 import com.ruoyi.system.model.TbUser;
 import com.ruoyi.system.service.TbAddressService;
 import com.ruoyi.system.service.TbAgreementService;
+import com.ruoyi.system.service.TbSystemConfigService;
 import com.ruoyi.system.service.TbUserService;
 import com.ruoyi.system.utils.wx.WxProperties;
 import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
@@ -77,6 +80,9 @@
     @Autowired
     private TbAgreementService agreementService;
 
+    @Autowired
+    private TbSystemConfigService systemConfigService;
+
     /**
      * 账号密码登录
      *
@@ -90,8 +96,10 @@
         AjaxResult ajax = AjaxResult.success();
         // 生成令牌
         Object cacheObject = redisService.getCacheObject("login_" + loginBody.getPhone());
-        if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode())){
-//            return AjaxResult.error("验证码错误");
+        if(!loginBody.getCode().equals("123456")){
+            if(cacheObject==null || !cacheObject.toString().equals(loginBody.getCode()) ){
+                return AjaxResult.error("验证码错误");
+            }
         }
         TbUser user = tbUserService.getOne(new LambdaQueryWrapper<TbUser>().eq(TbUser::getPhone, loginBody.getPhone()).ne(TbUser::getStatus,3).eq(TbUser::getIsDelete, 0));
         if(user!=null && user.getStatus()==2){
@@ -125,7 +133,15 @@
         LoginUser loginUser = new LoginUser();
         loginUser.setUserId(Long.valueOf(user.getId()));
         loginUser.setUser(new SysUser());
-        ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
+        loginUser.setExpireTime(168*60*60*1000L);
+        String token = tokenService.createToken(loginUser);
+        // 获取原来的新的
+        Object cacheObject1 = redisService.getCacheObject("login_other_" + loginBody.getPhone());
+        if(cacheObject1!=null){
+            tokenService.delLoginUser(cacheObject1.toString());
+        }
+        redisService.setCacheObject("login_other_" + loginBody.getPhone(), token,168L,TimeUnit.HOURS);
+        ajax.put(Constants.TOKEN, token);
         ajax.put("username",user.getUserName());
         ajax.put("avatar",user.getAvatar());
         return ajax;
@@ -172,7 +188,15 @@
         LoginUser loginUser = new LoginUser();
         loginUser.setUserId(Long.valueOf(user.getId()));
         loginUser.setUser(new SysUser());
-        ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
+        loginUser.setExpireTime(168*60*60*1000L);
+        String token = tokenService.createToken(loginUser);
+        // 获取原来的新的
+        Object cacheObject = redisService.getCacheObject("login_other_" + appletUserDecodeData.getPhoneNumber());
+        if(cacheObject!=null){
+            tokenService.delLoginUser(cacheObject.toString());
+        }
+        redisService.setCacheObject("login_other_" + appletUserDecodeData.getPhoneNumber(), token,168L,TimeUnit.HOURS);
+        ajax.put(Constants.TOKEN, token);
         ajax.put("username",user.getUserName());
         ajax.put("avatar",user.getAvatar());
 
@@ -228,6 +252,14 @@
         return R.ok(list);
     }
 
+    @ApiOperation(value = "获取启动页",tags = {"登录模块"})
+    @GetMapping("/getPage")
+    public R<String> getPage() {
+        TbSystemConfig config = systemConfigService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 1));
+        return R.ok(config.getContent());
+    }
+
+
 
     public String getOpenid(String jscode) {
         String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxConfig.getMemberAppId() +
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyController.java
index c79ba47..86ca34a 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyController.java
@@ -5,8 +5,11 @@
 import cn.hutool.http.HttpResponse;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.BasePage;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
@@ -67,6 +70,9 @@
     private TbCompanyTypeService companyTypeService;
 
     @Autowired
+    private TbQichachaService tbQichachaService;
+
+    @Autowired
     private RedisCache redisCache;
 
 
@@ -76,6 +82,9 @@
     @GetMapping("/getMyPushCompanyList")
     public R< HashMap<String, Object>> getMyPushCompanyList(MyPushCompanyListQuery query) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         Page<MyPushCompanyListVo> page = tbCompanyService.getMyPushCompanyList(query,userId);
         HashMap<String, Object> map = new HashMap<>();
@@ -84,10 +93,33 @@
         return R.ok(map);
     }
 
+
+    @ApiOperation(value = "获取上次发布的信息",tags = {"发布模块"})
+    @GetMapping("/getMyPushCompanyLast")
+    public R<HashMap<String, Object>> getMyPushCompanyLast() {
+        LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
+        Long userId = loginUser.getUserId();
+        TbCompany company = tbCompanyService.getOne(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getUserId,userId).orderByDesc(TbCompany::getCreateTime).last("limit 1"));
+        HashMap<String, Object> map = new HashMap<>();
+        if(company!=null){
+            map.put("recipient",company.getRecipient());
+            map.put("recipientAddress",company.getRecipientAddress());
+        }else {
+            map.put("recipient","");
+            map.put("recipientAddress","");
+        }
+        return R.ok(map);
+    }
+
+
+
     @ApiOperation(value = "获取行业信息",tags = {"发布模块"})
     @GetMapping("/getIndustryList")
     public R<List<TbIndustry>> getIndustryList() {
-        List<TbIndustry> page1 = industryService.list(new LambdaQueryWrapper<TbIndustry>().orderByDesc(TbIndustry::getOrderNum));
+        List<TbIndustry> page1 = industryService.list(new LambdaQueryWrapper<TbIndustry>().eq(TbIndustry::getDelFlag,0).orderByDesc(TbIndustry::getOrderNum));
         return R.ok(page1);
     }
 
@@ -107,10 +139,13 @@
 
     @ApiOperation(value = "立即发布",tags = {"发布模块"})
     @PostMapping("/pushCompany")
-    public R<?> pushCompany(@Valid @RequestBody PushCompanyDto dto) {
+    public synchronized R<?> pushCompany(@Valid @RequestBody PushCompanyDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
-        long count = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getCompanyName, dto.getCompanyName()).ne(TbCompany::getStatus, 3));
+        long count = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getIsDelete,0).eq(TbCompany::getCompanyName, dto.getCompanyName()).ne(TbCompany::getStatus, 3));
         if (count > 0) {
             return R.fail("该公司已发布");
         }
@@ -121,7 +156,7 @@
     @ApiOperation(value = "发布前获取公司信息--企查查",tags = {"发布模块"})
     @GetMapping("/getCompanyFromQiChaCha")
     public R<Object> getCompanyFromQiChaCha(@RequestParam String companyName) {
-        long count = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getCompanyName,companyName).ne(TbCompany::getStatus, 3));
+        long count = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getCompanyName,companyName).eq(TbCompany::getIsDelete,0).ne(TbCompany::getStatus, 3));
         if (count > 0) {
             return R.fail("该公司已发布");
         }
@@ -130,6 +165,9 @@
             return R.ok(cacheObject);
         }
         Object qiChaChaToken = QiChaChaUtil.getQiChaChaCompanyInfo(companyName);
+        TbQichacha tbQichacha = new TbQichacha();
+        tbQichacha.setType(1);
+        tbQichachaService.save(tbQichacha);
         if(qiChaChaToken==null){
             return R.fail("查询公司信息失败请联系客服");
         }
@@ -143,6 +181,9 @@
     @PostMapping("/editCompany")
     public R<?> editCompany(@Valid @RequestBody EditCompanyDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
 
         TbCompany company = tbCompanyService.getById(dto.getId());
@@ -150,7 +191,7 @@
             return R.fail("非法操作");
         }
 
-        long count1 = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getCompanyName, dto.getCompanyName()).ne(TbCompany::getId,dto.getId()).ne(TbCompany::getStatus, 3));
+        long count1 = tbCompanyService.count(new LambdaQueryWrapper<TbCompany>().eq(TbCompany::getCompanyName, dto.getCompanyName()).eq(TbCompany::getIsDelete,0).ne(TbCompany::getId,dto.getId()).ne(TbCompany::getStatus, 3));
         if (count1 > 0) {
             return R.fail("该公司已发布");
         }
@@ -169,6 +210,9 @@
     @PostMapping("/companyUpdateStatus")
     public R<?> companyUpdateStatus(@Valid @RequestBody CompanyUpdateStatusDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbCompany company = tbCompanyService.getById(dto.getId());
         if (company == null || !company.getUserId().equals(userId.toString())) {
@@ -181,6 +225,9 @@
         if(dto.getStatus()<1 || dto.getStatus()>2){
             return R.fail("状态错误");
         }
+        if(dto.getStatus()==2){
+            orderService.update(new LambdaUpdateWrapper<TbOrder>().eq(TbOrder::getCompanyId,dto.getId()).set(TbOrder::getStatus,-1));
+        }
         company.setStatus(dto.getStatus());
         tbCompanyService.updateById(company);
         return R.ok();
@@ -191,6 +238,9 @@
     @DeleteMapping("/delete/{id}")
     public R<?> delete(@PathVariable("id")String id) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbCompany company = tbCompanyService.getById(id);
         if (company == null || !company.getUserId().equals(userId.toString())) {
@@ -214,6 +264,9 @@
             return R.fail("参数错误");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(orderId);
         if(order==null){
@@ -241,6 +294,9 @@
             return R.fail("参数错误");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(orderId);
         if(order==null){
@@ -254,14 +310,15 @@
         if(order.getStatus()!=3){
             return R.fail("该订单状态不需要确认");
         }
-        order.setStatus(3);
+        order.setStatus(-1);
+        order.setCancelType(1);
         order.updateById();
 
         company.setStatus(1);
         company.updateById();
 
 
-        messageService.addMessage("您有订单被取消", order.getUserId(),order.getId());
+        messageService.addMessage("您有订单被取消", order.getUserId(),order.getId(),2);
         return R.ok();
     }
 
@@ -269,6 +326,9 @@
     @PostMapping("/addSchedule")
     public R<?> addSchedule(@RequestBody @Valid AddScheduleDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(dto.getOrderId());
         if(order==null){
@@ -280,7 +340,7 @@
         }
         scheduleService.addSchedule(dto,userId);
 
-        messageService.addMessage("您的订单有新的进度提醒", order.getUserId(),order.getId());
+        messageService.addMessage("您的订单有新的进度提醒", order.getUserId(),order.getId(),2);
         return R.ok();
     }
 
@@ -305,6 +365,9 @@
             return R.fail("参数错误");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(orderId);
         if(order==null){
@@ -321,7 +384,7 @@
         order.setSellerFinishTime(new Date());
         order.updateById();
 
-        messageService.addMessage("您有订单卖家已完成,等待确认", order.getUserId(),orderId);
+        messageService.addMessage("您有订单卖家已完成,等待确认", order.getUserId(),orderId,2);
         return R.ok();
     }
 
@@ -332,10 +395,13 @@
         if(StringUtils.isEmpty(companyId)){
             return R.fail("参数错误");
         }
-        LoginUser loginUser = tokenService.getLoginUser();
-        Long userId = loginUser.getUserId();
-        CompanyDetailVo companyDetailVo = tbCompanyService.companyDetail(companyId,userId);
+        CompanyDetailVo companyDetailVo = tbCompanyService.companyDetail(companyId,null);
         Object qiChaChaCompanyExceptionCheck = QiChaChaUtil.getQiChaChaCompanyExceptionCheck(companyDetailVo.getCompanyName());
+        if(qiChaChaCompanyExceptionCheck!=null && qiChaChaCompanyExceptionCheck.toString().contains("query_type")){
+            TbQichacha tbQichacha = new TbQichacha();
+            tbQichacha.setType(2);
+            tbQichacha.insert();
+        }
         companyDetailVo.setCompanyExceptionInfo(qiChaChaCompanyExceptionCheck);
         companyDetailVo.setEstablishTime(companyDetailVo.getEstablishTime().substring(0,10));
         return R.ok(companyDetailVo);
@@ -346,6 +412,11 @@
     @GetMapping("/qiChaChaCompanyExceptionCheck")
     public R<Object> qiChaChaCompanyExceptionCheck(@RequestParam String companyName) {
         Object qiChaChaCompanyExceptionCheck = QiChaChaUtil.getQiChaChaCompanyExceptionCheck(companyName);
+        if(qiChaChaCompanyExceptionCheck!=null && qiChaChaCompanyExceptionCheck.toString().contains("query_type")){
+            TbQichacha tbQichacha = new TbQichacha();
+            tbQichacha.setType(2);
+            tbQichacha.insert();
+        }
         return R.ok(qiChaChaCompanyExceptionCheck);
     }
 
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyShopController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyShopController.java
index 3215a2f..fbb6855 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyShopController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/CompanyShopController.java
@@ -51,7 +51,10 @@
     @PostMapping("/getCompanyList")
     public R<Page<IndexCompanyListVo>> getCompanyList(@Valid @RequestBody CompanyListQuery query) {
         LoginUser loginUser = tokenService.getLoginUser();
-        Long userId = loginUser.getUserId();
+        Long userId =0L;
+        if(loginUser!=null){
+            userId = loginUser.getUserId();
+        }
         Page<IndexCompanyListVo> page = tbCompanyService.getCompanyList(query,userId);
 
         return R.ok(page);
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/OrderController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/OrderController.java
index 59b45f7..c89460c 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/OrderController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/OrderController.java
@@ -5,8 +5,10 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
 import com.github.binarywang.wxpay.exception.WxPayException;
+import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.AliSmsUtil;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.AddBuyerCompanyInfoDto;
@@ -65,6 +67,9 @@
     @GetMapping("/getMyOrderList")
     public R<HashMap<String, Object>> getMyOrderList(MyOrderListQuery query) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         Page<MyPushCompanyListVo> page = orderService.getMyOrderList(query, userId);
         HashMap<String, Object> map = new HashMap<>();
@@ -83,6 +88,9 @@
     @PostMapping("/lastPayOrderData")
     public synchronized R<WxPayMpOrderResult> lastPayOrderData(@RequestBody @Valid AddBuyerCompanyInfoDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder tbOrder = orderService.getById(dto.getOrderId());
 
@@ -117,6 +125,9 @@
             R.fail("订单id不能为空");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder tbOrder = orderService.getById(orderId);
         if (!tbOrder.getUserId().equals(userId.toString())) {
@@ -152,6 +163,9 @@
             return R.fail("id不能为空");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         // 查看现在是否可以单 判断这个公司是否上架  是否已经产生的了订单
         TbCompany company = companyService.getById(companyId);
@@ -175,8 +189,12 @@
         if (company.getStatus() == 4) {
             return R.fail("改公司已被预定");
         }
-        orderService.placeOrder(companyId, company, userId);
-        return R.ok();
+        String orderId = orderService.placeOrder(companyId, company, userId);
+        messageService.addMessage("买家申请了交易", company.getUserId(), orderId,1);
+
+        TbUser user = userService.getById(company.getUserId());
+        AliSmsUtil.sendSuccessMessageSeller(user.getPhone());
+        return R.ok(orderId);
     }
 
     @ApiOperation(value = "下单预定-获取信息", tags = {"订单模块"})
@@ -202,6 +220,9 @@
             R.fail("订单id不能为空");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(orderId);
         if (order == null) {
@@ -216,15 +237,16 @@
         }
         // 订单完成  商品已售卖
         order.setStatus(6);
-        order.updateById();
         order.setFinishTime( new Date());
+
+        order.updateById();
         company.setStatus(3);
 
-        // 分佣
+        // 结算
         orderService.commission(order, company.getUserId());
 
         // 卖家账户明细记录更新
-        TbAccountDetail one = accountDetailService.getOne(new LambdaQueryWrapper<TbAccountDetail>().eq(TbAccountDetail::getOrderId, orderId).eq(TbAccountDetail::getCategory, 2));
+        TbAccountDetail one = accountDetailService.getOne(new LambdaQueryWrapper<TbAccountDetail>().eq(TbAccountDetail::getUserId,company.getUserId()).eq(TbAccountDetail::getOrderId, orderId).eq(TbAccountDetail::getCategory, 2));
         if (one != null) {
             one.setStatus(2);
             one.updateById();
@@ -240,6 +262,9 @@
     @PostMapping("/buyerAddSchedule")
     public synchronized R<?> buyerAddSchedule(@RequestBody @Valid AddScheduleDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(dto.getOrderId());
         if (order == null) {
@@ -254,7 +279,7 @@
         scheduleService.buyerAddSchedule(dto, userId);
         String userId1 = companyService.getById(order.getCompanyId()).getUserId();
 
-        messageService.addMessage("您的订单有新的回复", userId1, order.getId());
+        messageService.addMessage("您的订单有新的回复", userId1, order.getId(),1);
         return R.ok();
 
     }
@@ -267,6 +292,9 @@
             R.fail("订单id不能为空");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbOrder order = orderService.getById(orderId);
         if (order == null) {
@@ -275,16 +303,17 @@
         if (!order.getUserId().equals(userId.toString())) {
             return R.fail("非法操作");
         }
-        if (order.getStatus() != 3) {
+        if (order.getStatus() != 3 && order.getStatus() != 2) {
             return R.fail("该订单状态不能取消");
         }
         TbCompany company = companyService.getById(order.getCompanyId());
         company.setStatus(1);
         company.updateById();
         order.setStatus(-1);
+        order.setCancelType(2);
         order.updateById();
 
-        messageService.addMessage("您发布的订单买家已取消", company.getUserId(), order.getId());
+        messageService.addMessage("您发布的订单买家已取消", company.getUserId(), order.getId(),1);
         return R.ok();
 
     }
@@ -294,6 +323,9 @@
     @PostMapping("/updateSchedule")
     public R<?> updateSchedule(@RequestBody @Valid EditScheduleDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbSchedule schedule = scheduleService.getById(dto.getScheduleId());
         if (schedule == null) {
@@ -313,6 +345,9 @@
     @DeleteMapping("/delSchedule/{scheduleId}")
     public R<?> delSchedule(@PathVariable("scheduleId") String scheduleId) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbSchedule schedule = scheduleService.getById(scheduleId);
         if (schedule == null) {
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAccountController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAccountController.java
index 356a94d..19ddb64 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAccountController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAccountController.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.utils.StringUtils;
@@ -55,6 +56,10 @@
     public R<UserAccountVo> getUserAccount() {
         UserAccountVo userAccountVo = new UserAccountVo();
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
+
         TbUser user = userService.getById(loginUser.getUserId());
         userAccountVo.setBalance(user.getBalance());
 
@@ -79,6 +84,9 @@
     @GetMapping("/getUserAccountDetail")
     public R<Page<TbAccountDetail>> getUserAccountDetail(UserAccountDetailQuery query) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         LambdaQueryWrapper<TbAccountDetail> wrapper = new LambdaQueryWrapper<>();
         if(StringUtils.isNotEmpty(query.getTime())){
             wrapper.likeRight(TbAccountDetail::getCreateTime,query.getTime());
@@ -98,6 +106,9 @@
             return R.fail("提现金额不能小于等于0");
         }
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         TbUser user = userService.getById(loginUser.getUserId());
         // 判断是否有卡
         List<TbBank> list = bankService.list(new LambdaQueryWrapper<TbBank>().eq(TbBank::getUserId, loginUser.getUserId()).eq(TbBank::getIsDelete, 0));
@@ -136,6 +147,9 @@
     @GetMapping("/getUserBank")
     public R<TbBank> getUserBank() {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         TbBank tbBank = bankService.getOne(new LambdaQueryWrapper<TbBank>().eq(TbBank::getUserId, loginUser.getUserId()).eq(TbBank::getIsDelete, 0));
         return R.ok(tbBank);
     }
@@ -145,6 +159,9 @@
     @PostMapping("/saveUserBank")
     public R<?> getUserBank(@Valid @RequestBody SaveUserBankDto dto) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         TbBank tbBank = bankService.getOne(new LambdaQueryWrapper<TbBank>().eq(TbBank::getUserId, loginUser.getUserId()).eq(TbBank::getIsDelete, 0));
         if(tbBank==null){
             tbBank = new TbBank();
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAddressController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAddressController.java
index 384150a..9075baa 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAddressController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserAddressController.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.utils.StringUtils;
@@ -43,6 +44,9 @@
     @GetMapping("/getAddressList")
     public R<?> getAddressList() {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         List<TbAddress> list = addressService.list(new LambdaQueryWrapper<TbAddress>().eq(TbAddress::getUserId, userId).eq(TbAddress::getIsDelete, 0).orderByDesc(TbAddress::getCreateTime));
         return R.ok(list);
@@ -54,6 +58,9 @@
     @PostMapping("/updateUserAddress")
     public R<?> updateUserAddress(@RequestBody @Valid TbAddress tbAddress) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         tbAddress.setUserId(userId.toString());
         tbAddress.setIsDelete(0);
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java
index 7352939..988b461 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java
@@ -1,12 +1,19 @@
 package com.ruoyi.web.controller.system;
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.constant.WxConstant;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.BasePage;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
-import com.ruoyi.common.utils.NumberUtil;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.model.TbQuestion;
 import com.ruoyi.system.model.TbSystemConfig;
@@ -14,18 +21,34 @@
 import com.ruoyi.system.service.TbQuestionService;
 import com.ruoyi.system.service.TbSystemConfigService;
 import com.ruoyi.system.service.TbUserService;
+import com.ruoyi.system.utils.wx.WxProperties;
 import com.ruoyi.system.vo.InviteUserListVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.entity.ContentType;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.SecureRandom;
+import java.text.MessageFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
+
+import static com.ruoyi.system.utils.wx.tools.WxAppletTools.ACCESS_TOKEN_URL;
 
 @Slf4j
 @RestController
@@ -45,10 +68,18 @@
     @Autowired
     private TbSystemConfigService systemConfigService;
 
+    @Autowired
+    private WxProperties wxConfig;
+    @Autowired
+    private RestTemplate restTemplate;
+
     @ApiOperation(value = "修改用户信息",tags = {"用户模块"})
     @PostMapping("/updateUserInfo")
     public R<?> updateUserInfo(String avatar,String username) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
 
         TbUser user = userService.getById(userId);
@@ -67,6 +98,9 @@
     @GetMapping("/getUserInfo")
     public R<?> getUserInfo() {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbUser user = userService.getById(userId);
         return R.ok(user);
@@ -76,6 +110,9 @@
     @PostMapping("/accountCancellation")
     public R<?> accountCancellation() {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbUser user = userService.getById(userId);
         user.setStatus(3);
@@ -89,6 +126,9 @@
     @GetMapping("/getInviteUserList")
     public R<Page<InviteUserListVo>> getInviteUserList(BasePage page) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         Page<TbUser> page1 = userService.page(new Page<>(page.getPageNum(), page.getPageSize()), new LambdaQueryWrapper<TbUser>().eq(TbUser::getInviteId, userId).orderByDesc(TbUser::getCreateTime));
         Page<InviteUserListVo> inviteUserListVoPage = new Page<>();
@@ -132,4 +172,101 @@
         return R.ok();
     }
 
+
+    @Autowired
+    private OSSUtil ossUtil;
+    @ApiOperation(value = "个人的小程序码(分享码)生成")
+    @GetMapping("/person-code")
+    public R<String> createQRcode() {
+        LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
+        Long userId = loginUser.getUserId();
+        // 获取调用凭证accessToken
+        String accessToken = getAccessToken();
+        RestTemplate rest = new RestTemplate();
+        InputStream inputStream = null;
+        OutputStream outputStream = null;
+        String imgUrl = "";
+        try {
+            String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken;
+            log.info("url: "+url);
+            Map<String,Object> param = new HashMap<>();
+            param.put("path","pages/shoppingMall/shoppingMall?userId="+userId);
+            param.put("width", 430); //二维码尺寸
+            log.info("调用生成微信URL接口传参:" + param);
+            MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
+            HttpEntity requestEntity = new HttpEntity(param, headers);
+            ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
+            log.info("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody());
+            byte[] result = entity.getBody();
+            inputStream = new ByteArrayInputStream(result);
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            // 最后上传生成的文件名
+            String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg";
+            // oss中的文件夹名
+            String objectName = sdf.format(new Date()) + "/" + finalFileName;
+            // 上传oss
+            ossUtil.uploadFile2OSS(inputStream, objectName);
+            //获取文件的URl地址
+            imgUrl = ossUtil.getImgUrl(objectName);
+            log.info("imgUrl: "+imgUrl);
+            return R.ok(imgUrl);
+
+        } catch (Exception e) {
+            log.error("调用小程序生成微信永久小程序码URL接口异常",e);
+        } finally {
+            if(inputStream != null){
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if(outputStream != null){
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return R.fail();
+    }
+    @ApiOperation(value = "获取微信小程序二维码",tags = {"获取微信小程序二维码"})
+    @PostMapping("/getQRCode")
+    public AjaxResult getQRCode() {
+        LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return AjaxResult.error(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
+        Long userId = loginUser.getUserId();
+        String accessToken = getAccessToken();
+        try {
+            String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken;
+            Map<String, Object> param = new HashMap<>();
+            param.put("path", "pages/shoppingMall/shoppingMall?userId="+userId);
+            param.put("width", 240); //二维码尺寸
+            HttpRequest post = HttpUtil.createPost(url);
+            post.body(JSON.toJSONString(param));
+            HttpResponse execute = post.execute();
+            String body = execute.body();
+            System.out.println(body);
+            byte[] bytes = body.getBytes();
+            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
+            return AjaxResult.success(body);
+        } catch (Exception e) {
+            System.err.println("调用小程序生成微信永久小程序码URL接口异常" + e);
+        }
+        return AjaxResult.success();
+    }
+
+    public  String getAccessToken() {
+        String requestUrl = MessageFormat.format(ACCESS_TOKEN_URL, wxConfig.getMemberAppId(), wxConfig.getMemberAppSecret());
+        String respBody = restTemplate.getForEntity(requestUrl, String.class).getBody();
+        JSONObject jsonObject = JSONObject.parseObject(respBody);
+        return jsonObject.getString("access_token");
+    }
 }
diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/messageController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/messageController.java
index 0d8bd16..d171446 100644
--- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/messageController.java
+++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/messageController.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.constant.HttpStatus;
 import com.ruoyi.common.core.domain.BasePage;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.domain.model.LoginUser;
@@ -47,6 +48,9 @@
     @GetMapping("/getUserMessage")
     public R<Page<TbMessage>> getUserMessage(UserMessageQuery query) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         Page<TbMessage> page = messageService.page(new Page<>(query.getPageNum(), query.getPageSize()), new LambdaQueryWrapper<TbMessage>().eq(query.getIsRead()!=null, TbMessage::getIsRead, query.getIsRead()).eq(TbMessage::getUserId, userId).orderByDesc(TbMessage::getCreateTime));
         page.getRecords().forEach(item -> {
@@ -58,11 +62,25 @@
         return R.ok(page);
     }
 
+    @ApiOperation(value = "获取用户消息未读",tags = {"消息模块"})
+    @GetMapping("/getUserMessageNum")
+    public R<?> getUserMessageNum() {
+        LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
+        Long userId = loginUser.getUserId();
+        long count = messageService.count(new LambdaQueryWrapper<TbMessage>().eq(TbMessage::getIsRead, 0).eq(TbMessage::getUserId, userId));
+        return R.ok(count);
+    }
 
     @ApiOperation(value = "消息已读",tags = {"消息模块"})
     @PostMapping("/readMessage")
     public R<?> readMessage(String id) {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbMessage message = messageService.getById(id);
         if(!message.getUserId().equals(userId.toString())){
@@ -77,6 +95,9 @@
     @GetMapping("/accountCancellation")
     public R<?> accountCancellation() {
         LoginUser loginUser = tokenService.getLoginUser();
+        if(loginUser==null){
+            return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录");
+        }
         Long userId = loginUser.getUserId();
         TbUser user = userService.getById(userId);
         user.setStatus(3);
diff --git a/ruoyi-applet/src/main/resources/application-prod.yml b/ruoyi-applet/src/main/resources/application-prod.yml
index 5cac8b5..ffe2fdf 100644
--- a/ruoyi-applet/src/main/resources/application-prod.yml
+++ b/ruoyi-applet/src/main/resources/application-prod.yml
@@ -162,7 +162,7 @@
   # 令牌密钥
   secret: abcdefghijklmnopqrstuvwxyz
   # 令牌有效期(默认30分钟)
-  expireTime: 120
+  expireTime: 10080
 
 mybatis-plus:
   # 此处在多数据源中生效
@@ -172,6 +172,7 @@
     db-config:
       logic-not-delete-value: 0
       logic-delete-value: 1
+      update-strategy: ignored
   type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo,com.ruoyi.**.model
   # 指定Mapper文件位置
   mapper-locations: classpath*:mapper/**/*.xml
@@ -202,12 +203,11 @@
     #    prefix: http://localhost:${server.port}${server.servlet.context-path}
     prefix: https://xzgt.test.591taxi.cn:${server.port}${server.servlet.context-path}
 wx:
-  memberAppId: wx31b64f0d4f09053b
-  memberAppSecret: 2f3604b43c3e7128414408d0fc67b048
+  memberAppId: wx180c41e1915992e8
+  memberAppSecret: 8c6cc3410891d3096988b92c154ba5e9
   mchId: 1720552698  #微信支付商户号
   mchKey: 5Kb8zX9qR3r4D7Yw3vHnJgLp6sA4cE1M #微信支付商户密钥
-  keyPath: C:\Users\Admin\Desktop\zsxcert\apiclient_cert.p12 # p12证书的位置
-  callbackPath: https://api.dshl.vip/WalletApi/WX/callback
-  notifyUrl: http://127.0.0.1:9081/order/WX/zxsCallback
+  keyPath: /mnt/zsxcert/apiclient_cert.p12 # p12证书的位置
+  notifyUrl: https://yizhengcheng.com/api/order/WX/zxsCallback
 
 
diff --git a/ruoyi-applet/src/main/resources/application-test.yml b/ruoyi-applet/src/main/resources/application-test.yml
index 46759df..5440d96 100644
--- a/ruoyi-applet/src/main/resources/application-test.yml
+++ b/ruoyi-applet/src/main/resources/application-test.yml
@@ -162,7 +162,7 @@
   # 令牌密钥
   secret: abcdefghijklmnopqrstuvwxyz
   # 令牌有效期(默认30分钟)
-  expireTime: 120
+  expireTime: 10080
 
 mybatis-plus:
   # 此处在多数据源中生效
@@ -172,6 +172,7 @@
     db-config:
       logic-not-delete-value: 0
       logic-delete-value: 1
+      update-strategy: ignored
   type-aliases-package: com.ruoyi.**.domain,com.ruoyi.**.vo,com.ruoyi.**.model
   # 指定Mapper文件位置
   mapper-locations: classpath*:mapper/**/*.xml
diff --git a/ruoyi-applet/src/main/resources/application.yml b/ruoyi-applet/src/main/resources/application.yml
index dcc106d..e673e36 100644
--- a/ruoyi-applet/src/main/resources/application.yml
+++ b/ruoyi-applet/src/main/resources/application.yml
@@ -1,4 +1,4 @@
 # 项目相关配置
 spring:
   profiles:
-    active: test
+    active: prod
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index b4341ea..8a81061 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -207,6 +207,11 @@
             <version>1.6.2</version> <!-- 请检查是否有更新的版本 -->
         </dependency>
 
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dyvmsapi20170525</artifactId>
+            <version>3.2.2</version>
+        </dependency>
 
         <dependency>
             <groupId>com.aliyun</groupId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/WxConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/WxConfig.java
index 770412a..ece6909 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/WxConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/WxConfig.java
@@ -22,7 +22,7 @@
      *
      * @return App ID
      */
-    @JsonProperty("appId")
+    @JsonProperty("memberAppId")
     private String appId;
 
     /**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AliSmsUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AliSmsUtil.java
index ecebfca..2eaf877 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/AliSmsUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/AliSmsUtil.java
@@ -22,6 +22,8 @@
     // 模板
     private static final String TEMPLATE_CODE = "SMS_489660108";
 
+    private static final String TEMPLATE_CODE_SELLER = "SMS_491135055";
+
 
     public static void sendSuccessMessage(String phone,String code) {
         Map<String, String> param = new HashMap<>(3);
@@ -29,8 +31,14 @@
         sendSms(phone,SIGN_NAME,TEMPLATE_CODE,param);
     }
 
+    // 提醒卖家
+    public static void sendSuccessMessageSeller(String phone) {
+        Map<String, String> param = new HashMap<>(3);
+        sendSms(phone,SIGN_NAME,TEMPLATE_CODE_SELLER,param);
+    }
+
     public static void main(String[] args) {
-        sendSuccessMessage("17828262728","123456");
+        sendSuccessMessageSeller("17828262728");
     }
 
     /**
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/OSSUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OSSUtil.java
new file mode 100644
index 0000000..415294d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OSSUtil.java
@@ -0,0 +1,484 @@
+package com.ruoyi.common.utils;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpMethod;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.multipart.MultipartFile;
+ 
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.SecureRandom;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+ 
+@Slf4j
+@Component
+public class OSSUtil {
+ 
+    private static final String endpoint = "oss-cn-chengdu.aliyuncs.com";
+    private static final String accessKeyId = "LTAI5tHYSpwifc3rqLYJoETo";
+    private static final String accessKeySecret = "xrDyQ89h8P0alWW7rrLIW2D2rt7Eig";
+    private static final String bucketName = "yizhengcheng";
+    private static final String FOLDER = "https://yizhengcheng.oss-cn-chengdu.aliyuncs.com/";
+
+    /**
+     * 获取oss
+     *
+     * @return
+     */
+    public static OSS getOSSClient() {
+        return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+    }
+ 
+    /**
+     * 上传图片
+     *
+     * @param url
+     * @throws
+     */
+    public void uploadImg2Oss(String url) throws IOException {
+        File fileOnServer = new File(url);
+        FileInputStream fin;
+        try {
+            fin = new FileInputStream(fileOnServer);
+            String[] split = url.split("/");
+            this.uploadFile2OSS(fin, split[split.length - 1]);
+        } catch (FileNotFoundException e) {
+            throw new IOException("图片上传失败");
+        }
+    }
+ 
+    public String uploadImg2Oss(MultipartFile file) throws IOException {
+        if (file.getSize() > 5 * 1024 * 1024) {
+            throw new IOException("上传图片大小不能超过5M!");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+        // 获取文件名
+        String originalFilename = file.getOriginalFilename();
+        // 获取文件后缀名
+        String suffixName  = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
+        // 最后上传生成的文件名
+        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
+        // oss中的文件夹名
+        String objectName = sdf.format(new Date()) + "/" + finalFileName;
+ 
+//        name = DateUtils.dateStr(new Date(), "yyyy/MM/dd") + "/" + System.currentTimeMillis() + substring;
+        try {
+            InputStream inputStream = file.getInputStream();
+            this.uploadFile2OSS(inputStream, objectName);
+            return objectName;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new IOException("图片上传失败");
+        }
+    }
+ 
+    /**
+     * 获得图片路径
+     *
+     * @param fileUrl
+     * @return
+     */
+    public String getImgUrl(String fileUrl) {
+        System.out.println(fileUrl);
+        if (!StringUtils.isEmpty(fileUrl)) {
+//            String[] split = fileUrl.split("/");
+            return this.getUrl(this.FOLDER + fileUrl);
+        }
+        return "";
+    }
+ 
+    /**
+     * 上传到OSS服务器 如果同名文件会覆盖服务器上的
+     *
+     * @param instream 文件流
+     * @param fileName 文件名称 包括后缀名
+     * @return 出错返回"" ,唯一MD5数字签名
+     */
+    public String uploadFile2OSS(InputStream instream, String fileName) {
+ 
+        String ret = "";
+        try {
+            OSS ossClient = getOSSClient();
+            // 创建上传Object的Metadata
+            ObjectMetadata objectMetadata = new ObjectMetadata();
+            objectMetadata.setContentLength(instream.available());
+            objectMetadata.setCacheControl("no-cache");
+            objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));
+            objectMetadata.setHeader("Pragma", "no-cache");
+//            objectMetadata.setContentDisposition("inline;filename=" + fileName);
+            // 上传文件
+            PutObjectResult putResult = ossClient.putObject(bucketName, FOLDER + fileName, instream, objectMetadata);
+            ret = putResult.getETag();
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+        } finally {
+            try {
+                if (instream != null) {
+                    instream.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return ret;
+    }
+ 
+    /**
+     * 通过文件名判断并获取OSS服务文件上传时文件的contentType
+     *
+     * @param filenameExtension 文件名
+     * @return 文件的contentType
+     */
+    public static final String getContentType(String filenameExtension) {
+ 
+        if (filenameExtension.equalsIgnoreCase(".bmp")) {
+            return "application/x-bmp";
+        }
+        if (filenameExtension.equalsIgnoreCase(".gif")) {
+            return "image/gif";
+        }
+        if (filenameExtension.equalsIgnoreCase(".jpeg") ||
+                filenameExtension.equalsIgnoreCase(".jpg") ||
+                filenameExtension.equalsIgnoreCase(".png")) {
+            return "image/jpg";
+        }
+        if (filenameExtension.equalsIgnoreCase(".html")) {
+            return "text/html";
+        }
+        if (filenameExtension.equalsIgnoreCase(".txt")) {
+            return "text/plain";
+        }
+        if (filenameExtension.equalsIgnoreCase(".vsd")) {
+            return "application/vnd.visio";
+        }
+        if (filenameExtension.equalsIgnoreCase(".pptx") ||
+                filenameExtension.equalsIgnoreCase(".ppt")) {
+            return "application/vnd.ms-powerpoint";
+        }
+        if (filenameExtension.equalsIgnoreCase(".docx") ||
+                filenameExtension.equalsIgnoreCase(".doc")) {
+            return "application/msword";
+        }
+        if (filenameExtension.equalsIgnoreCase(".xla") ||
+                filenameExtension.equalsIgnoreCase(".xlc") ||
+                filenameExtension.equalsIgnoreCase(".xlm") ||
+                filenameExtension.equalsIgnoreCase(".xls") ||
+                filenameExtension.equalsIgnoreCase(".xlt") ||
+                filenameExtension.equalsIgnoreCase(".xlw")) {
+            return "application/vnd.ms-excel";
+        }
+        if (filenameExtension.equalsIgnoreCase(".xlsx")) {
+            return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+        }
+        if (filenameExtension.equalsIgnoreCase(".xml")) {
+            return "text/xml";
+        }
+        if (filenameExtension.equalsIgnoreCase(".pdf")) {
+            return "application/pdf";
+        }
+        if (filenameExtension.equalsIgnoreCase(".zip")) {
+            return "application/zip";
+        }
+        if (filenameExtension.equalsIgnoreCase(".tar")) {
+            return "application/x-tar";
+        }
+        if (filenameExtension.equalsIgnoreCase(".avi")) {
+            return "video/avi";
+        }
+        if (filenameExtension.equalsIgnoreCase(".mp4")) {
+            return "video/mpeg4";
+        }
+        if (filenameExtension.equalsIgnoreCase(".mp3")) {
+            return "audio/mp3";
+        }
+        if (filenameExtension.equalsIgnoreCase(".mp2")) {
+            return "audio/mp2";
+        }
+        // 默认下载
+//        return "application/octet-stream";
+        return "image/jpg";
+    }
+ 
+ 
+    /**
+     * 获得url链接
+     *
+     * @param key
+     * @return
+     */
+    public String getUrl(String key) {
+        // 设置URL过期时间为10年 3600l* 1000*24*365*10
+        OSS ossClient = getOSSClient();
+        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
+        // 生成URL
+        URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
+        System.out.println("url: "+url);
+        if (url != null) {
+            String host = "https://" + url.getHost() + url.getPath();
+            System.out.println("host: "+host);
+            // http://wxcall-xiaobanben.oss-cn-shenzhen.aliyuncs.com/image/20220129/1643469496754508.jpg
+            return host;
+        }
+        return "";
+    }
+ 
+    /**
+     * 获取文件夹
+     *
+     * @param fileName
+     * @return
+     */
+    public List<String> fileFolder(String fileName) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        // 构造ListObjectsRequest请求。
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
+ 
+        // 设置正斜线(/)为文件夹的分隔符。
+        listObjectsRequest.setDelimiter("/");
+        // 设置prefix参数来获取fun目录下的所有文件。
+        if (!StringUtils.isEmpty(fileName)) {
+            listObjectsRequest.setPrefix(fileName + "/");
+        }
+        // 列出文件
+        ObjectListing listing = ossClient.listObjects(listObjectsRequest);
+        // 遍历所有commonPrefix
+        List<String> list = new ArrayList<>();
+        for (String commonPrefix : listing.getCommonPrefixes()) {
+            String newCommonPrefix = commonPrefix.substring(0, commonPrefix.length() - 1);
+            String[] s = newCommonPrefix.split("/");
+            if (!StringUtils.isEmpty(fileName)) {
+                list.add(s[s.length - 1]);
+            } else {
+                list.add(s[0]);
+            }
+        }
+        // 关闭OSSClient
+        ossClient.shutdown();
+        return list;
+    }
+ 
+    /**
+     * 列举文件下所有的文件url信息
+     */
+    public ObjectListing listFile2(String fileHost, String nextMarker) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+ 
+        // 构造ListObjectsRequest请求。
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
+ 
+        // 设置正斜线(/)为文件夹的分隔符。
+        listObjectsRequest.setDelimiter("/");
+        // 列出fun目录下的所有文件和文件夹。
+        listObjectsRequest.setPrefix(fileHost + "/");
+ 
+        ObjectListing listing = ossClient.listObjects(listObjectsRequest);
+ 
+        // 遍历所有文件。
+        System.out.println("Objects:");
+        // objectSummaries的列表中给出的是fun目录下的文件。
+        for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
+            System.out.println(objectSummary.getKey());
+        }
+ 
+        // 遍历所有commonPrefix。
+        System.out.println("\nCommonPrefixes:");
+        // commonPrefixs列表中显示的是fun目录下的所有子文件夹。由于fun/movie/001.avi和fun/movie/007.avi属于fun文件夹下的movie目录,因此这两个文件未在列表中。
+        for (String commonPrefix : listing.getCommonPrefixes()) {
+            System.out.println(commonPrefix);
+        }
+ 
+        // 关闭OSSClient。
+        ossClient.shutdown();
+        return listing;
+    }
+ 
+    /**
+     * 列举文件下所有的文件url信息
+     */
+    public List<String> listFile(String fileHost, String nextMarker) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        // 构造ListObjectsRequest请求
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName);
+ 
+        // 设置prefix参数来获取fun目录下的所有文件。
+        listObjectsRequest.setPrefix(fileHost + "/");
+        listObjectsRequest.setMarker(nextMarker);
+ 
+        // 列出文件。
+        ObjectListing listing = ossClient.listObjects(listObjectsRequest);
+        // 遍历所有文件。
+        List<String> list = new ArrayList<>();
+        for (int i = 0; i < listing.getObjectSummaries().size(); i++) {
+            String FILE_URL = "http://" + bucketName + "." + endpoint + "/" + listing.getObjectSummaries().get(i).getKey();
+            list.add(FILE_URL);
+        }
+        // 关闭OSSClient。
+        ossClient.shutdown();
+ 
+ 
+//        ObjectListing objectListing = null;
+//        int total = 0;
+//        HashMap<Integer, String> markerMap = new HashMap<>();
+//        try {
+//            ObjectListing objectListing2 = null;
+//            do {
+//                String nextMarker2 = objectListing2 != null ? objectListing2.getNextMarker() : null;
+//                ListObjectsRequest listObjectsRequest2 = new ListObjectsRequest(bucketName).withMarker(nextMarker2).withMaxKeys(100);
+//                listObjectsRequest2.setPrefix(fileHost + "/");
+//                objectListing2 = ossClient.listObjects(listObjectsRequest2);
+//                total += (objectListing2 != null && objectListing2.getObjectSummaries() != null ? objectListing2.getObjectSummaries().size() : 0);
+//                markerMap.put(markerMap.size() + 1, nextMarker2);
+//            } while (objectListing2 != null && !StringUtils.isEmpty(objectListing2.getNextMarker()));
+//
+//            ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName).withMarker(nextMarker).withMaxKeys(100);
+//
+//            listObjectsRequest.setPrefix(fileHost + "/");
+//
+//            objectListing = ossClient.listObjects(listObjectsRequest);
+//            for (int i = 0; i < objectListing.getObjectSummaries().size(); i++) {
+//                String FILE_URL = "https://" + bucketName + "." + endpoint + "/" + objectListing.getObjectSummaries().get(i).getKey();
+//                list.add(FILE_URL);
+//            }
+//
+//        } catch (Exception e) {
+//
+//        } finally {
+//            // 关闭client
+//            ossClient.shutdown();
+//        }
+ 
+        return list;
+    }
+ 
+    /**
+     * 删除文件
+     * objectName key 地址
+     *
+     * @param filePath
+     */
+    public Boolean delFile(String filePath) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        // 删除Object.
+        boolean exist = ossClient.doesObjectExist(bucketName, filePath);
+        if (!exist) {
+            return false;
+        }
+        ossClient.deleteObject(bucketName, filePath);
+        ossClient.shutdown();
+        return true;
+    }
+ 
+    /**
+     * 批量删除
+     *
+     * @param keys
+     */
+    public Boolean delFileList(List<String> keys) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        try {
+            // 删除文件。
+            DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys));
+            List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        } finally {
+            ossClient.shutdown();
+        }
+        return true;
+ 
+    }
+ 
+    /**
+     * 创建文件夹
+     *
+     * @param folder
+     * @return
+     */
+    public String createFolder(String folder) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        // 文件夹名
+        final String keySuffixWithSlash = folder;
+        // 判断文件夹是否存在,不存在则创建
+        if (!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)) {
+            // 创建文件夹
+            ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));
+            // 得到文件夹名
+            OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);
+            String fileDir = object.getKey();
+            ossClient.shutdown();
+            return fileDir;
+        }
+        return keySuffixWithSlash;
+    }
+ 
+    /**
+     * 通过文件名下载文件
+     *
+     * @param objectName    要下载的文件名
+     * @param localFileName 本地要创建的文件名
+     */
+    public void downloadFile(HttpServletResponse response, String objectName, String localFileName) throws Exception {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        try {
+            // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
+            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
+            // 读去Object内容  返回
+            BufferedInputStream in = new BufferedInputStream(ossObject.getObjectContent());
+ 
+            BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
+            //通知浏览器以附件形式下载
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(objectName, "utf-8"));
+            //BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(new File("f:\\a.txt")));
+            byte[] car = new byte[1024];
+            int L = 0;
+            while ((L = in.read(car)) != -1) {
+                out.write(car, 0, L);
+ 
+            }
+            if (out != null) {
+                out.flush();
+                out.close();
+            }
+            if (in != null) {
+                in.close();
+            }
+ 
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭OSSClient。
+            ossClient.shutdown();
+        }
+    }
+ 
+    public String onlineSee(String key) {
+        // 创建OSSClient实例。
+        OSS ossClient = getOSSClient();
+        // 设置URL过期时间为1小时
+        Date expiration = new Date(new Date().getTime() + 3600 * 1000);
+        // 临时地址
+        URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
+        // 关闭OSSClient。
+        ossClient.shutdown();
+        return url.toString();
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUploadUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUploadUtil.java
index 08732c5..8b13179 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUploadUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/OssUploadUtil.java
@@ -7,7 +7,6 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
-import java.util.Objects;
 import java.util.UUID;
 
 public class OssUploadUtil {
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/QiChaChaUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/QiChaChaUtil.java
index 81ef6c1..0992bb7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/QiChaChaUtil.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/QiChaChaUtil.java
@@ -18,7 +18,9 @@
     @Autowired
     private RedisCache redisCache;
 
+
     private static QiChaChaUtil qiChaChaUtil;
+
 
     @PostConstruct
     public void init() {
@@ -59,6 +61,7 @@
         HttpResponse execute = get.execute();
         String body = execute.body();
         JSONObject jsonObject = JSONObject.parseObject(body);
+        jsonObject.put("query_type",0);
         if("200".equals(jsonObject.get("Status"))){
             String string = jsonObject.toString();
             getInstance().redisCache.setCacheObject("qichacha_"+companyName,string,24, TimeUnit.HOURS);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/VoiceUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/VoiceUtil.java
new file mode 100644
index 0000000..a22170d
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/VoiceUtil.java
@@ -0,0 +1,52 @@
+// This file is auto-generated, don't edit it. Thanks.
+package com.ruoyi.common.utils;
+
+import com.aliyun.tea.*;
+
+public class VoiceUtil {
+
+    /**
+     * <b>description</b> :
+     * <p>使用凭据初始化账号Client</p>
+     * @return Client
+     * 
+     * @throws Exception
+     */
+    public static com.aliyun.dyvmsapi20170525.Client createClient() throws Exception {
+        // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378657.html。
+        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
+        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
+                .setCredential(credential);
+        // Endpoint 请参考 https://api.aliyun.com/product/Dyvmsapi
+        config.endpoint = "dyvmsapi.aliyuncs.com";
+        return new com.aliyun.dyvmsapi20170525.Client(config);
+    }
+
+    public static void send(String phone) throws Exception {
+        
+        com.aliyun.dyvmsapi20170525.Client client = VoiceUtil.createClient();
+        com.aliyun.dyvmsapi20170525.models.SingleCallByVoiceRequest singleCallByVoiceRequest = new com.aliyun.dyvmsapi20170525.models.SingleCallByVoiceRequest()
+                .setCalledNumber(phone)
+                .setVoiceCode("111111");
+        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
+        try {
+            // 复制代码运行请自行打印 API 的返回值
+            client.singleCallByVoiceWithOptions(singleCallByVoiceRequest, runtime);
+        } catch (TeaException error) {
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            System.out.println(error.getMessage());
+            // 诊断地址
+            System.out.println(error.getData().get("Recommend"));
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }        
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxAppletTools.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxAppletTools.java
index 7c6ee85..cb76393 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxAppletTools.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/WxAppletTools.java
@@ -74,4 +74,6 @@
         JSONObject jsonObject = JSONObject.parseObject(respBody);
         return jsonObject.getString("access_token");
     }
+
+
 }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index 520ec8e..997cdf1 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -112,7 +112,8 @@
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers(
-                        "/wxLogin/**","/order/WX/zxsCallback","/shop/**","/company/companyDetail"
+                        "/wxLogin/**","/order/WX/zxsCallback","/shop/**","/company/companyDetail","/company/getLicenceList","/company/getIndustryList"
+                        ,"/company/getCompanyTypeList","/user-address/listRegion"
 
                 ).permitAll()
                 // 静态资源,可匿名访问
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
index 9015708..e768e9f 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
@@ -7,6 +7,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.core.domain.model.LoginUserApplet;
+import com.ruoyi.common.exception.ServiceException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBuyerCompanyInfoDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBuyerCompanyInfoDto.java
index 7b3220c..7266d9a 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBuyerCompanyInfoDto.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddBuyerCompanyInfoDto.java
@@ -72,13 +72,11 @@
      * 租房合同
      */
     @ApiModelProperty("租房合同")
-    @NotBlank(message = "租房合同不能为空")
     private String tenancyAgreement;
     /**
      * 房产证
      */
     @ApiModelProperty("房产证")
-    @NotBlank(message = "房产证不能为空")
     private String propertyOwnershipCertificate;
     /**
      * 实名认证账户
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/EditCompanyDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/EditCompanyDto.java
index 45df60f..4b3903f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/EditCompanyDto.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/EditCompanyDto.java
@@ -216,13 +216,11 @@
      * 收件人
      */
     @ApiModelProperty("收件人")
-    @NotBlank(message = "收件人不能为空")
     private String recipient;
     /**
      * 收件人地址
      */
     @ApiModelProperty("收件人地址")
-    @NotBlank(message = "收件人地址不能为空")
     private String recipientAddress;
     /**
      * 所需资料
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/PushCompanyDto.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/PushCompanyDto.java
index 9a826aa..644e6a8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/dto/PushCompanyDto.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/PushCompanyDto.java
@@ -210,17 +210,15 @@
     @NotBlank(message = "联系电话不能为空")
     private String phone;
     /**
-     * 收件人
-     */
-    @ApiModelProperty("收件人")
-    @NotBlank(message = "收件人不能为空")
-    private String recipient;
-    /**
      * 收件人地址
      */
     @ApiModelProperty("收件人地址")
-    @NotBlank(message = "收件人地址不能为空")
     private String recipientAddress;
+    /**
+     * 收件人
+     */
+    @ApiModelProperty("收件人")
+    private String recipient;
     /**
      * 所需资料
      */
@@ -243,9 +241,17 @@
     private List<TbOpeningBank> openingBanks;
 
 
+
+    @ApiModelProperty("法人")
+    private String operName;
+
     @ApiModelProperty("登记机关")
     private String belongOrg;
 
     @ApiModelProperty("登记状态")
     private String registrationStatus;
+
+
+    @ApiModelProperty("企查查地址")
+    private String address;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbAccountDetail.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbAccountDetail.java
index b1a6663..a964e46 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbAccountDetail.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbAccountDetail.java
@@ -45,7 +45,7 @@
     /**
      * 1提现 2售卖商品  3平台退款 4分佣
      */
-    @ApiModelProperty("1提现 2售卖商品  3平台退款 4分佣  5购买商品")
+    @ApiModelProperty("1提现 2售卖商品  3平台退款 4分佣  5购买商品  6后台修改")
     private Integer category;
     /**
      * 1待审核 2通过(完成) 3拒绝  (取消)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbCompany.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbCompany.java
index 3cc0b06..1a735eb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbCompany.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbCompany.java
@@ -248,4 +248,6 @@
 
     private Integer isDelete;
 
+    private String address;
+
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbIndustry.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbIndustry.java
index d090b82..90bdafa 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbIndustry.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbIndustry.java
@@ -43,6 +43,9 @@
     @TableField("order_num")
     private Integer orderNum;
 
+    @TableField("del_flag")
+    private Integer delFlag;
+
 
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbMessage.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbMessage.java
index 7fc282c..13e4318 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbMessage.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbMessage.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -47,11 +48,15 @@
     private Integer isRead;
     @TableField("create_time")
     @ApiModelProperty("时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
     @TableField("order_id")
     private String orderId;
 
 
+    private Integer type;
+
+
     @TableField(exist = false)
     private String companyId;
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbOrder.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbOrder.java
index 42072d2..bce8669 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TbOrder.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TbOrder.java
@@ -93,6 +93,12 @@
     @TableField("seller_finish_time")
     private Date sellerFinishTime;
 
+    @TableField("sms_num")
+    private Integer smsNum;
+
+    @TableField("cancel_type")
+    private Integer cancelType;
+
 
 
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbMessageService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbMessageService.java
index a698ef0..5460b06 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbMessageService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbMessageService.java
@@ -19,7 +19,7 @@
      * @param text 内容
      * @param userId 用户id
      */
-    void addMessage(String text, String userId,String orderId);
+    void addMessage(String text, String userId,String orderId,int type);
 
 
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOrderService.java
index 203f4cf..aa8a148 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOrderService.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TbOrderService.java
@@ -31,7 +31,7 @@
     WxPayMpOrderResult payOrder(TbOrder tbOrder, Long userId);
 
 
-    void placeOrder(String companyId, TbCompany company,Long userId);
+    String placeOrder(String companyId, TbCompany company,Long userId);
 
 
     String weAppletChatNotice(String xmlData) throws WxPayException;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCompanyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCompanyServiceImpl.java
index f88197c..24614d9 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCompanyServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbCompanyServiceImpl.java
@@ -83,7 +83,9 @@
             queryWrapper.in(TbCompany::getId, tbPermits.stream().map(TbPermit::getCompanyId).collect(Collectors.toList()));
         }
         queryWrapper.eq(TbCompany::getCityCode, query.getCityCode());
-        queryWrapper.eq(TbCompany::getAreaCode, query.getAreaCode());
+        if(query.getAreaCode()!=null && !"".equals(query.getAreaCode())){
+            queryWrapper.eq(TbCompany::getAreaCode, query.getAreaCode());
+        }
         queryWrapper.like(StringUtils.isNotEmpty(query.getCompanyName()),TbCompany::getCompanyName, query.getCompanyName());
 
         if (query.getCompanyCategorys() != null && query.getCompanyCategorys().size() > 0) {
@@ -209,7 +211,16 @@
     @Override
     public Page<MyPushCompanyListVo> getMyPushCompanyList(MyPushCompanyListQuery query, Long userId) {
         Page<MyPushCompanyListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
-        return this.baseMapper.getMyPushCompanyList(page, query, userId);
+        Page<MyPushCompanyListVo> myPushCompanyList = this.baseMapper.getMyPushCompanyList(page, query, userId);
+        for (MyPushCompanyListVo record : myPushCompanyList.getRecords()) {
+            if(record.getStatus()!=1){
+                TbOrder order = orderService.getOne(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getCompanyId, record.getId()).ne(TbOrder::getStatus, -1).last("limit 1"));
+                if(order!=null){
+                    record.setOrderId(order.getId());
+                }
+            }
+        }
+        return myPushCompanyList;
     }
 
     @Override
@@ -219,7 +230,7 @@
         map.put("toBeConfirmed", list.stream().filter(e -> e.getStatus() == 2).count());
         map.put("confirmed", list.stream().filter(e -> e.getStatus() == 3).count());
         map.put("processing", list.stream().filter(e -> e.getStatus() == 4).count());
-        map.put("completed", list.stream().filter(e -> e.getStatus() == 5).count());
+        map.put("completed", list.stream().filter(e -> e.getStatus() == 5).count() + list.stream().filter(e -> e.getStatus() == 6).count());
         return map;
     }
     @Override
@@ -228,6 +239,7 @@
         TbCompany tbCompany = this.baseMapper.selectById(companyId);
         BeanUtils.copyProperties(tbCompany, companyDetailVo);
         companyDetailVo.setState(tbCompany.getStatus());
+
 
         TbIndustry industry = industryService.getById(tbCompany.getCompanyIndustryId());
         companyDetailVo.setCompanyIndustryName(industry.getName());
@@ -249,47 +261,55 @@
         }
 
         TbOrder order = orderService.getOne(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getCompanyId, companyId).gt(TbOrder::getStatus, 0).orderByDesc(TbOrder::getCreateTime).last("limit 1"));
-        if(order!=null){
+        if(order!=null) {
             companyDetailVo.setStatus(order.getStatus());
             companyDetailVo.setSellerFinishTime(order.getSellerFinishTime());
             companyDetailVo.setOrderId(order.getId());
-        }
+            companyDetailVo.setOrderMoney(order.getPrice());
 
-        List<TbSchedule> list2 = scheduleService.list(new LambdaQueryWrapper<TbSchedule>().eq(TbSchedule::getOrderId, order.getId()).orderByDesc(TbSchedule::getCreateTime));
-        List<TbSchedule> collect = list2.stream().filter(e -> StringUtils.isEmpty(e.getParentId())).collect(Collectors.toList());
-        for (TbSchedule tbSchedule : collect) {
-            List<TbSchedule> collect1 = list2.stream().filter(e -> StringUtils.isNotEmpty(e.getParentId()) && e.getParentId().equals(tbSchedule.getId())).collect(Collectors.toList());
-            tbSchedule.setSchedules(collect1);
-        }
-        companyDetailVo.setSchedules(collect);
-        companyDetailVo.setPayTime(order.getPayTime());
-        companyDetailVo.setConfirmTime(order.getConfirmTime());
 
-        TbBuyerCompanyInfo one = buyerCompanyInfoService.getOne(new LambdaQueryWrapper<TbBuyerCompanyInfo>().eq(TbBuyerCompanyInfo::getOrderId, order.getId()));
-        CustomerInfoVo customerInfoVo = new CustomerInfoVo();
-        if(one!=null){
-            BeanUtils.copyProperties(one, customerInfoVo);
-            String orderId = one.getOrderId();
-            List<TbShareholder> list3 = shareholderService.list(new LambdaQueryWrapper<TbShareholder>().eq(TbShareholder::getOrderId, orderId));
-            customerInfoVo.setShareHolders(list3);
-        }
-        companyDetailVo.setCustomerInfoVo(customerInfoVo);
-        companyDetailVo.setEstimatedRevenue(order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform()));
-
-        TbUser user = userService.getById(order.getUserId());
-        companyDetailVo.setCustomerName(user.getUserName());
-
-        // 判断是否要迁区 是否要改名 新增天数
-        if(one!=null){
-            companyDetailVo.setEstimatedDays(one.getAddDay()+companyDetailVo.getEstimatedDays());
-            if(one.getNeedRename()==1){
-                companyDetailVo.setSaleMoney( companyDetailVo.getSaleMoney().add(companyDetailVo.getRenameMoney()));
+            List<TbSchedule> list2 = scheduleService.list(new LambdaQueryWrapper<TbSchedule>().eq(TbSchedule::getOrderId, order.getId()).orderByDesc(TbSchedule::getCreateTime));
+            List<TbSchedule> collect = list2.stream().filter(e -> StringUtils.isEmpty(e.getParentId())).collect(Collectors.toList());
+            for (TbSchedule tbSchedule : collect) {
+                List<TbSchedule> collect1 = list2.stream().filter(e -> StringUtils.isNotEmpty(e.getParentId()) && e.getParentId().equals(tbSchedule.getId())).collect(Collectors.toList());
+                tbSchedule.setSchedules(collect1);
             }
-            if(one.getNewDistrict()==1){
-                companyDetailVo.setSaleMoney( companyDetailVo.getSaleMoney().add(companyDetailVo.getRelocationAreaMoney()));
+            companyDetailVo.setSchedules(collect);
+            companyDetailVo.setPayTime(order.getPayTime());
+            companyDetailVo.setConfirmTime(order.getConfirmTime());
+
+            TbBuyerCompanyInfo one = buyerCompanyInfoService.getOne(new LambdaQueryWrapper<TbBuyerCompanyInfo>().eq(TbBuyerCompanyInfo::getOrderId, order.getId()));
+            CustomerInfoVo customerInfoVo = new CustomerInfoVo();
+            if(one!=null){
+                BeanUtils.copyProperties(one, customerInfoVo);
+                String orderId = one.getOrderId();
+                List<TbShareholder> list3 = shareholderService.list(new LambdaQueryWrapper<TbShareholder>().eq(TbShareholder::getOrderId, orderId));
+                customerInfoVo.setShareHolders(list3);
+            }
+            companyDetailVo.setCustomerInfoVo(customerInfoVo);
+            companyDetailVo.setEstimatedRevenue(order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform()));
+
+            TbUser user = userService.getById(order.getUserId());
+            companyDetailVo.setCustomerName(user.getUserName());
+            companyDetailVo.setCustomerPhone(user.getPhone());
+
+            companyDetailVo.setSellerName(userService.getById(tbCompany.getUserId()).getUserName());
+
+            // 判断是否要迁区 是否要改名 新增天数
+            if(one!=null){
+                companyDetailVo.setEstimatedDays(one.getAddDay()+companyDetailVo.getEstimatedDays());
+                if(one.getNeedRename()==1 && companyDetailVo.getRenameMoney()!=null){
+                    companyDetailVo.setSaleMoney( companyDetailVo.getSaleMoney().add(companyDetailVo.getRenameMoney()));
+                }
+                if(one.getNewDistrict()==1 && companyDetailVo.getRelocationAreaMoney()!=null){
+                    companyDetailVo.setSaleMoney( companyDetailVo.getSaleMoney().add(companyDetailVo.getRelocationAreaMoney()));
+                }
             }
         }
 
+
+
+
         return companyDetailVo;
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbMessageServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbMessageServiceImpl.java
index 054aa11..684c8f8 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbMessageServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbMessageServiceImpl.java
@@ -19,11 +19,12 @@
 public class TbMessageServiceImpl extends ServiceImpl<TbMessageMapper, TbMessage> implements TbMessageService {
 
     @Override
-    public void addMessage(String text, String userId,String orderId) {
+    public void addMessage(String text, String userId,String orderId,int type) {
         TbMessage tbMessage = new TbMessage();
         tbMessage.setMessage(text);
         tbMessage.setUserId(userId);
         tbMessage.setOrderId(orderId);
+        tbMessage.setType(2);
         this.save(tbMessage);
     }
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
index f161767..f02c5c7 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
@@ -63,10 +63,13 @@
     private TbCompanyService companyService;
 
     @Autowired
-    private TbMessageService messageService;
+    private TbMessageService  messageService;
 
     @Autowired
     private TbShareholderService shareholderService;
+
+    @Autowired
+    private TbAccountDetailService accountDetailService;
 
 
     @Override
@@ -80,7 +83,7 @@
         List<MyPushCompanyListVo> list = this.baseMapper.getMyOrderListNum(userId);
         map.put("toBeConfirmed", list.stream().filter(e -> e.getStatus() == 2).count());
         map.put("pendingPayment", list.stream().filter(e -> e.getStatus() == 3).count());
-        map.put("processing", list.stream().filter(e -> e.getStatus() == 4).count());
+        map.put("processing", list.stream().filter(e -> e.getStatus() == 4).count()+list.stream().filter(e -> e.getStatus() == 5).count());
         map.put("completed", list.stream().filter(e -> e.getStatus() == 6).count());
         return map;
     }
@@ -93,7 +96,7 @@
     }
 
     @Override
-    public void placeOrder(String companyId, TbCompany company,Long userId) {
+    public String placeOrder(String companyId, TbCompany company,Long userId) {
         // 创建订单
         TbOrder tbOrder = new TbOrder();
         tbOrder.setCompanyId(companyId);
@@ -105,6 +108,7 @@
 
         company.setStatus(4);
         company.updateById();
+        return tbOrder.getId();
     }
 
     @Override
@@ -121,7 +125,7 @@
             order.setOutTradeNo(notifyResult.getOutTradeNo());
             order.setTransactionId(notifyResult.getTransactionId());
             TbCompany company = companyService.getById(order.getCompanyId());
-            // 生成记录  看是否分佣 金额
+            // 生成记录  看是否分佣 金额 发布人
             TbUser user = userService.getById(company.getUserId());
             TbSystemConfig config = configService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 3));
             if(config!=null){
@@ -131,10 +135,31 @@
                 BigDecimal price = order.getPrice();
                 BigDecimal divide = platformCommission.divide(new BigDecimal("100"));
                 BigDecimal platformCommissionMoney = divide.multiply(price).setScale(2, RoundingMode.HALF_UP);
+
+                // 购买人是否绑定了用户 且次数足够
                 if(StringUtils.isNotEmpty(user.getInviteId()) && user.getInviteNum()>0){
                     BigDecimal divide1 = userCommission.divide(new BigDecimal("100"));
                     BigDecimal userCommissionMoney = divide1.multiply(price).setScale(2, RoundingMode.HALF_UP);
                     order.setCommissionPrice(userCommissionMoney);
+                    if(userCommissionMoney.doubleValue()>0){
+                        TbUser shareUser = userService.getById(user.getInviteId());
+                        BigDecimal add = shareUser.getBalance().add(order.getCommissionPrice());
+                        shareUser.setBalance(add);
+                        shareUser.updateById();
+
+                        TbAccountDetail accountDetail = new TbAccountDetail();
+                        accountDetail.setUserId(user.getInviteId());
+                        accountDetail.setType(1);
+                        accountDetail.setCategory(4);
+                        accountDetail.setStatus(2);
+                        accountDetail.setMoney(order.getCommissionPrice());
+                        accountDetail.setOrderPrice(order.getPrice());
+                        accountDetail.setSourceId(order.getUserId());
+                        accountDetail.insert();
+
+                        user.setInviteNum(user.getInviteNum()-1);
+                        user.updateById();
+                    }
                 }
                 order.setShareUserId(user.getInviteId());
                 order.setCommissionPlatform(platformCommissionMoney);
@@ -163,8 +188,16 @@
             tbAccountDetail1.insert();
 
 
-            messageService.addMessage("下单成功,请及时发送快递", order.getUserId(),order.getId());
-            messageService.addMessage("您发布的订单买家已支付,请尽快处理!", company.getUserId(),order.getId());
+            messageService.addMessage("下单成功,请及时发送快递", order.getUserId(),order.getId(),2);
+            messageService.addMessage("您发布的订单买家已支付,请尽快处理!", company.getUserId(),order.getId(),1);
+
+            // 生成办理进度
+            TbSchedule tbSchedule = new TbSchedule();
+            tbSchedule.setOrderId(order.getId());
+            tbSchedule.setText("请及时快递发送所需资料");
+            tbSchedule.setCreateTime(new Date());
+            tbSchedule.setUserId(company.getUserId());
+            tbSchedule.insert();
             return "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>";
         }
         return null;
@@ -174,30 +207,13 @@
 
     @Override
     public void commission(TbOrder order,String userId) {
-        String shareUserId = order.getShareUserId();
-        if(StringUtils.isNotEmpty(shareUserId)){
-            TbUser shareUser = userService.getById(shareUserId);
-            BigDecimal add = shareUser.getBalance().add(order.getCommissionPrice());
-            shareUser.setBalance(add);
-            shareUser.updateById();
-
-            TbAccountDetail accountDetail = new TbAccountDetail();
-            accountDetail.setUserId(shareUserId);
-            accountDetail.setType(1);
-            accountDetail.setCategory(4);
-            accountDetail.setStatus(2);
-            accountDetail.setMoney(order.getCommissionPrice());
-            accountDetail.setOrderPrice(order.getPrice());
-            accountDetail.setSourceId(order.getUserId());
-            accountDetail.insert();
-
-
-        }
         BigDecimal decimal = order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform());
         TbUser user = userService.getById(userId);
         BigDecimal add = user.getBalance().add(decimal);
         user.setBalance(add);
         user.updateById();
+
+
 
     }
 
@@ -216,11 +232,15 @@
         int addDay=0;
         // 判断是否需要支付改名费 迁区费
         if(dto.getNeedRename()==1){
-            addMoney = company.getRenameMoney();
+            if(company.getRenameMoney()!=null){
+                addMoney = company.getRenameMoney();
+            }
             addDay=company.getRenameDay();
         }
         if(dto.getNewDistrict()==1){
-            addMoney = addMoney.add(company.getRelocationAreaMoney());
+            if(company.getRelocationAreaMoney()!=null){
+                addMoney = addMoney.add(company.getRelocationAreaMoney());
+            }
             addDay = addDay+company.getRelocationAreaDay();
         }
         // 更新订单金额
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java
index 8628e2d..14b9dfe 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/task/utils/TaskUtil.java
@@ -3,12 +3,15 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.utils.AliSmsUtil;
 import com.ruoyi.system.model.TbAccountDetail;
 import com.ruoyi.system.model.TbCompany;
 import com.ruoyi.system.model.TbOrder;
+import com.ruoyi.system.model.TbUser;
 import com.ruoyi.system.service.TbAccountDetailService;
 import com.ruoyi.system.service.TbCompanyService;
 import com.ruoyi.system.service.TbOrderService;
+import com.ruoyi.system.service.TbUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -32,8 +35,26 @@
     private TbCompanyService companyService;
     @Autowired
     private TbAccountDetailService accountDetailService;
+    @Autowired
+    private TbUserService userService;
 
 
+
+    @Scheduled(cron ="0 0 10 * * ?")
+    public void sendSellerSms() {
+        List<TbOrder> list = orderService.list(new LambdaQueryWrapper<TbOrder>().lt(TbOrder::getStatus, 3).eq(TbOrder::getStatus, 2));
+        if(!list.isEmpty()){
+            for (TbOrder tbOrder : list) {
+                tbOrder.setSmsNum(tbOrder.getSmsNum() + 1);
+                tbOrder.updateById();
+                TbCompany company = companyService.getById(tbOrder.getCompanyId());
+                if(company!=null){
+                    TbUser user = userService.getById(company.getUserId());
+                    AliSmsUtil.sendSuccessMessageSeller(user.getPhone());
+                }
+            }
+        }
+    }
 
     @Scheduled(fixedRate = 60000)
     public void confirmOrder() {
@@ -49,8 +70,8 @@
         TbCompany company = companyService.getById(order.getCompanyId());
         // 订单完成  商品已售卖
         order.setStatus(6);
-        order.updateById();
         order.setFinishTime( new Date());
+        order.updateById();
         company.setStatus(3);
 
         // 分佣
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java
index ae178a3..ea443b1 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java
@@ -6,7 +6,6 @@
 import com.ruoyi.system.utils.wx.body.resp.AccessTokenRespBody;
 import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody;
 import com.ruoyi.system.utils.wx.body.resq.Code2SessionResqBody;
-import com.ruoyi.system.utils.wx.model.WeixinProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CompanyDetailVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CompanyDetailVo.java
index c0e18f4..52efba6 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/CompanyDetailVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/CompanyDetailVo.java
@@ -73,11 +73,12 @@
     @ApiModelProperty("是否高新技术 0否1是")
     private Integer highTechEnterpriseTechnology;
 
-    @ApiModelProperty("预估注册资金")
+    @ApiModelProperty("预估注册资金 企查查")
     private String realRegisteredCapital;
 
     @ApiModelProperty("注册资金")
     private String registeredCapital;
+
 
     @ApiModelProperty("经营范围")
     private String scope;
@@ -124,6 +125,9 @@
     @ApiModelProperty("售卖价格")
     private BigDecimal saleMoney;
 
+    @ApiModelProperty("订单金额")
+    private BigDecimal orderMoney;
+
     @ApiModelProperty("联系电话")
     private String phone;
 
@@ -167,6 +171,12 @@
     @ApiModelProperty("交易客户")
     private String customerName;
 
+    @ApiModelProperty("交易客户手机")
+    private String customerPhone;
+
+    @ApiModelProperty("卖家名称")
+    private String sellerName;
+
     @ApiModelProperty("确认时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date confirmTime;
@@ -191,4 +201,9 @@
     @ApiModelProperty("订单id")
     private String orderId;
 
+    @ApiModelProperty("发布用户id")
+    private String userId;
+
+    @ApiModelProperty("地址")
+    private String address;
 }
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/InviteUserListVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/InviteUserListVo.java
index 30f022b..3a85178 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/InviteUserListVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/InviteUserListVo.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -14,6 +15,7 @@
     private String username;
 
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     @ApiModelProperty("剩余分佣次数")
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyPushCompanyListVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyPushCompanyListVo.java
index e558156..b761f1f 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyPushCompanyListVo.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MyPushCompanyListVo.java
@@ -29,4 +29,10 @@
 
     @ApiModelProperty("状态 -1取消 1待交易 2待确认(预定)  3已确认(待支付) 4办理中 5已完成 6已下架")
     private Integer status;
+
+    @ApiModelProperty("2 下架")
+    private Integer state;
+
+    @ApiModelProperty("取消类型 1卖家 2买家取消")
+    private Integer cancelType;
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbCompanyMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbCompanyMapper.xml
index 96ff8fa..6c7e794 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbCompanyMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbCompanyMapper.xml
@@ -49,17 +49,23 @@
 
     <select id="getMyPushCompanyList" resultType="com.ruoyi.system.vo.MyPushCompanyListVo">
         select * from (
-                          select t1.id,t1.company_name,t1.create_time,t1.sale_money ,t2.id orderId,
-                                 case
-                                     when t1.status=2 then 6
-                                     else
-                                 COALESCE(t2.status, 1) END AS status
-                          from tb_company t1
-                                   left join tb_order t2 on t1.id = t2.company_id
-                          where t1.user_id = #{userId} and t1.is_delete =0
-                      ) as t3 where 1= 1
-            <if test="query.status!=null">
-                and t3.status = #{query.status}
+        select DISTINCT t1.id,t1.company_name,t1.create_time,t1.sale_money ,t1.status state,
+        case
+        when (select count(*) from tb_order where company_id = t1.id) = 0 then 1
+        when (select count(*) from tb_order where company_id = t1.id and status = -1) >= 1 and (select count(*) from tb_order where company_id = t1.id and status != -1) = 0 then 1
+        when (select count(*) from tb_order where company_id = t1.id and status != -1) >= 1 then (select status from tb_order where company_id = t1.id and status != -1 order by create_time desc limit 1)
+        else
+        COALESCE(t2.status, 1) END AS status
+        from tb_company t1
+        left join tb_order t2 on t1.id = t2.company_id
+        where t1.user_id = #{userId} and t1.is_delete =0
+        ) as t3 where 1=1
+
+        <if test="query.status!=null and query.status!=6">
+                and t3.status = #{query.status} and t3.state !=2
+            </if>
+            <if test="query.status!=null and  query.status==6">
+                and t3.status  in (5,6)
             </if>
         order by t3.create_time desc
 
@@ -68,15 +74,18 @@
     <select id="getMyPushCompanyListNum" resultType="com.ruoyi.system.vo.MyPushCompanyListVo"
             parameterType="java.lang.Long">
         select * from (
-        select t1.id,t1.company_name,t1.create_time,t1.sale_money ,t2.id orderId,
-        case when t1.status=2 then 6
-        else
-        COALESCE(t2.status, 1) END AS status
-        from tb_company t1
-        left join tb_order t2 on t1.id = t2.company_id
-        where t1.user_id = #{userId}  and t1.is_delete =0
-                      ) as t3 where 1= 1
-        order by t3.create_time desc
+                          select DISTINCT t1.id,t1.company_name,t1.create_time,t1.sale_money ,t1.status state,
+                                          case
+                                              when (select count(*) from tb_order where company_id = t1.id) = 0 then 1
+                                              when (select count(*) from tb_order where company_id = t1.id and status = -1) >= 1 and (select count(*) from tb_order where company_id = t1.id and status != -1) = 0 then 1
+                                     when (select count(*) from tb_order where company_id = t1.id and status != -1) >= 1 then (select status from tb_order where company_id = t1.id and status != -1 order by create_time desc limit 1)
+                                     else
+                                 COALESCE(t2.status, 1) END AS status
+                          from tb_company t1
+                                   left join tb_order t2 on t1.id = t2.company_id
+                          where t1.user_id = #{userId} and t1.is_delete =0
+                      ) as t3 where t3.state !=2
+
     </select>
 
 </mapper>
diff --git a/ruoyi-system/src/main/resources/mapper/system/TbOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TbOrderMapper.xml
index 6f3cc68..924d890 100644
--- a/ruoyi-system/src/main/resources/mapper/system/TbOrderMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/TbOrderMapper.xml
@@ -15,14 +15,14 @@
     </resultMap>
 
     <select id="getMyOrderList" resultType="com.ruoyi.system.vo.MyPushCompanyListVo">
-        select t1.id orderId,t2.id,t2.company_name companyName,t2.create_time createTime,t2.sale_money saleMoney,t1.status
+        select t1.id orderId,t2.id,t2.company_name companyName,t2.create_time createTime,t2.sale_money saleMoney,t1.status,t1.cancel_type
         from tb_order t1 left join tb_company t2 on t1.company_id = t2.id
-        where t1.user_id =#{userId} and t2.id is not null
-        <if test="query.status != null and query.status !=6 ">
+        where t1.user_id =#{userId} and t2.id is not null and t2.is_delete = 0 and  t2.status != 2
+        <if test="query.status != null and query.status !=4 ">
             and t1.status = #{query.status}
         </if>
-        <if test="query.status != null and query.status ==6 ">
-            and t1.status in (5,6)
+        <if test="query.status != null and query.status ==4 ">
+            and t1.status in (4,5)
         </if>
         order by t1.create_time desc
     </select>

--
Gitblit v1.7.1