puzhibing
2023-04-07 eaa20cb58afc80e3612fd6e93d6f27e181a027e7
提交用户端开发版本
32个文件已修改
2个文件已删除
23个文件已添加
2452 ■■■■ 已修改文件
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/AccountChangeDetailMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/BillMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/ComplaintMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/OrderMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/RechargeRecordMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/UserToCouponMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/AccountChangeDetailMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/BillMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/ComplaintMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/OrderMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/RechargeRecordMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/UserToCouponMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AccountChangeDetail.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Bill.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Complaint.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/RechargeRecord.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IAccountChangeDetailService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IAppUserService.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IBillService.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IComplaintService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IOrderService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IRechargeRecordService.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/ISystemConfigService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IUserToCouponService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AccountChangeDetailServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/BillServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/CommercialServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/ComplaintServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java 178 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/RechargeRecordServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/SystemConfigServiceImpl.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/UserToCouponServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/PayMoneyUtil.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/PushUtil.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/SMSUtil.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/BalanceDetailsWarpper.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/BillWarpper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/CouponWarpper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/CouponsWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/Invoicing.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/NotInvoiceOrder.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderInfoWarpper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderListWarpper.java 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderStatusWarpper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrdersWarpper.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/PriceRulesWarpper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/PushOrderInfoWarpper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/TravelOrder.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/UserInfo.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/UserInfoWarpper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/application.yml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/logback-spring.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/resources/redis.properties 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/AppUserController.java
@@ -1,13 +1,19 @@
package com.supersavedriving.user.modular.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.supersavedriving.user.core.common.annotion.ServiceLog;
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.model.AppUser;
import com.supersavedriving.user.modular.system.service.IAppUserService;
import com.supersavedriving.user.modular.system.service.IDriverService;
import com.supersavedriving.user.modular.system.model.SystemConfig;
import com.supersavedriving.user.modular.system.service.*;
import com.supersavedriving.user.modular.system.util.PayMoneyUtil;
import com.supersavedriving.user.modular.system.util.RedisUtil;
import com.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.util.UUIDUtil;
import com.supersavedriving.user.modular.system.util.huawei.OBSUtil;
import com.supersavedriving.user.modular.system.util.huawei.SMSUtil;
import com.supersavedriving.user.modular.system.warpper.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -21,8 +27,11 @@
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
/**
 * 用户控制器
@@ -36,6 +45,24 @@
    @Autowired
    private IDriverService driverService;
    @Autowired
    private ISystemConfigService systemConfigService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IUserToCouponService userToCouponService;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Autowired
    private IComplaintService complaintService;
    @Autowired
    private RedisUtil redisUtil;
@@ -155,6 +182,11 @@
            AppUser appUser = appUserService.selectById(uid);
            UserInfoWarpper userInfoWarpper = new UserInfoWarpper();
            BeanUtils.copyProperties(appUser, userInfoWarpper);
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 7));
            if(null != systemConfig){
                JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
                userInfoWarpper.setServiceCell(jsonObject.getString("num1"));
            }
            return ResponseWarpper.success(userInfoWarpper);
        }catch (Exception e){
            e.printStackTrace();
@@ -174,7 +206,7 @@
    public ResponseWarpper<String> uploadImg(MultipartFile file){
        try {
            InputStream inputStream = file.getInputStream();
            String name = file.getName();
            String name = file.getOriginalFilename();
            name = UUIDUtil.getRandomCode() + name.substring(name.lastIndexOf("."));
            String s = OBSUtil.putObjectToBucket(inputStream, name);
            return ResponseWarpper.success(s);
@@ -183,4 +215,321 @@
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/updateUserInfo")
//    @ServiceLog(name = "修改个人信息", url = "/api/appUser/updateUserInfo")
    @ApiOperation(value = "修改个人信息", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper updateUserInfo(UserInfo userInfo){
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            ResultUtil resultUtil = appUserService.updateUserInfo(uid, userInfo);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryPriceRules")
//    @ServiceLog(name = "获取价格表", url = "/api/appUser/queryPriceRules")
    @ApiOperation(value = "获取价格表", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<PriceRulesWarpper> queryPriceRules(){
        try {
            PriceRulesWarpper priceRulesWarpper = systemConfigService.queryPriceRules();
            return ResponseWarpper.success(priceRulesWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryTopUpPrompt")
//    @ServiceLog(name = "获取充值优惠提示", url = "/api/appUser/queryTopUpPrompt")
    @ApiOperation(value = "获取充值优惠提示", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<String> queryTopUpPrompt(){
        try {
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 6));
            if(null != systemConfig){
                JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
                return ResponseWarpper.success("充值满" + jsonObject.getDouble("num2") + "元,下单享9折优惠!");
            }
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/rechargeBalance")
//    @ServiceLog(name = "充值操作", url = "/api/appUser/rechargeBalance")
    @ApiOperation(value = "充值操作", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "充值金额", name = "amount", required = true, dataType = "double"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper rechargeBalance(Double amount){
        if(null == amount){
            return ResponseWarpper.success(ResultUtil.paranErr("amount"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            ResultUtil resultUtil = appUserService.rechargeBalance(uid, amount);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/rechargeBalanceCallback")
//    @ServiceLog(name = "余额充值回调", url = "/base/appUser/rechargeBalanceCallback")
    public void rechargeBalanceCallback(HttpServletRequest request, HttpServletResponse response){
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if(null != map){
                String out_trade_no = map.get("out_trade_no");
                String transaction_id = map.get("transaction_id");
                String result = map.get("result");
                String orderId = out_trade_no.substring(17);
                appUserService.rechargeBalanceCallback(out_trade_no, transaction_id);
                PrintWriter out = response.getWriter();
                out.print(result);
                out.flush();
                out.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryMyCoupons")
//    @ServiceLog(name = "获取优惠券列表", url = "/api/appUser/queryMyCoupons")
    @ApiOperation(value = "获取优惠券列表", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "状态(1=未使用,2=已使用,3=已过期)", name = "state", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<CouponsWarpper>> queryMyCoupons(Integer state, Integer pageNum, Integer pageSize){
        if(null == state){
            return ResponseWarpper.success(ResultUtil.paranErr("state"));
        }
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            List<CouponsWarpper> couponsWarppers = userToCouponService.queryMyCoupons(uid, state, pageNum, pageSize);
            return ResponseWarpper.success(couponsWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryUsedCouponNum")
//    @ServiceLog(name = "获取已使用优惠券数量", url = "/api/appUser/queryUsedCouponNum")
    @ApiOperation(value = "获取已使用优惠券数量", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<Integer> queryUsedCouponNum(){
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            Integer integer = userToCouponService.queryUsedCouponNum(uid);
            return ResponseWarpper.success(integer);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/queryBalanceDetails")
//    @ServiceLog(name = "获取余额明细", url = "/api/appUser/queryBalanceDetails")
    @ApiOperation(value = "获取余额明细", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "统计时间", name = "time", required = true, dataType = "string"),
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<BalanceDetailsWarpper>> queryBalanceDetails(String time, Integer pageNum, Integer pageSize){
        if(ToolUtil.isEmpty(time)){
            return ResponseWarpper.success(ResultUtil.paranErr("time"));
        }
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            List<BalanceDetailsWarpper> balanceDetailsWarppers = accountChangeDetailService.queryBalanceDetails(uid, time, pageNum, pageSize);
            return ResponseWarpper.success(balanceDetailsWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/cancelAccount")
//    @ServiceLog(name = "注销账号", url = "/api/appUser/cancelAccount")
    @ApiOperation(value = "注销账号", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper cancelAccount(){
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            AppUser appUser = appUserService.selectById(uid);
            appUser.setStatus(3);
            appUserService.updateById(appUser);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/appUser/feedback")
//    @ServiceLog(name = "投诉反馈", url = "/api/appUser/feedback")
    @ApiOperation(value = "投诉反馈", tags = {"用户端-首页", "用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = false, dataType = "int"),
            @ApiImplicitParam(value = "反馈内容", name = "content", required = true, dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper feedback(Integer orderId, String content){
        if(null == content){
            return ResponseWarpper.success(ResultUtil.paranErr("content"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            complaintService.feedback(uid, orderId, content);
            return ResponseWarpper.success();
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/getVerificationCode")
//    @ServiceLog(name = "获取短信验证码", url = "/base/appUser/getVerificationCode")
    @ApiOperation(value = "获取短信验证码", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "国家代码+86", name = "receiver", required = true, dataType = "string"),
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "string"),
    })
    public ResponseWarpper getVerificationCode(String receiver, String phone){
        if(ToolUtil.isEmpty(receiver)){
            return ResponseWarpper.success(ResultUtil.paranErr("receiver"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        try {
            String numberRandom = UUIDUtil.getNumberRandom(5);
            SMSUtil.send(phone, "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + numberRandom + "\"]");
            redisUtil.setStrValue(receiver + phone, numberRandom, 300);//5分钟有效期
            return ResponseWarpper.success(ResultUtil.success());
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/appUser/verifySMSCode")
//    @ServiceLog(name = "验证短信验证码", url = "/base/appUser/verifySMSCode")
    @ApiOperation(value = "验证短信验证码", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "电话号码", name = "phone", required = true, dataType = "String"),
            @ApiImplicitParam(value = "验证码", name = "code", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper verifySMSCode(String phone, String code){
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("phone"));
        }
        if(ToolUtil.isEmpty(phone)){
            return ResponseWarpper.success(ResultUtil.paranErr("code"));
        }
        try {
            ResultUtil resultUtil = ResultUtil.success();
            phone = phone.indexOf("+86") < 0 ? "+86" + phone : phone;
            String value = redisUtil.getValue(phone);
            if(ToolUtil.isEmpty(value) || !value.equals(code)){
                resultUtil = ResultUtil.error("验证码无效");
            }
            redisUtil.remove(phone);
            return ResponseWarpper.success(resultUtil);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/api/OrderController.java
@@ -6,6 +6,7 @@
import com.supersavedriving.user.modular.system.model.AppUser;
import com.supersavedriving.user.modular.system.model.Order;
import com.supersavedriving.user.modular.system.service.IAppUserService;
import com.supersavedriving.user.modular.system.service.IBillService;
import com.supersavedriving.user.modular.system.service.IOrderService;
import com.supersavedriving.user.modular.system.util.PayMoneyUtil;
import com.supersavedriving.user.modular.system.util.ResultUtil;
@@ -44,6 +45,9 @@
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IBillService billService;
@@ -171,6 +175,28 @@
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            OrderInfoWarpper orderInfoWarpper = orderService.queryOrderInfo(uid, orderId);
            return ResponseWarpper.success(orderInfoWarpper);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/base/order/queryShareOrderInfo")
//    @ServiceLog(name = "获取订单详情", url = "/base/order/queryShareOrderInfo")
    @ApiOperation(value = "获取订单详情", tags = {"用户端-分享"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
    })
    public ResponseWarpper<OrderInfoWarpper> queryOrderInfo1(Long orderId){
        if(null == orderId){
            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
        }
        try {
            OrderInfoWarpper orderInfoWarpper = orderService.queryOrderInfo(null, orderId);
            return ResponseWarpper.success(orderInfoWarpper);
        }catch (Exception e){
            e.printStackTrace();
@@ -365,5 +391,108 @@
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryMyOrder")
//    @ServiceLog(name = "获取我的行程", url = "/api/order/queryMyOrder")
    @ApiOperation(value = "获取我的行程", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<OrderListWarpper>> queryMyOrder(Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            List<OrderListWarpper> orderListWarppers = orderService.queryMyOrder(uid, pageNum, pageSize);
            return ResponseWarpper.success(orderListWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryNotInvoiceOrder")
//    @ServiceLog(name = "获取未开票订单列表", url = "/api/order/queryNotInvoiceOrder")
    @ApiOperation(value = "获取未开票订单列表", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<OrderListWarpper>> queryNotInvoiceOrder(NotInvoiceOrder notInvoiceOrder){
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            List<OrderListWarpper> orderListWarppers = orderService.queryNotInvoiceOrder(uid, notInvoiceOrder);
            return ResponseWarpper.success(orderListWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/invoicing")
//    @ServiceLog(name = "开票操作", url = "/api/order/invoicing")
    @ApiOperation(value = "开票操作", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper invoicing(Invoicing invoicing){
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            ResultUtil invoicing1 = billService.invoicing(uid, invoicing);
            return ResponseWarpper.success(invoicing1);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
    @ResponseBody
    @PostMapping("/api/order/queryBillList")
//    @ServiceLog(name = "获取开票历史", url = "/api/order/queryBillList")
    @ApiOperation(value = "获取开票历史", tags = {"用户端-个人中心"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"),
            @ApiImplicitParam(value = "页条数", name = "pageSize", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResponseWarpper<List<BillWarpper>> queryBillList(Integer pageNum, Integer pageSize){
        if(null == pageNum){
            return ResponseWarpper.success(ResultUtil.paranErr("pageNum"));
        }
        if(null == pageSize){
            return ResponseWarpper.success(ResultUtil.paranErr("pageSize"));
        }
        try {
            Integer uid = appUserService.getUserByRequest();
            if(null == uid){
                return ResponseWarpper.success(ResultUtil.tokenErr());
            }
            List<BillWarpper> billWarppers = billService.queryBillList(uid, pageNum, pageSize);
            return ResponseWarpper.success(billWarppers);
        }catch (Exception e){
            e.printStackTrace();
            return new ResponseWarpper(500, e.getMessage());
        }
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/AccountChangeDetailMapper.java
@@ -2,10 +2,26 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.supersavedriving.user.modular.system.model.AccountChangeDetail;
import com.supersavedriving.user.modular.system.warpper.BalanceDetailsWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/4 11:33
 */
public interface AccountChangeDetailMapper extends BaseMapper<AccountChangeDetail> {
    /**
     * 获取余额明细
     * @param uid
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<BalanceDetailsWarpper> queryBalanceDetails(@Param("uid") Integer uid, @Param("time") String time,
                                                    @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/BillMapper.java
New file
@@ -0,0 +1,25 @@
package com.supersavedriving.user.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.supersavedriving.user.modular.system.model.Bill;
import com.supersavedriving.user.modular.system.warpper.BillWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/24 10:04
 */
public interface BillMapper extends BaseMapper<Bill> {
    /**
     * 获取开票记录
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<BillWarpper> queryBillList(@Param("uid") Integer uid, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/ComplaintMapper.java
New file
@@ -0,0 +1,11 @@
package com.supersavedriving.user.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.supersavedriving.user.modular.system.model.Complaint;
/**
 * @author zhibing.pu
 * @date 2023/3/24 16:05
 */
public interface ComplaintMapper extends BaseMapper<Complaint> {
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/OrderMapper.java
@@ -2,8 +2,12 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.supersavedriving.user.modular.system.model.Order;
import com.supersavedriving.user.modular.system.warpper.NotInvoiceOrder;
import com.supersavedriving.user.modular.system.warpper.OrderInfoWarpper;
import com.supersavedriving.user.modular.system.warpper.OrderListWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface OrderMapper extends BaseMapper<Order> {
@@ -15,4 +19,23 @@
     * @return
     */
    OrderInfoWarpper queryOrderInfo(@Param("uid") Integer uid, @Param("orderId") Long orderId);
    /**
     * 获取乘客行程订单
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<OrderListWarpper> queryMyOrder(@Param("uid") Integer uid, @Param("pageNum") Integer pageNum,
                                        @Param("pageSize") Integer pageSize);
    /**
     * 获取未开票订单
     * @param uid
     * @return
     */
    List<OrderListWarpper> queryNotInvoiceOrder(@Param("uid") Integer uid, @Param("notInvoiceOrder") NotInvoiceOrder notInvoiceOrder);
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/RechargeRecordMapper.java
New file
@@ -0,0 +1,11 @@
package com.supersavedriving.user.modular.system.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.supersavedriving.user.modular.system.model.RechargeRecord;
/**
 * @author zhibing.pu
 * @date 2023/3/23 14:55
 */
public interface RechargeRecordMapper extends BaseMapper<RechargeRecord> {
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/UserToCouponMapper.java
@@ -4,6 +4,7 @@
import com.supersavedriving.user.modular.system.model.Coupon;
import com.supersavedriving.user.modular.system.model.UserToCoupon;
import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
import com.supersavedriving.user.modular.system.warpper.CouponsWarpper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -32,4 +33,24 @@
     * @return
     */
    List<CouponWarpper> queryPayCouponList(@Param("uid") Integer uid, @Param("price") Double price);
    /**
     * 获取用户优惠券列表
     * @param uid
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     */
    List<CouponsWarpper> queryMyCoupons(@Param("uid") Integer uid, @Param("state") Integer state,
                                        @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
    /**
     * 获取已使用优惠券数量
     * @param uid
     * @return
     */
    Integer queryUsedCouponNum(@Param("uid") Integer uid);
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/AccountChangeDetailMapper.xml
@@ -5,13 +5,35 @@
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.supersavedriving.user.modular.system.model.AccountChangeDetail">
        <id column="id" property="id"/>
        <result column="code" property="code"/>
        <result column="userType" property="userType"/>
        <result column="userId" property="userId"/>
        <result column="type" property="type"/>
        <result column="changeType" property="changeType"/>
        <result column="oldData" property="oldData"/>
        <result column="newData" property="newData"/>
        <result column="orderId" property="orderId"/>
        <result column="explain" property="explain"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
    <select id="queryBalanceDetails" resultType="com.supersavedriving.user.modular.system.warpper.BalanceDetailsWarpper">
        select
        a.changeType as type,
        a.`explain`,
        b.startAddress,
        b.endAddress,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        (a.newData - a.oldData) as amount,
        a.newData as balance
        from t_account_change_detail a
        left join t_order b on (a.orderId = b.id)
        where a.userType = 1 and a.userId = #{uid}
        <if test="null != time and '' != time">
            and DATE_FORMAT(a.createTime, '%Y年%m月') = #{time}
        </if>
        order by a.createTime desc limit #{pageNum}, #{pageSize}
    </select>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/BillMapper.xml
New file
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supersavedriving.user.modular.system.dao.BillMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.supersavedriving.user.modular.system.model.Bill">
        <id column="id" property="id"/>
        <result column="userId" property="userId"/>
        <result column="orderId" property="orderId"/>
        <result column="billType" property="billType"/>
        <result column="billHeaderType" property="billHeaderType"/>
        <result column="companyName" property="companyName"/>
        <result column="companyTaxNumber" property="companyTaxNumber"/>
        <result column="billContent" property="billContent"/>
        <result column="moreContent" property="moreContent"/>
        <result column="billAmount" property="billAmount"/>
        <result column="addresseeName" property="addresseeName"/>
        <result column="addresseePhone" property="addresseePhone"/>
        <result column="addresseeEmail" property="addresseeEmail"/>
        <result column="state" property="state"/>
        <result column="createTime" property="createTime"/>
    </resultMap>
    <select id="queryBillList" resultType="com.supersavedriving.user.modular.system.warpper.BillWarpper">
        select
        id,
        billType,
        billContent,
        billAmount,
        state,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime
        from t_bill where userId = #{uid} order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/ComplaintMapper.xml
New file
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supersavedriving.user.modular.system.dao.ComplaintMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.supersavedriving.user.modular.system.model.Complaint">
        <id column="id" property="id"/>
        <result column="userId" property="userId"/>
        <result column="orderId" property="orderId"/>
        <result column="driverId" property="driverId"/>
        <result column="reason" property="reason"/>
        <result column="notes" property="notes"/>
        <result column="state" property="state"/>
        <result column="status" property="status"/>
        <result column="createTime" property="createTime"/>
        <result column="auditId" property="auditId"/>
        <result column="auditPersonName" property="auditPersonName"/>
        <result column="auditTime" property="auditTime"/>
    </resultMap>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/OrderMapper.xml
@@ -58,6 +58,7 @@
        <result column="startWaitTime" property="startWaitTime"/>
        <result column="state" property="state" />
        <result column="oldState" property="oldState"/>
        <result column="isInvoice" property="isInvoice"/>
        <result column="status" property="status" />
        <result column="createTime" property="createTime" />
    </resultMap>
@@ -74,6 +75,7 @@
        a.endAddress,
        a.endLat,
        a.endLng,
        b.id as driverId,
        b.avatar as driverAvatar,
        b.`name` as driverName,
        b.phone as driverPhone,
@@ -81,9 +83,48 @@
        (DATE_FORMAT(now(), '%Y') - DATE_FORMAT(b.firstCertificateTime, '%Y')) as driverAge,
        (select count(1) from t_order where driverId = b.id and `status` = 1 and state in (107, 108, 109)) as driverNumber,
        b.score as driverScore,
        a.state
        a.state,
        UNIX_TIMESTAMP(a.createTime) * 1000 as createTime,
        c.score as evaluationScore,
        c.evaluate as evaluationContent
        from t_order a
        left join t_driver b on (a.driverId = b.id)
        left join t_evaluate c on (a.id = c.orderId)
        where a.id = #{orderId}
    </select>
    <select id="queryMyOrder" resultType="com.supersavedriving.user.modular.system.warpper.OrderListWarpper">
        select
        id,
        '超省新代驾' as title,
        startAddress,
        endAddress,
        state,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime
        from t_order
        where `status` = 1 and userId = #{uid} order by createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryNotInvoiceOrder" resultType="com.supersavedriving.user.modular.system.warpper.OrderListWarpper">
        select
        id,
        '超省新代驾' as title,
        startAddress,
        endAddress,
        state,
        UNIX_TIMESTAMP(createTime) * 1000 as createTime,
        payMoney as amount
        from t_order
        where `status` = 1 and isInvoice != 1 and state in (108, 109) and userId = #{uid}
        <if test="null != notInvoiceOrder.startTime and '' != notInvoiceOrder.startTime and null != notInvoiceOrder.endTime and '' != notInvoiceOrder.endTime">
            and DATE_FORMAT(createTime, '%Y-%m-%d') between #{notInvoiceOrder.startTime} and #{notInvoiceOrder.endTime}
        </if>
        <if test="null != notInvoiceOrder.startAmount and null != notInvoiceOrder.endAmount">
            and payMoney between #{notInvoiceOrder.startAmount} and #{notInvoiceOrder.endAmount}
        </if>
        order by createTime desc limit #{notInvoiceOrder.pageNum}, #{notInvoiceOrder.pageSize}
    </select>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/RechargeRecordMapper.xml
New file
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.supersavedriving.user.modular.system.dao.RechargeRecordMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.supersavedriving.user.modular.system.model.RechargeRecord">
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="userId" property="userId" />
        <result column="code" property="code" />
        <result column="amount" property="amount"/>
        <result column="payType" property="payType" />
        <result column="payTime" property="payTime" />
        <result column="payStatus" property="payStatus" />
        <result column="orderNumber" property="orderNumber" />
        <result column="createTime" property="createTime" />
        <result column="agentId" property="agentId" />
    </resultMap>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/dao/mapping/UserToCouponMapper.xml
@@ -19,7 +19,20 @@
    <select id="queryCoupon" resultType="com.supersavedriving.user.modular.system.model.Coupon">
        select
        b.id,
        a.*
        a.agent_id as agentId,
        a.branch_office_id as branchOfficeId,
        a.create_time as createTime,
        a.coupon_name as couponName,
        a.coupon_type as couponType,
        a.coupon_code as couponCode,
        a.coupon_service_type as couponServiceType,
        a.coupon_conditional_amount as couponConditionalAmount,
        a.coupon_preferential_amount as couponPreferentialAmount,
        a.coupon_validity as couponValidity,
        a.coupon_send_quantity as couponSendQuantity,
        a.coupon_state as couponState,
        a.coupon_count as couponCount,
        a.remaining_quantity as remainingQuantity
        from t_coupon a
        left join t_user_to_coupon b on (a.id = b.couponId)
        where b.status = 1 and b.expireTime > now() and b.validCount &gt; 0
@@ -41,4 +54,32 @@
        where b.userId = #{uid}  and b.validCount > 0 and b.expireTime > now() and
        a.coupon_conditional_amount &lt;= #{price} and a.coupon_preferential_amount &lt; #{price} order by b.createTime
    </select>
    <select id="queryMyCoupons" resultType="com.supersavedriving.user.modular.system.warpper.CouponsWarpper">
        select
        a.id,
        b.coupon_name as `name`,
        b.coupon_conditional_amount as preferentialTerms,
        b.coupon_preferential_amount as discountAmount,
        UNIX_TIMESTAMP(a.expireTime) * 1000 as endTime
        from t_user_to_coupon a
        left join t_coupon b on (a.couponId = b.id)
        where a.`status` = 1 and a.userId = #{uid}
        <if test="null != state and 1 == state">
            and a.couponTotal = a.validCount and now() &lt; a.expireTime
        </if>
        <if test="null != state and 2 == state">
            and a.couponTotal != a.validCount and now() &lt; a.expireTime
        </if>
        <if test="null != state and 3 == state">
            and now() &gt;= a.expireTime
        </if>
        order by a.createTime desc limit #{pageNum}, #{pageSize}
    </select>
    <select id="queryUsedCouponNum" resultType="int">
        select sum(couponTotal - validCount) from t_user_to_coupon where `status` = 1 and userId = #{uid}
    </select>
</mapper>
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/AccountChangeDetail.java
@@ -23,6 +23,11 @@
    @TableField("id")
    private Integer id;
    /**
     * 编号
     */
    @TableField("code")
    private String code;
    /**
     * 用户类型(1=用户,2=司机)
     */
    @TableField("userType")
@@ -53,6 +58,11 @@
    @TableField("newData")
    private Double newData;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Long orderId;
    /**
     * 变动说明
     */
    @TableField("explain")
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Bill.java
New file
@@ -0,0 +1,94 @@
package com.supersavedriving.user.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/24 9:59
 */
@Data
@TableName("t_bill")
public class Bill {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Integer orderId;
    /**
     * 发票类型 1电子发票
     */
    @TableField("billType")
    private Integer billType;
    /**
     * 发票抬头 1公司 2个人
     */
    @TableField("billHeaderType")
    private Integer billHeaderType;
    /**
     * 公司名称/个人抬头名称
     */
    @TableField("companyName")
    private String companyName;
    /**
     * 公司税号
     */
    @TableField("companyTaxNumber")
    private String companyTaxNumber;
    /**
     * 发票内容
     */
    @TableField("billContent")
    private String billContent;
    /**
     * 更多内容
     */
    @TableField("moreContent")
    private String moreContent;
    /**
     * 发票金额
     */
    @TableField("billAmount")
    private Double billAmount;
    /**
     * 收件人姓名
     */
    @TableField("addresseeName")
    private String addresseeName;
    /**
     * 收件人电话
     */
    @TableField("addresseePhone")
    private String addresseePhone;
    /**
     * 收件人邮箱
     */
    @TableField("addresseeEmail")
    private String addresseeEmail;
    /**
     * 开票状态 1待开票 2已开票 3开票失败
     */
    @TableField("state")
    private Integer state;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Complaint.java
New file
@@ -0,0 +1,79 @@
package com.supersavedriving.user.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/24 11:58
 */
@Data
@TableName("t_complaint")
public class Complaint {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 订单id
     */
    @TableField("orderId")
    private Integer orderId;
    /**
     * 司机id
     */
    @TableField("driverId")
    private Integer driverId;
    /**
     * 投诉原因
     */
    @TableField("reason")
    private String reason;
    /**
     * 注释
     */
    @TableField("notes")
    private String notes;
    /**
     * 处理状态(1=待处理,2=已处理)
     */
    @TableField("state")
    private Integer state;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
    private Integer status;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 处理人id
     */
    @TableField("auditId")
    private Integer auditId;
    /**
     * 处理人名称
     */
    @TableField("auditPersonName")
    private String auditPersonName;
    /**
     * 处理时间
     */
    @TableField("auditTime")
    private Date auditTime;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/Order.java
@@ -288,6 +288,11 @@
    @TableField("oldState")
    private Integer oldState;
    /**
     * 是否已开发票(0=否,1=是)
     */
    @TableField("isInvoice")
    private Integer isInvoice;
    /**
     * 状态(1=正常,2=冻结,3=删除)
     */
    @TableField("status")
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/model/RechargeRecord.java
New file
@@ -0,0 +1,74 @@
package com.supersavedriving.user.modular.system.model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/21 23:08
 */
@Data
@TableName("t_recharge_record")
public class RechargeRecord {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @TableField("id")
    private Integer id;
    /**
     * 数据类型(1=用户,2=司机,3=代理商)
     */
    @TableField("type")
    private Integer type;
    /**
     * 用户id
     */
    @TableField("userId")
    private Integer userId;
    /**
     * 流水号
     */
    @TableField("code")
    private String code;
    /**
     * 充值金额
     */
    @TableField("amount")
    private Double amount;
    /**
     * 支付方式(1=微信,2=系统充值)
     */
    @TableField("payType")
    private Integer payType;
    /**
     * 完成支付时间
     */
    @TableField("payTime")
    private Date payTime;
    /**
     * 支付状态(1=待支付,2=已完成)
     */
    @TableField("payStatus")
    private Integer payStatus;
    /**
     * 第三方流水号
     */
    @TableField("orderNumber")
    private String orderNumber;
    /**
     * 添加时间
     */
    @TableField("createTime")
    private Date createTime;
    /**
     * 代理商id
     */
    @TableField("agentId")
    private Integer agentId;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IAccountChangeDetailService.java
@@ -2,6 +2,9 @@
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.AccountChangeDetail;
import com.supersavedriving.user.modular.system.warpper.BalanceDetailsWarpper;
import java.util.List;
/**
 * @author zhibing.pu
@@ -16,4 +19,16 @@
     * @throws Exception
     */
    void saveData(AccountChangeDetail accountChangeDetail) throws Exception;
    /**
     * 获取余额明细
     * @param uid
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<BalanceDetailsWarpper> queryBalanceDetails(Integer uid, String time, Integer pageNum, Integer pageSize) throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IAppUserService.java
@@ -3,10 +3,13 @@
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.AppUser;
import com.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.warpper.CouponsWarpper;
import com.supersavedriving.user.modular.system.warpper.SignInToRegister;
import com.supersavedriving.user.modular.system.warpper.SignInToRegisterWarpper;
import com.supersavedriving.user.modular.system.warpper.UserInfo;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
public interface IAppUserService extends IService<AppUser> {
@@ -35,4 +38,45 @@
     * @return
     */
    Integer getUserByRequest() throws Exception;
    /**
     * 修改个人信息
     * @param userInfo
     * @return
     * @throws Exception
     */
    ResultUtil updateUserInfo(Integer uid, UserInfo userInfo) throws Exception;
    /**
     * 余额充值
     * @param uid
     * @param amount
     * @return
     * @throws Exception
     */
    ResultUtil rechargeBalance(Integer uid, Double amount) throws Exception;
    /**
     * 余额充值回调处理
     * @param out_trade_no
     * @param transaction_id
     * @return
     * @throws Exception
     */
    void rechargeBalanceCallback(String out_trade_no, String transaction_id) throws Exception;
    /**
     * 获取用户优惠券列表
     * @param uid
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<CouponsWarpper> queryMyCoupons(Integer uid, Integer state, Integer pageNum, Integer pageSize) throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IBillService.java
New file
@@ -0,0 +1,37 @@
package com.supersavedriving.user.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.Bill;
import com.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.warpper.BillWarpper;
import com.supersavedriving.user.modular.system.warpper.Invoicing;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/24 10:07
 */
public interface IBillService extends IService<Bill> {
    /**
     * 开票操作
     * @param uid
     * @param invoicing
     * @return
     * @throws Exception
     */
    ResultUtil invoicing(Integer uid, Invoicing invoicing) throws Exception;
    /**
     * 获取开票记录
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<BillWarpper> queryBillList(Integer uid, Integer pageNum, Integer pageSize) throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IComplaintService.java
New file
@@ -0,0 +1,20 @@
package com.supersavedriving.user.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.Complaint;
/**
 * @author zhibing.pu
 * @date 2023/3/24 16:07
 */
public interface IComplaintService extends IService<Complaint> {
    /**
     * 投诉反馈
     * @param orderId
     * @param content
     * @throws Exception
     */
    void feedback(Integer uid, Integer orderId, String content) throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IOrderService.java
@@ -129,4 +129,24 @@
     * @throws Exception
     */
    ResultUtil orderAppraise(Integer uid, Long orderId, Integer score, String content) throws Exception;
    /**
     * 获取用户行程记录
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<OrderListWarpper> queryMyOrder(Integer uid, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取未开票订单
     * @param uid
     * @return
     * @throws Exception
     */
    List<OrderListWarpper> queryNotInvoiceOrder(Integer uid, NotInvoiceOrder notInvoiceOrder) throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IRechargeRecordService.java
New file
@@ -0,0 +1,11 @@
package com.supersavedriving.user.modular.system.service;
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.RechargeRecord;
/**
 * @author zhibing.pu
 * @date 2023/3/23 14:56
 */
public interface IRechargeRecordService extends IService<RechargeRecord> {
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/ISystemConfigService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.service.IService;
import com.supersavedriving.user.modular.system.model.SystemConfig;
import com.supersavedriving.user.modular.system.warpper.PriceRulesWarpper;
/**
* 系统配置
@@ -9,4 +10,12 @@
* @Date 2023/2/15 16:26
*/
public interface ISystemConfigService extends IService<SystemConfig> {
    /**
     * 获取价格表
     * @return
     * @throws Exception
     */
    PriceRulesWarpper queryPriceRules() throws Exception;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/IUserToCouponService.java
@@ -4,6 +4,7 @@
import com.supersavedriving.user.modular.system.model.Coupon;
import com.supersavedriving.user.modular.system.model.UserToCoupon;
import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
import com.supersavedriving.user.modular.system.warpper.CouponsWarpper;
import java.util.List;
@@ -27,9 +28,28 @@
    /**
     * 获取订单支付页面的可用优惠券列表
     * @param uid
     * @param orderId
     * @return
     * @throws Exception
     */
    List<CouponWarpper> queryPayCouponList(Integer uid, Double price) throws Exception;
    /**
     * 获取用户优惠券列表
     * @param uid
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    List<CouponsWarpper> queryMyCoupons(Integer uid, Integer state, Integer pageNum, Integer pageSize) throws Exception;
    /**
     * 获取已使用优惠券数量
     * @param uid
     * @return
     */
    Integer queryUsedCouponNum(Integer uid);
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AccountChangeDetailServiceImpl.java
@@ -4,9 +4,11 @@
import com.supersavedriving.user.modular.system.dao.AccountChangeDetailMapper;
import com.supersavedriving.user.modular.system.model.AccountChangeDetail;
import com.supersavedriving.user.modular.system.service.IAccountChangeDetailService;
import com.supersavedriving.user.modular.system.warpper.BalanceDetailsWarpper;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
 * 账户变动
@@ -27,4 +29,20 @@
        accountChangeDetail.setCreateTime(new Date());
        this.baseMapper.insert(accountChangeDetail);
    }
    /**
     * 获取余额明细
     * @param uid
     * @param time
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<BalanceDetailsWarpper> queryBalanceDetails(Integer uid, String time, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryBalanceDetails(uid, time, pageNum, pageSize);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/AppUserServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.domain.RechargeDetail;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.user.core.common.constant.JwtConstants;
@@ -10,20 +11,16 @@
import com.supersavedriving.user.core.util.JwtTokenUtil;
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.dao.AppUserMapper;
import com.supersavedriving.user.modular.system.model.AppUser;
import com.supersavedriving.user.modular.system.model.Coupon;
import com.supersavedriving.user.modular.system.model.UserToCoupon;
import com.supersavedriving.user.modular.system.service.IAppUserService;
import com.supersavedriving.user.modular.system.service.ICouponService;
import com.supersavedriving.user.modular.system.service.IUserToCouponService;
import com.supersavedriving.user.modular.system.model.*;
import com.supersavedriving.user.modular.system.service.*;
import com.supersavedriving.user.modular.system.util.PayMoneyUtil;
import com.supersavedriving.user.modular.system.util.RedisUtil;
import com.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.util.UUIDUtil;
import com.supersavedriving.user.modular.system.util.weChat.WXCore;
import com.supersavedriving.user.modular.system.util.weChat.WeChatUtil;
import com.supersavedriving.user.modular.system.util.weChat.model.Code2Session;
import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
import com.supersavedriving.user.modular.system.warpper.SignInToRegister;
import com.supersavedriving.user.modular.system.warpper.SignInToRegisterWarpper;
import com.supersavedriving.user.modular.system.warpper.*;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
@@ -35,6 +32,7 @@
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -60,6 +58,15 @@
    @Autowired
    private IUserToCouponService userToCouponService;
    @Autowired
    private IRechargeRecordService rechargeRecordService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IAccountChangeDetailService accountChangeDetailService;
    @Override
@@ -69,12 +76,9 @@
            return ResultUtil.error(code2Session.getErrmsg());
        }
        String openid = code2Session.getOpenid();
        AppUser appUser = this.selectOne(new EntityWrapper<AppUser>().eq("openid", openid).ne("status", 3));
        AppUser appUser = this.selectOne(new EntityWrapper<AppUser>().eq("openid", openid).eq("status", 1));
        if(null == appUser){
            return ResultUtil.error("无效的账号");
        }
        if(appUser.getStatus() == 2){
            return ResultUtil.error("账号被冻结");
        }
        String token = getToken(appUser);
        if(ToolUtil.isEmpty(token)){
@@ -237,4 +241,116 @@
            return null;
        }
    }
    /**
     * 修改个人信息
     * @param userInfo
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil updateUserInfo(Integer uid, UserInfo userInfo) throws Exception {
        AppUser appUser = this.selectById(uid);
        if(ToolUtil.isNotEmpty(userInfo.getAvatar())){
            appUser.setAvatar(userInfo.getAvatar());
        }
        if(ToolUtil.isNotEmpty(userInfo.getEmergencyContact())){
            appUser.setEmergencyContact(userInfo.getEmergencyContact());
        }
        if(ToolUtil.isNotEmpty(userInfo.getEmergencyPhone())){
            appUser.setEmergencyPhone(userInfo.getEmergencyPhone());
        }
        if(ToolUtil.isNotEmpty(userInfo.getNickname())){
            appUser.setNickname(userInfo.getNickname());
        }
        if(ToolUtil.isNotEmpty(userInfo.getPhone())){
            if(userInfo.getPhone().equals(appUser.getPhone())){
                return ResultUtil.error("新手机不能和原手机号相同");
            }
            String value = redisUtil.getValue("+86" + userInfo.getPhone());
            if(ToolUtil.isEmpty(value) || !value.equals(userInfo.getCode())){
                return ResultUtil.error("验证码无效");
            }
            appUser.setPhone(userInfo.getPhone());
        }
        this.updateById(appUser);
        return ResultUtil.success();
    }
    /**
     * 余额充值
     * @param uid
     * @param amount
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil rechargeBalance(Integer uid, Double amount) throws Exception {
        if(0 >= amount){
            return ResultUtil.error("充值金额必须大于0");
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String out_trade_no = sdf.format(new Date()) + UUIDUtil.getNumberRandom(3);
        AppUser appUser = this.selectById(uid);
        RechargeRecord rechargeRecord = new RechargeRecord();
        rechargeRecord.setType(1);
        rechargeRecord.setUserId(uid);
        rechargeRecord.setCode(out_trade_no);
        rechargeRecord.setAmount(amount);
        rechargeRecord.setCreateTime(new Date());
        rechargeRecord.setPayStatus(1);
        rechargeRecord.setPayType(1);
        rechargeRecordService.insert(rechargeRecord);
        ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/appUser/rechargeBalanceCallback", "JSAPI", appUser.getOpenid());
        return weixinpay;
    }
    /**
     * 余额充值回调
     * @param out_trade_no
     * @param transaction_id
     * @return
     * @throws Exception
     */
    @Override
    public void rechargeBalanceCallback(String out_trade_no, String transaction_id) throws Exception {
        RechargeRecord rechargeRecord1 = rechargeRecordService.selectOne(new EntityWrapper<RechargeRecord>().eq("code", out_trade_no));
        if(rechargeRecord1.getPayStatus() != 1){
            return;
        }
        AppUser appUser = this.selectById(rechargeRecord1.getUserId());
        AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
        accountChangeDetail.setUserType(1);
        accountChangeDetail.setUserId(rechargeRecord1.getUserId());
        accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
        accountChangeDetail.setChangeType(3);
        accountChangeDetail.setType(1);
        accountChangeDetail.setCreateTime(new Date());
        accountChangeDetail.setExplain("余额充值");
        accountChangeDetail.setOldData(appUser.getAccountBalance());
        appUser.setAccountBalance(appUser.getAccountBalance() + rechargeRecord1.getAmount());
        accountChangeDetail.setNewData(appUser.getAccountBalance());
        this.updateById(appUser);
        accountChangeDetailService.saveData(accountChangeDetail);
        rechargeRecord1.setPayTime(new Date());
        rechargeRecord1.setPayStatus(2);
        rechargeRecord1.setOrderNumber(transaction_id);
        rechargeRecordService.updateById(rechargeRecord1);
    }
    /**
     * 获取用户优惠券列表
     * @param uid
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<CouponsWarpper> queryMyCoupons(Integer uid, Integer state, Integer pageNum, Integer pageSize) throws Exception {
        return null;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/BillServiceImpl.java
New file
@@ -0,0 +1,81 @@
package com.supersavedriving.user.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.user.core.util.ToolUtil;
import com.supersavedriving.user.modular.system.dao.BillMapper;
import com.supersavedriving.user.modular.system.model.Bill;
import com.supersavedriving.user.modular.system.model.Order;
import com.supersavedriving.user.modular.system.service.IBillService;
import com.supersavedriving.user.modular.system.service.IOrderService;
import com.supersavedriving.user.modular.system.util.ResultUtil;
import com.supersavedriving.user.modular.system.warpper.BillWarpper;
import com.supersavedriving.user.modular.system.warpper.Invoicing;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
 * @author zhibing.pu
 * @date 2023/3/24 10:07
 */
@Service
public class BillServiceImpl extends ServiceImpl<BillMapper, Bill> implements IBillService {
    @Autowired
    private IOrderService orderService;
    /**
     * 开票操作
     * @param uid
     * @param invoicing
     * @return
     * @throws Exception
     */
    @Override
    public ResultUtil invoicing(Integer uid, Invoicing invoicing) throws Exception {
        if(ToolUtil.isEmpty(invoicing.getOrderIds())){
            return ResultUtil.error("请选择有效的开票订单");
        }
        String[] split = invoicing.getOrderIds().split(",");
        List<Order> orders = orderService.selectBatchIds(Arrays.asList(split));
        for (Order order : orders) {
            if(null != order.getIsInvoice() && order.getIsInvoice() == 1){
                continue;
            }
            Bill bill = new Bill();
            BeanUtils.copyProperties(invoicing, bill);
            bill.setUserId(order.getUserId());
            bill.setOrderId(order.getId().intValue());
            bill.setBillType(1);
            bill.setBillContent("代驾服务费");
            bill.setBillAmount(order.getPayMoney());
            bill.setState(1);
            bill.setCreateTime(new Date());
            this.insert(bill);
            order.setIsInvoice(1);
            orderService.updateById(order);
        }
        return ResultUtil.success();
    }
    /**
     * 获取开票记录
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<BillWarpper> queryBillList(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryBillList(uid, pageNum, pageSize);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/CommercialServiceImpl.java
@@ -37,11 +37,11 @@
    @Override
    public List<CommercialWarpper> queryCommercialList(Integer uid, Integer type, Integer device) throws Exception {
        if(type == 1){//弹框广告
//            CommercialUserEject commercialUserEject = commercialUserEjectService.selectOne(new EntityWrapper<CommercialUserEject>().eq("userType", 2)
//                    .eq("userId", uid).last(" and DATE_FORMAT(now(), '%Y%m%d') = DATE_FORMAT(lastDate, '%Y%m%d')"));
//            if(null != commercialUserEject){
//                return new ArrayList<>();
//            }
            CommercialUserEject commercialUserEject = commercialUserEjectService.selectOne(new EntityWrapper<CommercialUserEject>().eq("userType", 2)
                    .eq("userId", uid).last(" and DATE_FORMAT(now(), '%Y%m%d') = DATE_FORMAT(lastDate, '%Y%m%d')"));
            if(null != commercialUserEject){
                return new ArrayList<>();
            }
        }
        List<CommercialWarpper> commercialWarppers = this.baseMapper.queryCommercialList(type, device);
        if(type == 1 && commercialWarppers.size() > 0){//记录弹窗
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/ComplaintServiceImpl.java
New file
@@ -0,0 +1,48 @@
package com.supersavedriving.user.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.user.modular.system.dao.ComplaintMapper;
import com.supersavedriving.user.modular.system.model.Complaint;
import com.supersavedriving.user.modular.system.model.Order;
import com.supersavedriving.user.modular.system.service.IComplaintService;
import com.supersavedriving.user.modular.system.service.IOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * @author zhibing.pu
 * @date 2023/3/24 16:07
 */
@Service
public class ComplaintServiceImpl extends ServiceImpl<ComplaintMapper, Complaint> implements IComplaintService {
    @Autowired
    private IOrderService orderService;
    /**
     * 投诉反馈
     * @param orderId
     * @param content
     * @throws Exception
     */
    @Override
    public void feedback(Integer uid, Integer orderId, String content) throws Exception {
        Complaint complaint = new Complaint();
        complaint.setUserId(uid);
        if(null != orderId){
            Order order = orderService.selectById(orderId);
            complaint.setOrderId(orderId);
            complaint.setDriverId(order.getDriverId());
        }
        complaint.setReason(content);
        complaint.setState(1);
        complaint.setStatus(1);
        complaint.setCreateTime(new Date());
        this.updateById(complaint);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -118,7 +118,8 @@
        String city = "";
        District geocode = MapUtil.geocode(estimatedCosts.getStartLng().toString(), estimatedCosts.getStartLat().toString());
        if(null != geocode){
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        Order order = getOrderPrice(1, d, 0, new Order(), city);
@@ -270,28 +271,36 @@
        }
        //恶劣天气
        boolean badWeather = WeatherUtil.isBadWeather(city);
        if(badWeather){
            order.setBadWeatherDistance(num5);//恶劣天气公里
            order.setBadWeatherPrice(num6);//恶劣天气费
            if(distance.compareTo(num7) > 0){
                BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
                BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
                order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
                order.setOverBadWeatherPrice(multiply.doubleValue());//恶劣天气超出公里费
            }
        systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
        if(null != systemConfig){
            JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
            Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
            if(1 == num11){
                boolean badWeather = WeatherUtil.isBadWeather(city);
                if(badWeather){
                    order.setBadWeatherDistance(num5);//恶劣天气公里
                    order.setBadWeatherPrice(num6);//恶劣天气费
                    if(distance.compareTo(num7) > 0){
                        BigDecimal subtract = new BigDecimal(distance).subtract(new BigDecimal(num7));
                        BigDecimal multiply = subtract.multiply(new BigDecimal(num8));
                        order.setOverBadWeatherDistance(subtract.doubleValue());//恶劣天气超出公里
                        order.setOverBadWeatherPrice(multiply.doubleValue());//恶劣天气超出公里费
                    }
            double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
            if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
                if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
                    order.setBadWeatherPrice(num9);//恶劣天气费
                    order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
                }else{
                    BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                    order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                    double add = new BigDecimal(order.getOverBadWeatherPrice()).add(new BigDecimal(order.getBadWeatherPrice())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
                    if(num9.compareTo(add) < 0){//超出最高金额(重新调整金额)
                        if(num9.compareTo(num6) < 0){//如果恶劣天气费大于最高金额
                            order.setBadWeatherPrice(num9);//恶劣天气费
                            order.setOverBadWeatherPrice(0D);//恶劣天气超出公里费
                        }else{
                            BigDecimal subtract = new BigDecimal(num9).subtract(new BigDecimal(add));
                            order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费
                        }
                    }
                }
            }
        }
        //计算总金额
        BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() +
@@ -357,6 +366,16 @@
        if(null != order){
            return ResultUtil.error("您还有正在进行的订单");
        }
        String startAddress = travelOrder.getStartAddress();
        startAddress = startAddress.replaceAll("& #40;", "(");
        startAddress = startAddress.replaceAll("& #41;", ")");
        travelOrder.setStartAddress(startAddress);;
        String endAddress = travelOrder.getEndAddress();
        endAddress = endAddress.replaceAll("& #40;", "(");
        endAddress = endAddress.replaceAll("& #41;", ")");
        travelOrder.setEndAddress(endAddress);
        order = new Order();
        BeanUtils.copyProperties(travelOrder, order);
        if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
@@ -382,7 +401,8 @@
        String city = "";
        District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
        if(null != geocode){
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        order = getOrderPrice(1, d, 0, order, city);
@@ -409,8 +429,11 @@
            //推送状态
            pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
            if(null != travelOrder.getDriverId()){
                pushUtil.pushOrderStatus(travelOrder.getDriverId(), 2, order.getId(), order.getState());
            if(null != order.getDriverId()){
                PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
                pushOrderInfoWarpper.setId(order.getId());
                pushOrderInfoWarpper.setState(order.getState());
                pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
            }else{
                //推单
                pushOrder(order);
@@ -446,7 +469,7 @@
        //1
        //找到中心点
        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLat), Double.valueOf(startLng));
        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLng), Double.valueOf(startLat));
        Double num = num3 / 1000;//范围公里
        //构造半径
        Distance distanceR = new Distance(num, Metrics.KILOMETERS);
@@ -467,6 +490,10 @@
                if(ToolUtil.isEmpty(value)){
                    continue;
                }
                Driver driver1 = driverService.selectById(youTuiDriver.getDriverId());
                if(driver1.getServerStatus() == 2){
                    continue;
                }
                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                Double wgs84 = distance.get("WGS84");
                if(d == null || d.compareTo(wgs84) > 0){
@@ -484,6 +511,9 @@
        //开始范围查找
        if(null == driver){
            for (int i = 1; i < 4; i++) {
                if(null != driver){
                    break;
                }
                num = jsonObject.getDouble("num" + i) / 1000;//范围公里
                //构造半径
                distanceR = new Distance(num, Metrics.KILOMETERS);
@@ -504,6 +534,10 @@
                    Double score = null;
                    Double d = null;
                    for (Driver driver1 : drivers) {
                        String value = redisUtil.getValue("DRIVER" + driver1.getId());
                        if(ToolUtil.isEmpty(value)){
                            continue;
                        }
                        if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
                            integral = driver1.getIntegral();
                            score = driver1.getScore();
@@ -517,10 +551,6 @@
                            continue;
                        }
                        if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
                            if(ToolUtil.isEmpty(value)){
                                continue;
                            }
                            Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
                            Double wgs84 = distance.get("WGS84");
                            if(d == null || d.compareTo(wgs84) > 0){
@@ -577,9 +607,24 @@
        cancelOrder.setStatus(1);
        cancelOrder.setCreateTime(new Date());
        cancelOrderService.insert(cancelOrder);
        order.setState(301);
        this.updateById(order);
        AppUser appUser = appUserService.selectById(uid);
        appUser.setCancelCount(appUser.getCancelCount() + 1);
        appUserService.updateById(appUser);
        Driver driver = driverService.selectById(order.getDriverId());
        if(null != driver){
            driver.setServerStatus(1);
            driverService.updateById(driver);
        }
        pushUtil.pushOrderStatus(uid, 1, orderId, order.getState());
        if(null != order.getDriverId()){
            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
            pushOrderInfoWarpper.setId(order.getId());
            pushOrderInfoWarpper.setState(order.getState());
            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
        }
        return ResultUtil.success();
    }
@@ -593,7 +638,19 @@
     */
    @Override
    public OrderInfoWarpper queryOrderInfo(Integer uid, Long orderId) throws Exception {
        return this.baseMapper.queryOrderInfo(uid, orderId);
        OrderInfoWarpper orderInfoWarpper = this.baseMapper.queryOrderInfo(uid, orderId);
        SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 7));
        if(null != systemConfig){
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            orderInfoWarpper.setServiceCell(jsonObject.getString("num1"));
        }
        String value = redisUtil.getValue("DRIVER" + orderInfoWarpper.getDriverId());
        if(ToolUtil.isNotEmpty(value)){
            String[] split = value.split(",");
            orderInfoWarpper.setDriverLon(split[0]);
            orderInfoWarpper.setDriverLat(split[1]);
        }
        return orderInfoWarpper;
    }
@@ -623,7 +680,8 @@
        String city = "";
        District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
        if(null != geocode){
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>().where(" '" + geocode.getDistrict() + "' like district"));
            WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
                    .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
            city = null != weatherCity ? weatherCity.getId().toString() : "";
        }
        Order order1 = new Order();
@@ -827,6 +885,15 @@
        order.setState(108);
        this.updateById(order);
        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
        if(null != order.getDriverId()) {
            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
            pushOrderInfoWarpper.setId(order.getId());
            pushOrderInfoWarpper.setState(order.getState());
            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
        }
        AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
        accountChangeDetail.setUserType(1);
        accountChangeDetail.setUserId(appUser.getId());
@@ -834,6 +901,7 @@
        accountChangeDetail.setOldData(appUser.getAccountBalance());
        accountChangeDetail.setType(1);
        accountChangeDetail.setChangeType(2);
        accountChangeDetail.setOrderId(order.getId());
        accountChangeDetail.setExplain("代驾服务费");
        appUser.setAccountBalance(appUser.getAccountBalance() - payMoney);
        accountChangeDetail.setNewData(appUser.getAccountBalance());
@@ -878,6 +946,7 @@
        accountChangeDetail.setOldData(appUser.getAccountBalance());
        accountChangeDetail.setType(1);
        accountChangeDetail.setChangeType(2);
        accountChangeDetail.setOrderId(order.getId());
        accountChangeDetail.setExplain("代驾服务费");
        appUser.setAccountBalance(appUser.getAccountBalance() > payMoney ? appUser.getAccountBalance() - payMoney : 0);
        accountChangeDetail.setNewData(appUser.getAccountBalance());
@@ -943,6 +1012,18 @@
                                    Thread.sleep(wait);
                                    num++;
                                }
                            }else{
                                Thread.sleep(wait);
                                num++;
                            }
                            if(10 == num){
                                AccountChangeDetail accountChangeDetail1 = accountChangeDetailService.selectById(accountChangeDetail.getId());
                                AppUser appUser1 = appUserService.selectById(accountChangeDetail1.getUserId());
                                Double b = accountChangeDetail1.getOldData() - accountChangeDetail1.getNewData();
                                appUser1.setAccountBalance(appUser1.getAccountBalance() + b);
                                appUserService.updateById(appUser1);
                                accountChangeDetailService.deleteById(accountChangeDetail.getId());
                            }
                        }
                    }catch (Exception e){
@@ -977,6 +1058,14 @@
        this.updateById(order);
        //添加收入明细
        saveCommission(order);
        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
        if(null != order.getDriverId()) {
            PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
            pushOrderInfoWarpper.setId(order.getId());
            pushOrderInfoWarpper.setState(order.getState());
            pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
        }
        return ResultUtil.success();
    }
@@ -1007,7 +1096,7 @@
        evaluate.setUserId(uid);
        evaluateService.insert(evaluate);
        Driver driver = driverService.selectById(order.getDriverId());
        driver.setScore((driver.getScore() + score) / 2);
        driver.setScore(((null == driver.getScore() ? 0 : driver.getScore()) + score) / 2);
        if(score == 5){//司机积分奖励
            SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
            if(null != systemConfig){
@@ -1306,6 +1395,7 @@
        accountChangeDetail.setUserId(driver.getId());
        accountChangeDetail.setType(1);
        accountChangeDetail.setChangeType(1);
        accountChangeDetail.setOrderId(order.getId());
        accountChangeDetail.setOldData(driver.getBalance() + driver.getCouponBalance());
        accountChangeDetail.setExplain("订单收入");
        accountChangeDetail.setCreateTime(new Date());
@@ -1317,4 +1407,32 @@
        driverService.updateById(driver);
        accountChangeDetailService.saveData(accountChangeDetail);
    }
    /**
     * 获取乘客行程
     * @param uid
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<OrderListWarpper> queryMyOrder(Integer uid, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryMyOrder(uid, pageNum, pageSize);
    }
    /**
     * 获取未开票订单
     * @param uid
     * @return
     * @throws Exception
     */
    @Override
    public List<OrderListWarpper> queryNotInvoiceOrder(Integer uid, NotInvoiceOrder notInvoiceOrder) throws Exception {
        notInvoiceOrder.setPageNum((notInvoiceOrder.getPageNum() - 1) * notInvoiceOrder.getPageSize());;
        return this.baseMapper.queryNotInvoiceOrder(uid, notInvoiceOrder);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/RechargeRecordServiceImpl.java
New file
@@ -0,0 +1,15 @@
package com.supersavedriving.user.modular.system.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.user.modular.system.dao.RechargeRecordMapper;
import com.supersavedriving.user.modular.system.model.RechargeRecord;
import com.supersavedriving.user.modular.system.service.IRechargeRecordService;
import org.springframework.stereotype.Service;
/**
 * @author zhibing.pu
 * @date 2023/3/23 14:57
 */
@Service
public class RechargeRecordServiceImpl extends ServiceImpl<RechargeRecordMapper, RechargeRecord> implements IRechargeRecordService {
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/SystemConfigServiceImpl.java
@@ -1,10 +1,20 @@
package com.supersavedriving.user.modular.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.supersavedriving.user.modular.system.dao.SystemConfigMapper;
import com.supersavedriving.user.modular.system.model.SystemConfig;
import com.supersavedriving.user.modular.system.service.ISystemConfigService;
import com.supersavedriving.user.modular.system.warpper.PriceRulesWarpper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 系统配置
@@ -13,4 +23,71 @@
*/
@Service
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig> implements ISystemConfigService {
    /**
     * 获取价格表
     * @return
     * @throws Exception
     */
    @Override
    public PriceRulesWarpper queryPriceRules() throws Exception {
        SystemConfig systemConfig = this.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
        PriceRulesWarpper priceRulesWarpper = new PriceRulesWarpper();
        if(null != systemConfig){
            //{"ChargeStandard":[{"num1":"06:00","num2":"08:00","num3":2,"num4":2,"num5":2,"num6":2,"num7":2,"num8":2,"num9":2,"num10":2,"num11":2},{"num1":"06:00","num2":"08:00","num3":1,"num4":1,"num5":1,"num6":1,"num7":2,"num8":2,"num9":2,"num10":2,"num11":2},{"num1":"00:00","num2":"10:00","num3":3,"num4":3,"num5":3,"num6":3,"num7":3,"num8":3,"num9":3,"num10":3,"num11":3}],"ExtraCost":{"num1":1,"num2":1,"num3":1,"num4":1,"num5":1,"num6":1,"num7":1,"num8":1,"num9":1}}
            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
            JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
            List<Map<String, Object>> basePrice = new ArrayList<>();
            List<Map<String, Object>> longDistanceCharges = new ArrayList<>();
            for (int i = 0; i < chargeStandard.size(); i++) {
                JSONObject jsonObject1 = chargeStandard.getJSONObject(i);
                String num1 = jsonObject1.getString("num1");
                String num2 = jsonObject1.getString("num2");
                Double num3 = jsonObject1.getDouble("num3");
                Double num4 = jsonObject1.getDouble("num4");
                Double num5 = jsonObject1.getDouble("num5");
                Double num6 = jsonObject1.getDouble("num6");
                Double num7 = jsonObject1.getDouble("num7");
                Double num8 = jsonObject1.getDouble("num8");
                Double num9 = jsonObject1.getDouble("num9");
                Double num10 = jsonObject1.getDouble("num10");
                Double num11 = jsonObject1.getDouble("num11");
                Map<String, Object> map1 = new HashMap<>();
                map1.put("time", num1 + "-" + num2);
                map1.put("startingMileage", num3 + "公里(包含" + num3 + "公里)");
                map1.put("startingPrice", num4 + "元");
                map1.put("exceedStartingPrice", num6 + "元/" + num5 + "公里");
                basePrice.add(map1);
                Map<String, Object> map2 = new HashMap<>();
                map2.put("time", num1 + "-" + num2);
                map2.put("startingMileage", num7 + "-" + num8 + "公里");
                map2.put("startingPrice", num9 + "元");
                map2.put("exceedStartingPrice", num11 + "元/" + num10 + "公里");
                longDistanceCharges.add(map2);
            }
            priceRulesWarpper.setBasePrice(JSON.toJSONString(basePrice));
            priceRulesWarpper.setLongDistanceCharges(JSON.toJSONString(longDistanceCharges));
            //额外费用
            JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
            Integer num1 = extraCost.getInteger("num1");
            Double num2 = extraCost.getDouble("num2");
            Integer num3 = extraCost.getInteger("num3");
            Double num4 = extraCost.getDouble("num4");
            Double num5 = extraCost.getDouble("num5");
            Double num6 = extraCost.getDouble("num6");
            Double num7 = extraCost.getDouble("num7");
            Double num8 = extraCost.getDouble("num8");
            Double num9 = extraCost.getDouble("num9");
            Map<String, Object> map = new HashMap<>();
            map.put("waitTime", num1 + "分钟/" + num2 + "元");
            map.put("exceedWaitTime", "超出" + num3 + "分钟,收取" + num4 + "元/分钟");
            map.put("badWeather", num5 + "公里内加收" + num6 + "元,超过" + num7 + "公里按照订单单价的" + num8 + "倍计费,最高收取" + num9 + "元");
            priceRulesWarpper.setAdditionalFee(JSON.toJSONString(map));
        }
        return priceRulesWarpper;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/UserToCouponServiceImpl.java
@@ -6,6 +6,7 @@
import com.supersavedriving.user.modular.system.model.UserToCoupon;
import com.supersavedriving.user.modular.system.service.IUserToCouponService;
import com.supersavedriving.user.modular.system.warpper.CouponWarpper;
import com.supersavedriving.user.modular.system.warpper.CouponsWarpper;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -41,4 +42,24 @@
    public List<CouponWarpper> queryPayCouponList(Integer uid, Double price) throws Exception {
        return this.baseMapper.queryPayCouponList(uid, price);
    }
    /**
     * 获取用户优惠券列表
     * @param uid
     * @param state
     * @param pageNum
     * @param pageSize
     * @return
     * @throws Exception
     */
    @Override
    public List<CouponsWarpper> queryMyCoupons(Integer uid, Integer state, Integer pageNum, Integer pageSize) throws Exception {
        pageNum = (pageNum - 1) * pageSize;
        return this.baseMapper.queryMyCoupons(uid, state, pageNum, pageSize);
    }
    @Override
    public Integer queryUsedCouponNum(Integer uid) {
        return this.baseMapper.queryUsedCouponNum(uid);
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/PayMoneyUtil.java
@@ -72,11 +72,13 @@
    @Value("${callbackPath}")
    private String callbackPath;//支付回调网关地址
    private String app_cert_path = "/usr/local/server/cer/zhifubao/user/app_cert_path.crt";//应用公钥证书路径
    private String app_cert_path = "/usr/local/server/app/cer/zhifubao/user/app_cert_path.crt";//应用公钥证书路径
    private String alipay_cert_path = "/usr/local/server/cer/zhifubao/user/alipay_cert_path.crt";//支付宝公钥证书文件路径
    private String alipay_cert_path = "/usr/local/server/app/cer/zhifubao/user/alipay_cert_path.crt";//支付宝公钥证书文件路径
    private String alipay_root_cert_path = "/usr/local/server/cer/zhifubao/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
    private String alipay_root_cert_path = "/usr/local/server/app/cer/zhifubao/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
    private String weixin_cert_path = "/usr/local/server/app/cert/weixin/apiclient_cert.p12";//微信支付证书
    private Map<String, JSONObject> order = new HashMap<>();//存储支付订单用于主动查询支付结果
@@ -601,8 +603,7 @@
        Map<String, String> map1 = null;
        String body1 = null;
        try {
            String certPath = "/usr/local/server/cert/weixin/apiclient_cert.p12";
            body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
            body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, weixin_cert_path, "PKCS12");
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -855,8 +856,7 @@
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String certPath = "/usr/local/server/cert/weixin/apiclient_cert.p12";//证书地址
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, weixin_cert_path, "PKCS12");
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[","");
        body1 = body1.replaceAll("]]>", "");
@@ -932,8 +932,7 @@
        xmlString.append("</xml>");
        Map<String, String> map1 = null;
        String certPath = "/usr/local/server/cert/weixin/apiclient_cert.p12";//证书地址
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, certPath, "PKCS12");
        String body1 = HttpClientUtil.pushHttpsRequsetXml(url, xmlString.toString(), new HashMap<>(), mchId, weixin_cert_path, "PKCS12");
        //将结果xml解析成map
        body1 = body1.replaceAll("<!\\[CDATA\\[","");
        body1 = body1.replaceAll("]]>", "");
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/PushUtil.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.supersavedriving.user.modular.system.warpper.PushOrderInfoWarpper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -129,6 +130,41 @@
    }
    /**
     * 推送订单数据
     * @param id
     * @param type
     * @param pushOrderInfoWarpper
     */
    public void pushOrderInfo(Integer id, Integer type, PushOrderInfoWarpper pushOrderInfoWarpper){
        JSONObject msg = new JSONObject();
        msg.put("code", 200);
        msg.put("msg", "SUCCESS");
        msg.put("method", "ORDER_INFO");
        msg.put("data", pushOrderInfoWarpper);
        //调用推送
        HttpHeaders headers = new HttpHeaders();
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //将请求头部和参数合成一个请求
        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
        params.add("msg", msg.toJSONString());
        params.add("id", id.toString());
        params.add("type", type.toString());
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
        String s = internalRestTemplate.postForObject("http://zuul-gateway/netty/sendMsgToClient",requestEntity , String.class);
        JSONObject jsonObject1 = JSON.parseObject(s, JSONObject.class);
        if(jsonObject1.getIntValue("code") != 200){
            logger.debug(jsonObject1.getString("msg"));
            System.err.println(jsonObject1.getString("msg"));
        }
    }
    /**
     * 系统推单推送
     * @param id            接受对象id
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/util/huawei/SMSUtil.java
@@ -238,4 +238,13 @@
        sc.init(null, trustAllCerts, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }
    public static void main(String[] ages){
        try {
            SMSUtil.send("15828353127", "1d0f0cbe5b214b0d8efa891730eb532a", "[\"" + 123456 + "\"]");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/BalanceDetailsWarpper.java
New file
@@ -0,0 +1,28 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/23 17:15
 */
@Data
@ApiModel
public class BalanceDetailsWarpper {
    @ApiModelProperty("使用类型(2=支付订单,3=余额充值)")
    private Integer type;
    @ApiModelProperty("使用说明")
    private String explain;
    @ApiModelProperty("起点")
    private String startAddress;
    @ApiModelProperty("终点")
    private String endAddress;
    @ApiModelProperty("时间")
    private Long createTime;
    @ApiModelProperty("变动金额")
    private Double amount;
    @ApiModelProperty("余额")
    private Double balance;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/BillWarpper.java
New file
@@ -0,0 +1,26 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/24 10:50
 */
@Data
@ApiModel
public class BillWarpper {
    @ApiModelProperty("数据id")
    private Integer id;
    @ApiModelProperty("时间")
    private Long createTime;
    @ApiModelProperty("发票内容")
    private String billContent;
    @ApiModelProperty("发票类型 1电子发票")
    private Integer billType;
    @ApiModelProperty("开票金额")
    private Double billAmount;
    @ApiModelProperty("开票状态 1待开票 2已开票 3开票失败")
    private Integer state;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/CouponWarpper.java
@@ -11,6 +11,8 @@
@Data
@ApiModel
public class CouponWarpper {
    @ApiModelProperty("优惠券id")
    private Integer id;
    @ApiModelProperty("满金额")
    private Double couponConditionalAmount;
    @ApiModelProperty("优惠金额")
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/CouponsWarpper.java
New file
@@ -0,0 +1,24 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/23 15:28
 */
@Data
@ApiModel
public class CouponsWarpper {
    @ApiModelProperty("优惠券id")
    private Integer id;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("优惠金额")
    private Double discountAmount;
    @ApiModelProperty("优惠条件")
    private Double preferentialTerms;
    @ApiModelProperty("有效期")
    private Long endTime;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/Invoicing.java
New file
@@ -0,0 +1,30 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/24 9:55
 */
@Data
@ApiModel
public class Invoicing {
    @ApiModelProperty(value = "订单id,多个已逗号分隔", dataType = "string", required = true)
    private String orderIds;
    @ApiModelProperty(value = "发票抬头类型(1=企业,2=个人)", dataType = "int", required = true)
    private Integer billHeaderType;
    @ApiModelProperty(value = "公司名称/个人名称", dataType = "string", required = true)
    private String companyName;
    @ApiModelProperty(value = "公司税号", dataType = "string", required = false)
    private String companyTaxNumber;
    @ApiModelProperty(value = "发票更多内容", dataType = "string", required = true)
    private String moreContent;
    @ApiModelProperty(value = "收件人姓名", dataType = "string", required = true)
    private String addresseeName;
    @ApiModelProperty(value = "收件人手机号", dataType = "string", required = true)
    private String addresseePhone;
    @ApiModelProperty(value = "收件人电子邮箱", dataType = "string", required = true)
    private String addresseeEmail;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/NotInvoiceOrder.java
New file
@@ -0,0 +1,26 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/24 10:30
 */
@Data
@ApiModel
public class NotInvoiceOrder {
    @ApiModelProperty(value = "订单开始时间(2023-01-01)", required = false, dataType = "string")
    private String startTime;
    @ApiModelProperty(value = "订单结束时间(2023-01-01)", required = false, dataType = "string")
    private String endTime;
    @ApiModelProperty(value = "订单开始金额", required = false, dataType = "double")
    private Double startAmount;
    @ApiModelProperty(value = "订单结束金额", required = false, dataType = "double")
    private Double endAmount;
    @ApiModelProperty(value = "页码,首页1", required = true, dataType = "int")
    private Integer pageNum;
    @ApiModelProperty(value = "页条数", required = true, dataType = "int")
    private Integer pageSize;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderInfoWarpper.java
@@ -25,6 +25,8 @@
    private String endLat;
    @ApiModelProperty("终点经度")
    private String endLng;
    @ApiModelProperty("司机id")
    private Integer driverId;
    @ApiModelProperty("司机头像")
    private String driverAvatar;
    @ApiModelProperty("司机名称")
@@ -39,7 +41,19 @@
    private Integer driverNumber;
    @ApiModelProperty("司机评分")
    private Double driverScore;
    @ApiModelProperty("司机位置经度")
    private String driverLon;
    @ApiModelProperty("司机位置纬度")
    private String driverLat;
    @ApiModelProperty("订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中)")
    private Integer state;
    @ApiModelProperty("客服电话")
    private String serviceCell;
    @ApiModelProperty("订单创建时间")
    private Long createTime;
    @ApiModelProperty("订单评分")
    private Integer evaluationScore;
    @ApiModelProperty("评价内容")
    private String evaluationContent;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderListWarpper.java
@@ -2,226 +2,27 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ApiModel("订单列表")
public class OrderListWarpper implements Comparable {
/**
 * @author zhibing.pu
 * @date 2023/3/18 10:22
 */
@Data
@ApiModel
public class OrderListWarpper {
    @ApiModelProperty("订单id")
    private Integer id;
    @ApiModelProperty("订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)")
    private Integer type;
    @ApiModelProperty("订单名称")
    private String name;
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("订单时间")
    private String time;
    @ApiModelProperty("出发地")
    private Long createTime;
    @ApiModelProperty("金额")
    private Double amount;
    @ApiModelProperty("起点地址")
    private String startAddress;
    @ApiModelProperty("目的地")
    @ApiModelProperty("终点地址")
    private String endAddress;
    @ApiModelProperty("红包金额")
    private Double redMoney;
    @ApiModelProperty("订单金额")
    private Double orderMoney;
    @ApiModelProperty("订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中)<br/>" +
            "小件物流订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待取货,5=送货中,6=已送达,7=待支付,8=需补差价,9=已取货,10=已取消,11=已支付差价)")
    @ApiModelProperty("订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中)")
    private Integer state;
    @ApiModelProperty("人数")
    private Integer peopleNumber;
    @ApiModelProperty("下单用户")
    private String user;
    @ApiModelProperty("货物信息")
    private String cargoNumber;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("支付方式(1=OK平台支付(线上支付),2=其他方式支付(线下支付))")
    private Integer payManner;
    private Long travelTime;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public String getStartAddress() {
        return startAddress;
    }
    public void setStartAddress(String startAddress) {
        this.startAddress = startAddress;
    }
    public String getEndAddress() {
        return endAddress;
    }
    public void setEndAddress(String endAddress) {
        this.endAddress = endAddress;
    }
    public Integer getState() {
        return state;
    }
    public void setState(Integer state) {
        this.state = state;
    }
    public Double getRedMoney() {
        return redMoney;
    }
    public void setRedMoney(Double redMoney) {
        this.redMoney = redMoney;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public Double getOrderMoney() {
        return orderMoney;
    }
    public void setOrderMoney(Double orderMoney) {
        this.orderMoney = orderMoney;
    }
    public Integer getPeopleNumber() {
        return peopleNumber;
    }
    public void setPeopleNumber(Integer peopleNumber) {
        this.peopleNumber = peopleNumber;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public Integer getPayManner() {
        return payManner;
    }
    public void setPayManner(Integer payManner) {
        this.payManner = payManner;
    }
    public Long getTravelTime() {
        return travelTime;
    }
    public void setTravelTime(Long travelTime) {
        this.travelTime = travelTime;
    }
    public String getCargoNumber() {
        return cargoNumber;
    }
    public void setCargoNumber(String cargoNumber) {
        this.cargoNumber = cargoNumber;
    }
    @Override
    public String toString() {
        return "OrderListWarpper{" +
                "id=" + id +
                ", type=" + type +
                ", name='" + name + '\'' +
                ", time='" + time + '\'' +
                ", startAddress='" + startAddress + '\'' +
                ", endAddress='" + endAddress + '\'' +
                ", redMoney=" + redMoney +
                ", orderMoney=" + orderMoney +
                ", state=" + state +
                ", peopleNumber=" + peopleNumber +
                ", user='" + user + '\'' +
                ", remark='" + remark + '\'' +
                ", payManner=" + payManner +
                '}';
    }
    public static List<OrderListWarpper> getOrderListWarpper(List<Map<String, Object>> maps){
        List<OrderListWarpper> list = new ArrayList<>();
        if(null != maps){
            for(Map<String, Object> map : maps){
                OrderListWarpper orderListWarpper = new OrderListWarpper();
                orderListWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0);
                orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : "");
                orderListWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : "");
                orderListWarpper.setStartAddress(null != map.get("startAddress") ? String.valueOf(map.get("startAddress")) : "");
                orderListWarpper.setEndAddress(null != map.get("endAddress") ? String.valueOf(map.get("endAddress")) : "");
                orderListWarpper.setState(null != map.get("state") ? Integer.valueOf(String.valueOf(map.get("state"))) : 0);
                orderListWarpper.setRedMoney(null != map.get("redMoney") ? Double.valueOf(String.valueOf(map.get("redMoney"))) : 0);
                orderListWarpper.setOrderMoney(null != map.get("orderMoney") ? Double.valueOf(String.valueOf(map.get("orderMoney"))) : 0);
                orderListWarpper.setType(null != map.get("type") ? Integer.valueOf(String.valueOf(map.get("type"))) : 0);
                orderListWarpper.setPeopleNumber(null != map.get("peopleNumber") ? Integer.valueOf(String.valueOf(map.get("peopleNumber"))) : 0);
                orderListWarpper.setUser(null != map.get("user") ? String.valueOf(map.get("user")) : "");
                orderListWarpper.setCargoNumber(null != map.get("cargoNumber") ? String.valueOf(map.get("cargoNumber")) : "");
                orderListWarpper.setRemark(null != map.get("remark") ? String.valueOf(map.get("remark")) : "");
                orderListWarpper.setPayManner(null != map.get("payManner") ? Integer.valueOf(String.valueOf(map.get("payManner"))) : 0);
                orderListWarpper.setTravelTime(null != map.get("travelTime") ? Long.valueOf(String.valueOf(map.get("travelTime"))) : 0);
                list.add(orderListWarpper);
            }
        }
        Collections.sort(list);
        return list;
    }
    @Override
    public int compareTo(Object o) {
        if (o instanceof OrderListWarpper) {
            OrderListWarpper s = (OrderListWarpper) o;
            if(this.travelTime == null || s.travelTime == null){
                return -1;
            }
            if (this.travelTime > s.travelTime) {
                return -1;
            } else if (this.travelTime == s.travelTime) {
                return 0;
            } else {
                return 1;
            }
        }
        return 0;
    }
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrderStatusWarpper.java
File was deleted
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/OrdersWarpper.java
File was deleted
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/PriceRulesWarpper.java
New file
@@ -0,0 +1,20 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/23 14:16
 */
@Data
@ApiModel
public class PriceRulesWarpper {
    @ApiModelProperty("基础价格")
    private String basePrice;
    @ApiModelProperty("长途公里费用")
    private String longDistanceCharges;
    @ApiModelProperty("额外费")
    private String additionalFee;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/PushOrderInfoWarpper.java
New file
@@ -0,0 +1,24 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class PushOrderInfoWarpper {
    @ApiModelProperty("订单id")
    private Long id;
    @ApiModelProperty("司机纬度")
    private String driverLat;
    @ApiModelProperty("司机经度")
    private String driverLng;
    @ApiModelProperty("等待时长(分钟)")
    private Integer waitTime;
    @ApiModelProperty("行驶里程(公里)")
    private Double actualMileage;
    @ApiModelProperty("行驶时间(分钟)")
    private Integer travelTime;
    @ApiModelProperty("101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中")
    private Integer state;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/TravelOrder.java
@@ -11,16 +11,16 @@
@Data
@ApiModel
public class TravelOrder {
    @ApiModelProperty(value = "起点纬度", dataType = "double", required = true)
    private Double startLat;
    @ApiModelProperty(value = "起点经度", dataType = "double", required = true)
    private Double startLng;
    @ApiModelProperty(value = "起点纬度", dataType = "string", required = true)
    private String startLat;
    @ApiModelProperty(value = "起点经度", dataType = "string", required = true)
    private String startLng;
    @ApiModelProperty(value = "起点地址", dataType = "string", required = true)
    private String startAddress;
    @ApiModelProperty(value = "终点纬度", dataType = "double", required = false)
    private Double endLat;
    @ApiModelProperty(value = "终点经度", dataType = "double", required = false)
    private Double endLng;
    @ApiModelProperty(value = "终点纬度", dataType = "string", required = false)
    private String endLat;
    @ApiModelProperty(value = "终点经度", dataType = "string", required = false)
    private String endLng;
    @ApiModelProperty(value = "终点地址", dataType = "string", required = false)
    private String endAddress;
    @ApiModelProperty(value = "司机数量", dataType = "int", required = true)
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/UserInfo.java
New file
@@ -0,0 +1,26 @@
package com.supersavedriving.user.modular.system.warpper;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @date 2023/3/23 10:00
 */
@Data
@ApiModel
public class UserInfo {
    @ApiModelProperty(value = "头像", required = false, dataType = "string")
    private String avatar;
    @ApiModelProperty(value = "紧急联系人", required = false, dataType = "string")
    private String emergencyContact;
    @ApiModelProperty(value = "紧急联系人电话", required = false, dataType = "string")
    private String emergencyPhone;
    @ApiModelProperty(value = "姓名", required = false, dataType = "string")
    private String nickname;
    @ApiModelProperty(value = "手机号", required = false, dataType = "string")
    private String phone;
    @ApiModelProperty(value = "验证码", required = false, dataType = "string")
    private String code;
}
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/warpper/UserInfoWarpper.java
@@ -25,4 +25,6 @@
    private String emergencyContact;
    @ApiModelProperty("紧急人电话")
    private String emergencyPhone;
    @ApiModelProperty("客服电话")
    private String serviceCell;
}
user/guns-admin/src/main/resources/application.yml
@@ -13,8 +13,8 @@
  application:
    name: user-server
  profiles:
    active: dev
#    active: produce
#    active: dev
    active: produce
  mvc:
    static-path-pattern: /static/**
    view:
@@ -50,20 +50,13 @@
---
#spring:
#  datasource:
#    url: jdbc:mysql://Rm-wz9rpe0t74ys3b1h8go.mysql.rds.aliyuncs.com:3306/oktravel?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
#    username: root
#    password: Root2020!
#    db-name: guns #用来搜集数据库的所有表
#    filters: wall,mergeStat
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/super_save_driving?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    password: f4OfRjqoN3jSiNGiUoiNsQdOBtCOKYRj
#    password: 123456
    db-name: guns #用来搜集数据库的所有表
    filters: wall,mergeStat
@@ -94,6 +87,7 @@
  webAppSecret: 11
  mchId: 1636941942 #微信支付分配的商户号
  key: Eri2GR2SB3b6iIhaoD7k3KQ8X0wf1Ybh #key为商户平台设置的密钥key:
  apiv3: AKJ51Z4nhSqYBxmOXgUyCKA1vLP0J5Aj #key为商户平台设置的密钥key:
---
@@ -120,20 +114,21 @@
---
filePath: /usr/local/server/orderPostionFile/ #存储订单轨迹文件路径
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#filePath: C:/orderPostionFile/  #存储订单轨迹文件路径
#支付回调地址
#正式环境
callbackPath: https://okyueche.com:443/user
#callbackPath: http://121.37.15.157:80/user
#正式测试环境
#callbackPath: http://39.108.148.228:80/user
callbackPath: http://121.37.15.157:80/user
---
spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/admin
      uri: mongodb://root:CEtyLdKjPk0yeHNo@127.0.0.1:27017/admin
#      uri: mongodb://127.0.0.1:27017/admin
user/guns-admin/src/main/resources/logback-spring.xml
@@ -7,8 +7,8 @@
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量。 -->
    <!--<property name="log.path" value="/usr/local/server/logs"/>-->
    <property name="log.path" value="d:/logs/user"/>
    <property name="log.path" value="/usr/local/server/app/logs"/>
    <!--<property name="log.path" value="d:/logs/user"/>-->
    <!--0. 日志格式和颜色渲染 -->
    <!-- 彩色日志依赖的渲染类 -->
user/guns-admin/src/main/resources/redis.properties
@@ -4,10 +4,17 @@
# Redis·þÎñÆ÷µØÖ·
spring.redis.host=127.0.0.1
# Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
spring.redis.port=6379
spring.redis.port=16379
# Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£©
spring.redis.password=123456
#spring.redis.password=
spring.redis.password=cKsEeyffDXG5PzNg8CIbrWxFluXrCprZ
## Redis·þÎñÆ÷µØÖ·
#spring.redis.host=127.0.0.1
## Redis·þÎñÆ÷Á¬½Ó¶Ë¿Ú
#spring.redis.port=6379
## Redis·þÎñÆ÷Á¬½ÓÃÜÂ루ĬÈÏΪ¿Õ£©
#spring.redis.password=123456
# Á¬½Ó³Ø×î´óÁ¬½ÓÊý£¨Ê¹ÓøºÖµ±íʾûÓÐÏÞÖÆ£©
spring.redis.jedis.pool.max-active=1024
# Á¬½Ó³Ø×î´ó×èÈûµÈ´ýʱ¼ä£¨Ê¹ÓøºÖµ±íʾûÓÐÏÞÖÆ£©