puzhibing
2023-06-02 f604f87781d7cdae5571465a3bafffff53313028
Merge remote-tracking branch 'origin/1.1' into 1.1
11个文件已修改
12个文件已添加
2547 ■■■■ 已修改文件
management/guns-admin/pom.xml 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ApiController.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAgent.java 357 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/config/ChannelConfig.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/BindAccount.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Register.java 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/UnbindAccount.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/Base64.java 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/CacheUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSAEncryptGeneration.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/StringUtil.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/TrhRequest.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/resources/application.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html 248 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
super_save_driving.sql 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/pom.xml
@@ -15,23 +15,7 @@
    </parent>
    <packaging>war</packaging>
    <properties>
        <hutool.version>5.3.8</hutool.version>
    </properties>
    <dependencies>
        <!-- hutool工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>${hutool.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-crypto</artifactId>
            <version>${hutool.version}</version>
        </dependency>
        <!--<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
@@ -227,6 +211,16 @@
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.wechatpay-apiv3</groupId>
            <artifactId>wechatpay-java-shangmi</artifactId>
            <version>0.2.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
        </dependency>
    </dependencies>
management/guns-admin/src/main/java/com/stylefeng/guns/config/web/ShiroConfig.java
@@ -161,6 +161,7 @@
         */
        Map<String, String> hashMap = new LinkedHashMap<>();
        hashMap.put("/static/**", "anon");
        hashMap.put("/base/**", "anon");
        hashMap.put("/gunsApi/**", "anon");
        hashMap.put("/login", "anon");
        hashMap.put("/global/sessionError", "anon");
management/guns-admin/src/main/java/com/stylefeng/guns/modular/api/ApiController.java
@@ -1,22 +1,26 @@
package com.stylefeng.guns.modular.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.base.tips.ErrorTip;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.shiro.ShiroUser;
import com.stylefeng.guns.core.util.JwtTokenUtil;
import com.stylefeng.guns.modular.system.dao.UserMapper;
import com.stylefeng.guns.modular.system.model.TAgent;
import com.stylefeng.guns.modular.system.model.User;
import com.stylefeng.guns.modular.system.service.ITAgentService;
import com.stylefeng.guns.modular.system.util.MallBook.model.BindAccount;
import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceResponse;
import com.stylefeng.guns.modular.system.util.MallBook.util.TrhRequest;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
@@ -27,53 +31,83 @@
 * @Date 2018/7/20 23:39
 */
@RestController
@RequestMapping("/gunsApi")
@RequestMapping("")
public class ApiController extends BaseController {
    @Autowired
    private UserMapper userMapper;
    private ITAgentService tAgentService;
    /**
     * api登录接口,通过账号密码获取token
     */
    @RequestMapping("/auth")
    public Object auth(@RequestParam("username") String username,
                       @RequestParam("password") String password) {
        //封装请求账号密码为shiro可验证的token
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password.toCharArray());
        //获取数据库中的账号密码,准备比对
        User user = userMapper.getByAccount(username);
        String credentials = user.getPassword();
        String salt = user.getSalt();
        ByteSource credentialsSalt = new Md5Hash(salt);
        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(
                new ShiroUser(), credentials, credentialsSalt, "");
    @ResponseBody
    @PostMapping("/base/driver/microenterpriseCallback")
    public void microenterpriseCallback(@RequestBody InterfaceResponse response){
        if("0000".equals(response.getCode())){
            JSONObject jsonObject = JSON.parseObject(response.getResult());
            String status = jsonObject.getString("status");
            String parameter1 = jsonObject.getString("parameter1");
            TAgent tAgent = tAgentService.selectById(parameter1);
            if("2".equals(status)){
                tAgent.setMerchantStatus(2);
                tAgentService.updateById(tAgent);
                System.err.println("注册代理商子商户失败");
            }
            if("0".equals(status)){
                tAgent.setMerchantStatus(0);
                tAgentService.updateById(tAgent);
                System.err.println("注册代理商子商户处理中");
            }
            if("1".equals(status)){
                String userId = jsonObject.getString("userId");
                tAgent.setMerchantNumber(userId);
                tAgent.setMerchantStatus(1);
                tAgentService.updateById(tAgent);
        //校验用户账号密码
        HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher();
        md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName);
        md5CredentialsMatcher.setHashIterations(ShiroKit.hashIterations);
        boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch(
                usernamePasswordToken, simpleAuthenticationInfo);
        if (passwordTrueFlag) {
            HashMap<String, Object> result = new HashMap<>();
            result.put("token", JwtTokenUtil.generateToken(String.valueOf(user.getId())));
            return result;
        } else {
            return new ErrorTip(500, "账号密码错误!");
                //开始绑定结算账户
                BindAccount bindAccount = new BindAccount();
                bindAccount.setUserId(tAgent.getMerchantNumber());
                bindAccount.setCertId(tAgent.getMerchantIDCode());
                bindAccount.setCardName(tAgent.getCardName());
                bindAccount.setCardNo(tAgent.getCardNo());
                bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
                bindAccount.setPhone(tAgent.getPhone());
                bindAccount.setBankCode(tAgent.getBankCode());
                /**
                 * 省份编码
                 */
                bindAccount.setProvCode("0035");
                /**
                 * 地区编码
                 */
                bindAccount.setAreaCode("3501");
                TrhRequest<BindAccount> request = new TrhRequest();
                InterfaceResponse execute = request.execute(bindAccount, BindAccount.SERVICE_CODE);
                if("0000".equals(execute.getCode())){
                    JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
                    String status1 = jsonObject1.getString("status");
                    if("2".equals(status1)){
                        tAgent.setBankStatus(2);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户失败" );
                    }
                    if("1".equals(status1)){
                        tAgent.setBankStatus(1);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户成功");
                    }
                    if("0".equals(status1)){
                        tAgent.setBankStatus(0);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户处理中");
                    }
                }else{
                    System.err.println("绑定结算账户失败:" + execute.getMsg());
                }
            }
        }else{
            System.err.println("注册代理商子商户异常:" + response.getMsg());
        }
    }
    /**
     * 测试接口是否走鉴权
     */
    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public Object test() {
        return SUCCESS_TIP;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
@@ -1,6 +1,8 @@
package com.stylefeng.guns.modular.system.controller.general;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.base.tips.SuccessTip;
@@ -16,6 +18,10 @@
import com.stylefeng.guns.modular.system.enums.UserTypeEnum;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.MallBook.model.BindAccount;
import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceResponse;
import com.stylefeng.guns.modular.system.util.MallBook.model.Register;
import com.stylefeng.guns.modular.system.util.MallBook.util.TrhRequest;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -23,18 +29,16 @@
import org.apache.poi.hdf.extractor.TC;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.beans.factory.annotation.Autowired;
import com.stylefeng.guns.core.log.LogObjectHolder;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
@@ -70,6 +74,9 @@
    private IUserService userService;
    @Autowired
    private RedisUtil redisUtil;
    @Value("${callbackPath}")
    private String callbackPath;
    /**
@@ -214,9 +221,111 @@
        user.setSex(1);
        userService.insert(user);
        return SUCCESS_TIP;
    }
    public void registeredMerchant(TAgent tAgent){
        Register registerVO = new Register();
        registerVO.setMerUserId("agent_" + tAgent.getId());
        registerVO.setPhone(tAgent.getPrincipalPhone());
        registerVO.setUserType(tAgent.getUserType().toString());
        registerVO.setUserName(tAgent.getMerchantName());
        registerVO.setCertId(tAgent.getMerchantIDCode());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires()));
        registerVO.setBusinessScope(tAgent.getBusinessScope());
        registerVO.setSocialCreditCode(tAgent.getSocialCreditCode());
        registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires()));
        registerVO.setLegalPhone(tAgent.getLegalPhone());
        registerVO.setLegalPerson(tAgent.getLegalPerson());
        registerVO.setAddress(tAgent.getAddress());
        /**
         * 省份编码(子商户类型非小微必填) 字段长度最长:4位
         */
        registerVO.setProvCode("0035");
        /**
         * 地区编码(子商户类型非小微必填) 字段长度最长:4位
         */
        registerVO.setAreaCode("3501");
        registerVO.setFileNo(tAgent.getFileNo());
        registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
        registerVO.setParameter1(tAgent.getId().toString());
        TrhRequest<Register> request = new TrhRequest();
        InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE);
        if("0000".equals(response.getCode())){
            JSONObject jsonObject = JSON.parseObject(response.getResult());
            String status = jsonObject.getString("status");
            if("2".equals(status)){
                tAgent.setMerchantStatus(2);
                tAgentService.updateById(tAgent);
                System.err.println("注册代理商子商户失败");
            }
            if("0".equals(status)){
                tAgent.setMerchantStatus(0);
                tAgentService.updateById(tAgent);
                System.err.println("注册代理商子商户处理中");
            }
            if("1".equals(status)){
                String userId = jsonObject.getString("userId");
                tAgent.setMerchantNumber(userId);
                tAgent.setMerchantStatus(1);
                tAgentService.updateById(tAgent);
                //开始绑定结算账户
                BindAccount bindAccount = new BindAccount();
                bindAccount.setUserId(tAgent.getMerchantNumber());
                bindAccount.setCertId(tAgent.getMerchantIDCode());
                bindAccount.setCardName(tAgent.getCardName());
                bindAccount.setCardNo(tAgent.getCardNo());
                bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
                bindAccount.setPhone(tAgent.getPhone());
                bindAccount.setBankCode(tAgent.getBankCode());
                /**
                 * 省份编码
                 */
                bindAccount.setProvCode("0035");
                /**
                 * 地区编码
                 */
                bindAccount.setAreaCode("3501");
                TrhRequest<BindAccount> request1 = new TrhRequest();
                InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
                if("0000".equals(execute.getCode())){
                    JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
                    String status1 = jsonObject1.getString("status");
                    if("2".equals(status1)){
                        tAgent.setBankStatus(2);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户失败" );
                    }
                    if("1".equals(status1)){
                        tAgent.setBankStatus(1);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户成功");
                    }
                    if("0".equals(status1)){
                        tAgent.setBankStatus(0);
                        tAgentService.updateById(tAgent);
                        System.err.println("绑定结算账户处理中");
                    }
                }else{
                    System.err.println("绑定结算账户失败:" + execute.getMsg());
                }
            }
        }else{
            System.err.println("注册代理商子商户异常:" + response.getMsg());
        }
    }
    /**
     * 删除
     */
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBranchOfficeController.java
@@ -96,14 +96,14 @@
        TRegion district = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", tBranchOffice.getDistrictCode())
                .last("LIMIT 1"));
        if(StringUtils.hasLength(tBranchOffice.getDistrictName())){
        if(StringUtils.hasLength(tBranchOffice.getDistrictName()) && !tBranchOffice.getDistrictName().equals(tBranchOffice.getCityName())){
            tBranchOfficeResp.setArea(tBranchOffice.getProvinceName()+"/"+tBranchOffice.getCityName()+"/"+tBranchOffice.getDistrictName());
        }else {
            tBranchOfficeResp.setArea(tBranchOffice.getProvinceName()+"/"+tBranchOffice.getCityName());
        }
        if(Objects.nonNull(city)){
            if(Objects.nonNull(district)){
            if(Objects.nonNull(district) && !district.getCode().equals(city.getCode())){
                tBranchOfficeResp.setAreaId(city.getParentId()+"/"+city.getId()+"/"+district.getId());
            }else {
                tBranchOfficeResp.setAreaId(city.getParentId()+"/"+city.getId());
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -147,9 +147,22 @@
        TRegion city = tRegionService.selectOne(new EntityWrapper<TRegion>().eq("code", tDriver.getCityCode())
                .last("LIMIT 1"));
        tDriverResp.setArea(tDriver.getProvinceName()+"/"+tDriver.getCityName()+"/"+tDriver.getAreaName());
        if(Objects.nonNull(district) && Objects.nonNull(city)){
            tDriverResp.setAreaId(city.getParentId()+"/"+city.getId()+"/"+district.getId());
//        tDriverResp.setArea(tDriver.getProvinceName()+"/"+tDriver.getCityName()+"/"+tDriver.getAreaName());
//        if(Objects.nonNull(district) && Objects.nonNull(city)){
//            tDriverResp.setAreaId(city.getParentId()+"/"+city.getId()+"/"+district.getId());
//        }
        if(StringUtils.hasLength(tDriver.getAreaName()) && !tDriver.getAreaName().equals(tDriver.getCityName())){
            tDriverResp.setArea(tDriver.getProvinceName()+"/"+tDriver.getCityName()+"/"+tDriver.getAreaName());
        }else {
            tDriverResp.setArea(tDriver.getProvinceName()+"/"+tDriver.getCityName());
        }
        if(Objects.nonNull(city)){
            if(Objects.nonNull(district) && !district.getCode().equals(city.getCode())){
                tDriverResp.setAreaId(city.getParentId()+"/"+city.getId()+"/"+district.getId());
            }else {
                tDriverResp.setAreaId(city.getParentId()+"/"+city.getId());
            }
        }
        model.addAttribute("item",tDriverResp);
@@ -240,12 +253,20 @@
        String[] split = area.split("/");
        model.addAttribute("provinceName",split[0]);
        model.addAttribute("cityName",split[1]);
        model.addAttribute("districtName",split[2]);
        if(split.length>2){
            model.addAttribute("districtName",split[2]);
        }else {
            model.addAttribute("districtName","");
        }
        String[] split1 = areaId.split("/");
        model.addAttribute("provinceId",split1[0]);
        model.addAttribute("cityId",split1[1]);
        model.addAttribute("districtId",split1[2]);
        if(split1.length>2) {
            model.addAttribute("districtId", split1[2]);
        }else {
            model.addAttribute("districtId", "");
        }
        List<TRegion> tRegions = tRegionService.selectList(new EntityWrapper<TRegion>().eq("parent_id", 0));
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TAgent.java
@@ -64,25 +64,134 @@
     * 添加时间
     */
    private Date createTime;
    /**
     * 开户银行
     */
    @TableField(value = "bankDeposit")
    @ApiModelProperty(value = "开户银行")
    private String bankDeposit;
    /**
     * 银行账户
     */
    @TableField(value = "bankAccount")
    @ApiModelProperty(value = "银行账户")
    private String bankAccount;
    @TableField(value = "serviceCalls")
    @ApiModelProperty(value = "客服电话")
    private String serviceCalls;
    /**
     * 商户类型(1=个体工商户,2=企业)
     */
    @TableField("userType")
    private Integer userType;
    /**
     * 公司名称
     */
    @TableField("merchantName")
    private String merchantName;
    /**
     * 经营范围
     */
    @TableField("businessScope")
    private String businessScope;
    /**
     * 统一社会信用码
     */
    @TableField("socialCreditCode")
    private String socialCreditCode;
    /**
     * 统一社会信用证有效期
     */
    @TableField("socialCreditCodeExpires")
    private Date socialCreditCodeExpires;
    /**
     * 企业注册省编号
     */
    @TableField("provCodeEnterprise")
    private String provCodeEnterprise;
    /**
     * 企业注册市编号
     */
    @TableField("cityCodeEnterprise")
    private String cityCodeEnterprise;
    /**
     * 企业注册区编号
     */
    @TableField("areaCodeEnterprise")
    private String areaCodeEnterprise;
    /**
     * 企业注册详细地址
     */
    @TableField("address")
    private String address;
    /**
     * 法人姓名
     */
    @TableField("legalPerson")
    private String legalPerson;
    /**
     * 法人身份证号码
     */
    @TableField("merchantIDCode")
    private String merchantIDCode;
    /**
     * 法人身份证有效期
     */
    @TableField("certIdExpires")
    private Date certIdExpires;
    /**
     * 法人手机号
     */
    @TableField("legalPhone")
    private String legalPhone;
    /**
     * 附件编号
     */
    @TableField("fileNo")
    private String fileNo;
    /**
     * 结算账户名
     */
    @TableField("cardName")
    private String cardName;
    /**
     * 结算账户号
     */
    @TableField("cardNo")
    private String cardNo;
    /**
     * 银行账户类型(1=对公,2=对私)
     */
    @TableField("bankAcctType")
    private Integer bankAcctType;
    /**
     * 银行预留手机号
     */
    @TableField("phone")
    private String phone;
    /**
     * 开户行编号
     */
    @TableField("bankCode")
    private String bankCode;
    /**
     * 开户行地区省编号
     */
    @TableField("provCodeBank")
    private String provCodeBank;
    /**
     * 开户行地区市编号
     */
    @TableField("cityCodeBank")
    private String cityCodeBank;
    /**
     * 开户行地区区编号
     */
    @TableField("areaCodeBank")
    private String areaCodeBank;
    /**
     * 商户号
     */
    @TableField("merchantNumber")
    private String merchantNumber;
    /**
     * 商户状态(0=审核中,1=已成功,2=审核失败)
     */
    @TableField("merchantStatus")
    private Integer merchantStatus;
    /**
     * 结算账户状态(0=审核中,1=已成功,2=审核失败)
     */
    @TableField("bankStatus")
    private Integer bankStatus;
@@ -132,22 +241,6 @@
    public void setAreaId(String areaId) {
        this.areaId = areaId;
    }
    public String getBankDeposit() {
        return bankDeposit;
    }
    public void setBankDeposit(String bankDeposit) {
        this.bankDeposit = bankDeposit;
    }
    public String getBankAccount() {
        return bankAccount;
    }
    public void setBankAccount(String bankAccount) {
        this.bankAccount = bankAccount;
    }
    public String getArea() {
@@ -238,6 +331,206 @@
        this.createTime = createTime;
    }
    public Integer getUserType() {
        return userType;
    }
    public void setUserType(Integer userType) {
        this.userType = userType;
    }
    public String getMerchantName() {
        return merchantName;
    }
    public void setMerchantName(String merchantName) {
        this.merchantName = merchantName;
    }
    public String getBusinessScope() {
        return businessScope;
    }
    public void setBusinessScope(String businessScope) {
        this.businessScope = businessScope;
    }
    public String getSocialCreditCode() {
        return socialCreditCode;
    }
    public void setSocialCreditCode(String socialCreditCode) {
        this.socialCreditCode = socialCreditCode;
    }
    public Date getSocialCreditCodeExpires() {
        return socialCreditCodeExpires;
    }
    public void setSocialCreditCodeExpires(Date socialCreditCodeExpires) {
        this.socialCreditCodeExpires = socialCreditCodeExpires;
    }
    public String getProvCodeEnterprise() {
        return provCodeEnterprise;
    }
    public void setProvCodeEnterprise(String provCodeEnterprise) {
        this.provCodeEnterprise = provCodeEnterprise;
    }
    public String getCityCodeEnterprise() {
        return cityCodeEnterprise;
    }
    public void setCityCodeEnterprise(String cityCodeEnterprise) {
        this.cityCodeEnterprise = cityCodeEnterprise;
    }
    public String getAreaCodeEnterprise() {
        return areaCodeEnterprise;
    }
    public void setAreaCodeEnterprise(String areaCodeEnterprise) {
        this.areaCodeEnterprise = areaCodeEnterprise;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getLegalPerson() {
        return legalPerson;
    }
    public void setLegalPerson(String legalPerson) {
        this.legalPerson = legalPerson;
    }
    public String getMerchantIDCode() {
        return merchantIDCode;
    }
    public void setMerchantIDCode(String merchantIDCode) {
        this.merchantIDCode = merchantIDCode;
    }
    public Date getCertIdExpires() {
        return certIdExpires;
    }
    public void setCertIdExpires(Date certIdExpires) {
        this.certIdExpires = certIdExpires;
    }
    public String getLegalPhone() {
        return legalPhone;
    }
    public void setLegalPhone(String legalPhone) {
        this.legalPhone = legalPhone;
    }
    public String getFileNo() {
        return fileNo;
    }
    public void setFileNo(String fileNo) {
        this.fileNo = fileNo;
    }
    public String getCardName() {
        return cardName;
    }
    public void setCardName(String cardName) {
        this.cardName = cardName;
    }
    public String getCardNo() {
        return cardNo;
    }
    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }
    public Integer getBankAcctType() {
        return bankAcctType;
    }
    public void setBankAcctType(Integer bankAcctType) {
        this.bankAcctType = bankAcctType;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getBankCode() {
        return bankCode;
    }
    public void setBankCode(String bankCode) {
        this.bankCode = bankCode;
    }
    public String getProvCodeBank() {
        return provCodeBank;
    }
    public void setProvCodeBank(String provCodeBank) {
        this.provCodeBank = provCodeBank;
    }
    public String getCityCodeBank() {
        return cityCodeBank;
    }
    public void setCityCodeBank(String cityCodeBank) {
        this.cityCodeBank = cityCodeBank;
    }
    public String getAreaCodeBank() {
        return areaCodeBank;
    }
    public void setAreaCodeBank(String areaCodeBank) {
        this.areaCodeBank = areaCodeBank;
    }
    public String getMerchantNumber() {
        return merchantNumber;
    }
    public void setMerchantNumber(String merchantNumber) {
        this.merchantNumber = merchantNumber;
    }
    public Integer getMerchantStatus() {
        return merchantStatus;
    }
    public void setMerchantStatus(Integer merchantStatus) {
        this.merchantStatus = merchantStatus;
    }
    public Integer getBankStatus() {
        return bankStatus;
    }
    public void setBankStatus(Integer bankStatus) {
        this.bankStatus = bankStatus;
    }
    @Override
    protected Serializable pkVal() {
        return this.id;
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/config/ChannelConfig.java
New file
@@ -0,0 +1,60 @@
package com.stylefeng.guns.modular.system.util.MallBook.config;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.io.ClassPathResource;
import java.util.Properties;
/**
 * @Author xiaogc
 * @Date 2022/2/10 10:03
 */
public class ChannelConfig {
    /**
     * mallbook 测试环境地址
     */
    public static String payUrl;
    /**
     * 业务系统商户平台编号
     */
    public static String merchantNo;
    /**
     * 接口版本号,不同版本号触发不同接口业务
     */
    public static String version;
    /*
     * 渠道类型 HF:汇付
     */
    public static String channelType;
    /**
     * 商户平台私钥路径
     */
    public static String merchantPrivateKey;
    /**
     * mallbook公钥路径
     */
    public static String mallBookPublicKey;
    static {
        YamlPropertiesFactoryBean yamlProFb = new YamlPropertiesFactoryBean();
        yamlProFb.setResources(new ClassPathResource("application.yml"));
        Properties properties = yamlProFb.getObject();
        System.out.println("mallbook 参数配置初始化");
        System.out.println("--------------------------------");
        System.out.println("环境地址:" + properties.get("mallbook.pay_url"));
        System.out.println("商户平台编号:" + properties.get("mallbook.merchant_no"));
        System.out.println("接口版本号:" + properties.get("mallbook.version"));
        System.out.println("渠道类型:" + properties.get("mallbook.channel_type"));
        System.out.println("商户平台私钥:" + properties.get("mallbook.merchant_private_key"));
        System.out.println("mallbook 公钥:" + properties.get("mallbook.mall_book_public_key"));
        System.out.println("--------------------------------");
        payUrl = properties.get("mallbook.pay_url").toString();
        merchantNo = properties.get("mallbook.merchant_no").toString();
        version = properties.get("mallbook.version").toString();
        channelType = properties.get("mallbook.channel_type").toString();
        merchantPrivateKey = properties.get("mallbook.merchant_private_key").toString();
        mallBookPublicKey = properties.get("mallbook.mall_book_public_key").toString();
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/BindAccount.java
New file
@@ -0,0 +1,107 @@
package com.stylefeng.guns.modular.system.util.MallBook.model;
public class BindAccount<T> {
    /**业务类型编号,必须和接口文档一致*/
    public static String SERVICE_CODE = "bindAccount";
    //子商户编号
    private String userId;
    //身份证号
    private String certId;
    //结算账户名
    private String cardName;
    //结算账户号
    private String cardNo;
    //银行账户类型
    private String bankAcctType;
    //手机号
    private String phone;
    //开户银行名称
    private String bankName;
    //银行编码
    private String bankCode;
    //省份编码
    private String provCode;
    //地区编码
    private String areaCode;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getCertId() {
        return certId;
    }
    public void setCertId(String certId) {
        this.certId = certId;
    }
    public String getCardName() {
        return cardName;
    }
    public void setCardName(String cardName) {
        this.cardName = cardName;
    }
    public String getCardNo() {
        return cardNo;
    }
    public void setCardNo(String cardNo) {
        this.cardNo = cardNo;
    }
    public String getBankAcctType() {
        return bankAcctType;
    }
    public void setBankAcctType(String bankAcctType) {
        this.bankAcctType = bankAcctType;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getBankName() {
        return bankName;
    }
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    public String getBankCode() {
        return bankCode;
    }
    public void setBankCode(String bankCode) {
        this.bankCode = bankCode;
    }
    public String getProvCode() {
        return provCode;
    }
    public void setProvCode(String provCode) {
        this.provCode = provCode;
    }
    public String getAreaCode() {
        return areaCode;
    }
    public void setAreaCode(String areaCode) {
        this.areaCode = areaCode;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java
New file
@@ -0,0 +1,176 @@
/**
 *
 */
package com.stylefeng.guns.modular.system.util.MallBook.model;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.supersavedriving.driver.modular.system.util.MallBook.config.ChannelConfig;
import com.supersavedriving.driver.modular.system.util.MallBook.util.RSASignature;
import com.supersavedriving.driver.modular.system.util.MallBook.util.StringUtil;
import java.io.Serializable;
/**
 * 接口请求包
 *
 */
public class InterfaceRequest<T> implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = -8130938432046696213L;
    /**
     * 商户平台编号
     */
    private String merchantNo = ChannelConfig.merchantNo;
    /**
     * 接口版本号,不同版本号触发不同接口业务
     */
    private String version = ChannelConfig.version;
    /*
     * 渠道类型  HF:汇付
     */
    private String channelType = ChannelConfig.channelType;
    /**
     * 业务系统订单ID
     */
    private String merOrderId;
    /**
     * 签名
     */
    private String sign;
    /**
     * 业务类型编号
     */
    private String serverCode;
    /**
     * 业务参数,json格式
     */
    private String params;
    /**
     * 时间戳
     */
    private String date;
    public String getChannelType() {
        return channelType;
    }
    public void setChannelType(String channelType) {
        this.channelType = channelType;
    }
    public String getMerOrderId() {
        return merOrderId;
    }
    public void setMerOrderId(String merOrderId) {
        this.merOrderId = merOrderId;
    }
    public String getMerchantNo() {
        return merchantNo;
    }
    public void setMerchantNo(String merchantNo) {
        this.merchantNo = merchantNo;
    }
    public String getSign() {
        return sign;
    }
    public void setSign(String sign) {
        this.sign = sign;
    }
    public String getServerCode() {
        return serverCode;
    }
    public void setServerCode(String serverCode) {
        this.serverCode = serverCode;
    }
    public String getParams() {
        return params;
    }
    public void setParams(String params) {
        this.params = params;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    /**
     * 签名顺序必须一致!!!
     * 签名顺序必须一致!!!
     * 签名顺序必须一致!!!
     *  订单号 + 商户号 + 渠道类型 +  时间戳 + 业务参数json
     * @return 待签名字符串
     */
    public String content() {
        return StrUtil.builder()
                .append(StringUtil.convertNull(merOrderId))
                .append(StringUtil.convertNull(merchantNo))
                .append(StringUtil.convertNull(channelType))
                .append(StringUtil.convertNull(date))
                .append(StringUtil.convertNull(params))
                .toString();
    }
    public InterfaceRequest() {
    }
    public InterfaceRequest(T obj, String serverCode) {
        this.merOrderId = IdUtil.fastSimpleUUID();
        this.serverCode = serverCode;
        this.date = System.currentTimeMillis() + "";
        this.params = JSONUtil.toJsonStr(obj);
        // todo 使用商户平台私钥生成sign,需要修改证书对应路径
        this.sign = RSASignature.sign(content());
    }
    @Override
    public String toString() {
        return "InterfaceRequest{" +
                "merOrderId='" + merOrderId + '\'' +
                ", merchantNo='" + merchantNo + '\'' +
                ", sign='" + sign + '\'' +
                ", serverCode='" + serverCode + '\'' +
                ", params='" + params + '\'' +
                ", date='" + date + '\'' +
                ", version='" + version + '\'' +
                ", channelType='" + channelType + '\'' +
                '}';
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java
New file
@@ -0,0 +1,121 @@
/**
 *
 */
package com.stylefeng.guns.modular.system.util.MallBook.model;
import cn.hutool.core.util.StrUtil;
import com.supersavedriving.driver.modular.system.util.MallBook.util.StringUtil;
import java.io.Serializable;
public class InterfaceResponse implements Serializable {
    /**
     * 结果字符串,json格式
     */
    private String result;
    /**
     * 签名,由code+msg+date+result根据私钥生成, 如果有参数为null,签名串中应当做空字符串("")来处理
     */
    private String sign;
    /**
     * 结果代码
     */
    private String code;
    /**
     * 结果信息
     */
    private String msg;
    /**
     * 时间戳
     */
    private String date;
    /**
     * 接口版本号
     */
    private String version;
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public String getSign() {
        return sign;
    }
    public void setSign(String sign) {
        this.sign = sign;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public String getVersion() {
        return version;
    }
    public void setVersion(String version) {
        this.version = version;
    }
    @Override
    public String toString() {
        return "InterfaceResponse{" +
                "result='" + result + '\'' +
                ", sign='" + sign + '\'' +
                ", code='" + code + '\'' +
                ", msg='" + msg + '\'' +
                ", date='" + date + '\'' +
                ", version='" + version + '\'' +
                '}';
    }
    /**
     * 签名顺序必须一致!!!
     * 签名顺序必须一致!!!
     * 签名顺序必须一致!!!
     *  结果代码 + 结果信息 + 渠道类型 +  时间戳 + 结果字符串json
     * @return 待签名字符串
     */
    public String content() {
        return StrUtil.builder()
                .append(StringUtil.convertNull(code))
                .append(StringUtil.convertNull(msg))
                .append(StringUtil.convertNull(date))
                .append(StringUtil.convertNull(result))
                .toString();
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Register.java
New file
@@ -0,0 +1,193 @@
package com.stylefeng.guns.modular.system.util.MallBook.model;
/**
 * @author huangh
 * @version 1.0
 * @description
 * @date 2021/12/10 16:45
 */
public class Register {
    /**业务类型编号,必须和接口文档一致*/
    public static String SERVICE_CODE = "register";
    //业务系统会员id
    private String merUserId;
    //手机号
    private String phone;
    //子商户类型
    private String userType;
    //子商户名称
    private String userName;
    //身份证号码
    private String certId;
    //法人身份证有效期
    private String certIdExpires;
    //经营范围
    private String businessScope;
    //统一社会信用码
    private String socialCreditCode;
    //统一社会信用证有效期
    private String socialCreditCodeExpires;
    //法人手机号
    private String legalPhone;
    //法人姓名
    private String legalPerson;
    //企业地址
    private String address;
    //省份编码
    private String provCode;
    //地区编码
    private String areaCode;
    //附件编号
    private String fileNo;
    //后台回调地址
    private String notifyUrl;
    //自定义参数1
    private String parameter1;
    //自定义参数2
    private String parameter2;
    public String getMerUserId() {
        return merUserId;
    }
    public void setMerUserId(String merUserId) {
        this.merUserId = merUserId;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getUserType() {
        return userType;
    }
    public void setUserType(String userType) {
        this.userType = userType;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getCertId() {
        return certId;
    }
    public void setCertId(String certId) {
        this.certId = certId;
    }
    public String getCertIdExpires() {
        return certIdExpires;
    }
    public void setCertIdExpires(String certIdExpires) {
        this.certIdExpires = certIdExpires;
    }
    public String getBusinessScope() {
        return businessScope;
    }
    public void setBusinessScope(String businessScope) {
        this.businessScope = businessScope;
    }
    public String getSocialCreditCode() {
        return socialCreditCode;
    }
    public void setSocialCreditCode(String socialCreditCode) {
        this.socialCreditCode = socialCreditCode;
    }
    public String getSocialCreditCodeExpires() {
        return socialCreditCodeExpires;
    }
    public void setSocialCreditCodeExpires(String socialCreditCodeExpires) {
        this.socialCreditCodeExpires = socialCreditCodeExpires;
    }
    public String getLegalPhone() {
        return legalPhone;
    }
    public void setLegalPhone(String legalPhone) {
        this.legalPhone = legalPhone;
    }
    public String getLegalPerson() {
        return legalPerson;
    }
    public void setLegalPerson(String legalPerson) {
        this.legalPerson = legalPerson;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getProvCode() {
        return provCode;
    }
    public void setProvCode(String provCode) {
        this.provCode = provCode;
    }
    public String getAreaCode() {
        return areaCode;
    }
    public void setAreaCode(String areaCode) {
        this.areaCode = areaCode;
    }
    public String getFileNo() {
        return fileNo;
    }
    public void setFileNo(String fileNo) {
        this.fileNo = fileNo;
    }
    public String getNotifyUrl() {
        return notifyUrl;
    }
    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }
    public String getParameter1() {
        return parameter1;
    }
    public void setParameter1(String parameter1) {
        this.parameter1 = parameter1;
    }
    public String getParameter2() {
        return parameter2;
    }
    public void setParameter2(String parameter2) {
        this.parameter2 = parameter2;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/UnbindAccount.java
New file
@@ -0,0 +1,19 @@
package com.stylefeng.guns.modular.system.util.MallBook.model;
public class UnbindAccount {
    /**业务类型编号,必须和接口文档一致*/
    public static String SERVICE_CODE = "unbindAccount";
    /**
     * 子商户编号
     */
    private String userId;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/Base64.java
New file
@@ -0,0 +1,288 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
/**
 * @Author xiaogc
 * @Date 2021/12/21 14:23
 */
public class Base64 {
    static private final int BASELENGTH = 128;
    static private final int LOOKUPLENGTH = 64;
    static private final int TWENTYFOURBITGROUP = 24;
    static private final int EIGHTBIT = 8;
    static private final int SIXTEENBIT = 16;
    static private final int FOURBYTE = 4;
    static private final int SIGN = -128;
    static private final char PAD = '=';
    static private final boolean fDebug = false;
    static final private byte[] base64Alphabet = new byte[BASELENGTH];
    static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];
    static {
        for (int i = 0; i < BASELENGTH; ++i) {
            base64Alphabet[i] = -1;
        }
        for (int i = 'Z'; i >= 'A'; i--) {
            base64Alphabet[i] = (byte) (i - 'A');
        }
        for (int i = 'z'; i >= 'a'; i--) {
            base64Alphabet[i] = (byte) (i - 'a' + 26);
        }
        for (int i = '9'; i >= '0'; i--) {
            base64Alphabet[i] = (byte) (i - '0' + 52);
        }
        base64Alphabet['+'] = 62;
        base64Alphabet['/'] = 63;
        for (int i = 0; i <= 25; i++) {
            lookUpBase64Alphabet[i] = (char) ('A' + i);
        }
        for (int i = 26, j = 0; i <= 51; i++, j++) {
            lookUpBase64Alphabet[i] = (char) ('a' + j);
        }
        for (int i = 52, j = 0; i <= 61; i++, j++) {
            lookUpBase64Alphabet[i] = (char) ('0' + j);
        }
        lookUpBase64Alphabet[62] = (char) '+';
        lookUpBase64Alphabet[63] = (char) '/';
    }
    private static boolean isWhiteSpace(char octect) {
        return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);
    }
    private static boolean isPad(char octect) {
        return (octect == PAD);
    }
    private static boolean isData(char octect) {
        return (octect < BASELENGTH && base64Alphabet[octect] != -1);
    }
    /**
     * Encodes hex octects into Base64
     *
     * @param binaryData
     *            Array containing binaryData
     * @return Encoded Base64 array
     */
    public static String encode(byte[] binaryData) {
        if (binaryData == null) {
            return null;
        }
        int lengthDataBits = binaryData.length * EIGHTBIT;
        if (lengthDataBits == 0) {
            return "";
        }
        int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;
        int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;
        int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1
                : numberTriplets;
        char encodedData[] = null;
        encodedData = new char[numberQuartet * 4];
        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
        int encodedIndex = 0;
        int dataIndex = 0;
        if (fDebug) {
            System.out.println("number of triplets = " + numberTriplets);
        }
        for (int i = 0; i < numberTriplets; i++) {
            b1 = binaryData[dataIndex++];
            b2 = binaryData[dataIndex++];
            b3 = binaryData[dataIndex++];
            if (fDebug) {
                System.out.println("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3);
            }
            l = (byte) (b2 & 0x0f);
            k = (byte) (b1 & 0x03);
            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                    : (byte) ((b1) >> 2 ^ 0xc0);
            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
                    : (byte) ((b2) >> 4 ^ 0xf0);
            byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)
                    : (byte) ((b3) >> 6 ^ 0xfc);
            if (fDebug) {
                System.out.println("val2 = " + val2);
                System.out.println("k4   = " + (k << 4));
                System.out.println("vak  = " + (val2 | (k << 4)));
            }
            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];
        }
        // form integral number of 6-bit groups
        if (fewerThan24bits == EIGHTBIT) {
            b1 = binaryData[dataIndex];
            k = (byte) (b1 & 0x03);
            if (fDebug) {
                System.out.println("b1=" + b1);
                System.out.println("b1<<2 = " + (b1 >> 2));
            }
            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                    : (byte) ((b1) >> 2 ^ 0xc0);
            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];
            encodedData[encodedIndex++] = PAD;
            encodedData[encodedIndex++] = PAD;
        } else if (fewerThan24bits == SIXTEENBIT) {
            b1 = binaryData[dataIndex];
            b2 = binaryData[dataIndex + 1];
            l = (byte) (b2 & 0x0f);
            k = (byte) (b1 & 0x03);
            byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)
                    : (byte) ((b1) >> 2 ^ 0xc0);
            byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)
                    : (byte) ((b2) >> 4 ^ 0xf0);
            encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];
            encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];
            encodedData[encodedIndex++] = PAD;
        }
        return new String(encodedData);
    }
    /**
     * Decodes Base64 data into octects
     *
     * @param encoded
     *            string containing Base64 data
     * @return Array containind decoded data.
     */
    public static byte[] decode(String encoded) {
        if (encoded == null) {
            return null;
        }
        char[] base64Data = encoded.toCharArray();
        // remove white spaces
        int len = removeWhiteSpace(base64Data);
        if (len % FOURBYTE != 0) {
            return null;// should be divisible by four
        }
        int numberQuadruple = (len / FOURBYTE);
        if (numberQuadruple == 0) {
            return new byte[0];
        }
        byte decodedData[] = null;
        byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;
        char d1 = 0, d2 = 0, d3 = 0, d4 = 0;
        int i = 0;
        int encodedIndex = 0;
        int dataIndex = 0;
        decodedData = new byte[(numberQuadruple) * 3];
        for (; i < numberQuadruple - 1; i++) {
            if (!isData((d1 = base64Data[dataIndex++]))
                    || !isData((d2 = base64Data[dataIndex++]))
                    || !isData((d3 = base64Data[dataIndex++]))
                    || !isData((d4 = base64Data[dataIndex++]))) {
                return null;
            }// if found "no data" just return null
            b1 = base64Alphabet[d1];
            b2 = base64Alphabet[d2];
            b3 = base64Alphabet[d3];
            b4 = base64Alphabet[d4];
            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
        }
        if (!isData((d1 = base64Data[dataIndex++]))
                || !isData((d2 = base64Data[dataIndex++]))) {
            return null;// if found "no data" just return null
        }
        b1 = base64Alphabet[d1];
        b2 = base64Alphabet[d2];
        d3 = base64Data[dataIndex++];
        d4 = base64Data[dataIndex++];
        if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters
            if (isPad(d3) && isPad(d4)) {
                if ((b2 & 0xf) != 0)// last 4 bits should be zero
                {
                    return null;
                }
                byte[] tmp = new byte[i * 3 + 1];
                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
                tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);
                return tmp;
            } else if (!isPad(d3) && isPad(d4)) {
                b3 = base64Alphabet[d3];
                if ((b3 & 0x3) != 0)// last 2 bits should be zero
                {
                    return null;
                }
                byte[] tmp = new byte[i * 3 + 2];
                System.arraycopy(decodedData, 0, tmp, 0, i * 3);
                tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
                tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
                return tmp;
            } else {
                return null;
            }
        } else { // No PAD e.g 3cQl
            b3 = base64Alphabet[d3];
            b4 = base64Alphabet[d4];
            decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);
            decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));
            decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);
        }
        return decodedData;
    }
    /**
     * remove WhiteSpace from MIME containing encoded Base64 data.
     *
     * @param data
     *            the byte array of base64 data (with WS)
     * @return the new length
     */
    private static int removeWhiteSpace(char[] data) {
        if (data == null) {
            return 0;
        }
        // count characters that's not whitespace
        int newSize = 0;
        int len = data.length;
        for (int i = 0; i < len; i++) {
            if (!isWhiteSpace(data[i])) {
                data[newSize++] = data[i];
            }
        }
        return newSize;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/CacheUtils.java
New file
@@ -0,0 +1,39 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
/**
 * @author linqy
 * 缓存工具类,生产建议使用其他缓存中间件
 */
public class CacheUtils {
    private static final TimedCache<String, String> TIMED_CACHE = CacheUtil.newTimedCache(5000);
    static {
        /** 每1s检查一次过期 */
        TIMED_CACHE.schedulePrune(1000);
    }
    /**
     * 存入键值对,提供消逝时间
     *
     * @param key
     * @param value
     * @param timeout
     */
    public static void put(String key, String value, Long timeout) {
        /** 设置消逝时间 */
        TIMED_CACHE.put(key, value, timeout);
    }
    /**
     * 每次重新get一次缓存,均会重新刷新消逝时间
     * @param key
     * @return
     */
    public static String get(String key) {
        return TIMED_CACHE.get(key);
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSAEncryptGeneration.java
New file
@@ -0,0 +1,65 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
/**
 * 公私钥代码生成
 * @Author xiaogc
 * @Date 2021/12/21 14:22
 */
public class RSAEncryptGeneration {
    public static void main(String[] args) {
        // 生成一对公私钥到指定路径下  .pfx私钥 .cer公钥
        RSAEncryptGeneration.genKeyPair("D:\\tools");
    }
    /**
     * 随机生成密钥对
     */
    public static void genKeyPair(String filePath) {
        // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
        KeyPairGenerator keyPairGen = null;
        try {
            keyPairGen = KeyPairGenerator.getInstance("RSA");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 初始化密钥对生成器,密钥大小为96-1024位
        keyPairGen.initialize(1024, new SecureRandom());
        // 生成一个密钥对,保存在keyPair中
        KeyPair keyPair = keyPairGen.generateKeyPair();
        // 得到私钥
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        // 得到公钥
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        try {
            // 得到公钥字符串
            String publicKeyString = Base64.encode(publicKey.getEncoded());
            System.out.println("公钥字符串:"+publicKeyString);
            // 得到私钥字符串
            String privateKeyString = Base64.encode(privateKey.getEncoded());
            System.out.println("私钥字符串:"+privateKeyString);
            // 将密钥对写入到文件  .pfx私钥 .cer公钥
            FileWriter pubfw = new FileWriter(filePath + "/merchant_no.cer");
            FileWriter prifw = new FileWriter(filePath + "/merchant_no.pfx");
            BufferedWriter pubbw = new BufferedWriter(pubfw);
            BufferedWriter pribw = new BufferedWriter(prifw);
            pubbw.write(publicKeyString);
            pribw.write(privateKeyString);
            pubbw.flush();
            pubbw.close();
            pubfw.close();
            pribw.flush();
            pribw.close();
            prifw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
New file
@@ -0,0 +1,118 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
import com.supersavedriving.driver.modular.system.util.MallBook.config.ChannelConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
/**
 * @author RSA签名验签类
 */
public class RSASignature {
    public static Logger logger = LoggerFactory.getLogger(RSASignature.class);
    /**
     * 签名算法
     */
    public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
    /**
     * 商户平台私钥签名
     *
     * @param content
     * @return
     */
    public static String sign(String content) {
        try {
            String privateKey = ChannelConfig.merchantPrivateKey;
            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
            KeyFactory keyf = KeyFactory.getInstance("RSA");
            PrivateKey priKey = keyf.generatePrivate(priPKCS8);
            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
            signature.initSign(priKey);
            signature.update(content.getBytes());
            byte[] signed = signature.sign();
            return Base64.encode(signed);
        } catch (Exception e) {
            logger.error("签名失败{}", e);
        }
        return null;
    }
    /**
     * 读取证书
     *
     * @param filePath 证书文件路径
     */
    public static String loadKey(String filePath) throws Exception {
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String readLine;
            StringBuilder sb = new StringBuilder();
            while ((readLine = br.readLine()) != null) {
                sb.append(readLine);
            }
            return sb.toString();
        } catch (IOException e) {
            throw new Exception("私钥数据读取错误");
        } catch (NullPointerException e) {
            throw new Exception("私钥输入流为空");
        }
    }
    /**
     * mallbook公钥验签
     *
     * @param content 待签名数据
     * @param sign    签名值
     * @return false 验签失败 true 成功
     */
    public static boolean validate(String content, String sign) {
        boolean verify = false;
        try {
            String publicKey = ChannelConfig.mallBookPublicKey;
            verify = RSASignature.doCheck(content, sign, publicKey, "utf-8");
        } catch (Exception e) {
            logger.error("验签失败:{}", e);
        }
        return verify;
    }
    /**
     * RSA验签
     *
     * @param content   待签名数据
     * @param sign      签名值
     * @param publicKey 分配给开发商公钥
     * @param encode    字符集编码
     * @return 布尔值
     */
    public static boolean doCheck(String content, String sign, String publicKey, String encode) {
        try {
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            byte[] encodedKey = Base64.decode(publicKey);
            PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
            signature.initVerify(pubKey);
            signature.update(content.getBytes(encode));
            return signature.verify(Base64.decode(sign));
        } catch (Exception e) {
            logger.error("验签失败{}", e);
        }
        return false;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/StringUtil.java
New file
@@ -0,0 +1,23 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
import cn.hutool.core.util.StrUtil;
public class StringUtil extends StrUtil {
    /**
     * null转为空字符串
     *
     * @param str
     * @return
     */
    public static String convertNull(String str) {
        if (str == null) {
            return "";
        }
        return str;
    }
}
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/TrhRequest.java
New file
@@ -0,0 +1,31 @@
package com.stylefeng.guns.modular.system.util.MallBook.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.stylefeng.guns.modular.system.util.MallBook.config.ChannelConfig;
import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceRequest;
import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceResponse;
/**
 * @Author xiaogc
 * @Date 2022/1/24 13:45
 */
public class TrhRequest<T> {
    public InterfaceResponse execute(T t, String serverCode) {
        InterfaceRequest<T> request = new InterfaceRequest(t, serverCode);
        System.out.println("mallbook请求参数:" + JSONUtil.toJsonStr(request));
        String result = HttpUtil.post(ChannelConfig.payUrl, BeanUtil.beanToMap(request));
        System.out.println("mallbook响应参数:" + result);
        InterfaceResponse response = JSONUtil.toBean(result, InterfaceResponse.class);
        boolean verify = RSASignature.validate(response.content(), response.getSign());
        if (!verify) {
            throw new ValidateException("签名验证失败");
        } else {
            System.out.printf("签名验证通过");
        }
        return response;
    }
}
management/guns-admin/src/main/resources/application.yml
@@ -57,7 +57,7 @@
spring:
  datasource:
    url: jdbc:mysql://192.168.110.80:3306/super_save_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
    url: jdbc:mysql://127.0.0.1:3306/super_save_driving?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
    username: root
#    password: f4OfRjqoN3jSiNGiUoiNsQdOBtCOKYRj
    password: 123456
@@ -83,3 +83,9 @@
filePath: /usr/local/server/app/orderPostionFile/ #存储订单轨迹文件路径
#filePath: C:/orderPostionFile/  #存储订单轨迹文件路径
---
#支付回调地址
#正式环境
#callbackPath: https://okyueche.com:8010
#测试环境
callbackPath: http://121.37.15.157:8010
management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html
@@ -1,86 +1,196 @@
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal">
            <div class="row" id="tAgentInfoForm">
                <div class="col-sm-12" style="text-align: center">
                    <input hidden id="areaId" value="areaId">
                    <div class="initialLevel col-sm-12 control-label form-group" style="text-align: center">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >负责人姓名:</label>
                            <input id="principal" name="principal" type="text" maxlength="20" placeholder="请输入" style="height: 30px" required>
        <div class="form-horizontal" id="tAgentInfoForm">
            <div class="row">
                <div class="col-sm-6">
                    <div class="form-group">
                        代理商信息
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*负责人姓名:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="principal" name="principal" placeholder="请输入">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >联系电话:</label>
                            <input id="principalPhone" name="principalPhone" maxlength="11" type="number" placeholder="请输入" style="height: 30px" required>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*联系电话:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="principalPhone" name="principalPhone" maxlength="11" type="number" placeholder="请输入">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <label class="control-label" >邮箱:</label>
                            <input id="email" name="email" type="email" maxlength="40" placeholder="请输入" style="height: 30px">
                    <div class="form-group">
                        <input id="areaId" type="hidden">
                        <label class="col-sm-3 control-label">*代理区域:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="area" onclick="TAgent.area()" name="area" placeholder="请选择" readonly>
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >代理区域:</label>
                            <input id="area" onclick="TAgent.area()" name="area" placeholder="请选择" style="height: 30px" readonly required>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*邮箱:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="email" name="email" type="email" maxlength="40" placeholder="请输入">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <label class="control-label" >开户银行:</label>
                            <input id="bankDeposit" name="bankDeposit" type="text" maxlength="20" placeholder="请输入" style="height: 30px">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*登录账号:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="account" name="account" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <label class="control-label" >银行账户:</label>
                            <input id="bankAccount" name="bankAccount" type="number" maxlength="20" placeholder="请输入" style="height: 30px">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*登录密码:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="password" name="password" type="password" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
<!--                    <div class="initialLevel col-sm-12 control-label form-group">-->
<!--                        <div class="initialLevel col-sm-6 control-label form-group"  >-->
<!--                            <label class="control-label" >客服电话:</label>-->
<!--                            <input id="serviceCalls" name="serviceCalls" type="number" maxlength="20" placeholder="请输入" style="height: 30px">-->
<!--                        </div>-->
<!--                    </div>-->
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >登录账号:</label>
                            <input id="account" name="account" type="text" maxlength="20" placeholder="请输入" style="height: 30px">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*确认密码:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="rePassword" name="rePassword" type="password" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >登录密码:</label>
                            <input id="password" name="password" type="password" maxlength="20" placeholder="请输入密码" style="height: 30px">
                        </div>
                    </div>
                    <div class="initialLevel col-sm-12 control-label form-group">
                        <div class="initialLevel col-sm-6 control-label form-group"  >
                            <span style="color:red">*</span>
                            <label class="control-label" >确认密码:</label>
                            <input id="rePassword" name="rePassword" type="password" maxlength="20" placeholder="请输入确认密码" style="height: 30px">
                        </div>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-sm-6">
                    <div class="form-group">
                        商户信息
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*商户类型:</label>
                        <div class="col-sm-9">
                            <select class="form-control" id="userType">
                                <option value="1">个体工商户</option>
                                <option value="2">企业</option>
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*公司名称:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="merchantName" name="merchantName" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*经营范围:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="businessScope" name="businessScope" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*统一社会信用码:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="socialCreditCode" name="socialCreditCode" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*统一社会信用证有效期:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="socialCreditCodeExpires" name="socialCreditCodeExpires" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*地区:</label>
                        <div class="col-sm-3">
                            <input class="form-control" id="provCodeEnterprise" name="provCodeEnterprise">
                        </div>
                        <div class="col-sm-3">
                            <input class="form-control" id="cityCodeEnterprise" name="cityCodeEnterprise">
                        </div>
                        <div class="col-sm-3">
                            <input class="form-control" id="areaCodeEnterprise" name="areaCodeEnterprise">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*企业详细地址:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="address" name="address" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*结算账户名:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="cardName" name="cardName" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*结算账户号:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="cardNo" name="cardNo" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*银行账户类型:</label>
                        <div class="col-sm-9">
                            <select class="form-control" id="bankAcctType">
                                <option value="1">对公</option>
                                <option value="2">对私</option>
                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*银行预留手机号:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="phone" name="phone" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                </div>
                <div class="col-sm-6">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人姓名:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="legalPerson" name="legalPerson" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人身份证号:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="merchantIDCode" name="merchantIDCode" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人身份证有效期:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="certIdExpires" name="certIdExpires">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人手机号:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="legalPhone" name="legalPhone" type="text" maxlength="11" placeholder="请输入">
                        </div>
                    </div>
                    <#avatar id="fileNo" name="营业执照扫描件:" />
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*银行名称:</label>
                        <div class="col-sm-9">
                            <input class="form-control" id="bankCode" name="bankCode" type="text" maxlength="20" placeholder="请输入">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*开户行地区:</label>
                        <div class="col-sm-3">
                            <input class="form-control" id="provCodeBank" name="provCodeBank">
                        </div>
                        <div class="col-sm-3">
                            <input class="form-control" id="cityCodeBank" name="cityCodeBank">
                        </div>
                        <div class="col-sm-3">
                            <input class="form-control" id="areaCodeBank" name="areaCodeBank">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*注册状态:</label>
                        <div class="col-sm-4">
                            商户开户状态:
                        </div>
                        <div class="col-sm-4">
                            结算账户绑定状态:
                        </div>
                    </div>
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10" style="text-align: center">
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TAgentInfoDlg.close()"/>
@@ -93,4 +203,14 @@
</div>
<script src="${ctxPath}/static/modular/system/tAgent/tAgent_info.js"></script>
<script src="${ctxPath}/static/modular/system/tAgent/tAgent.js"></script>
<script type="text/javascript">
    laydate.render({
        elem: '#socialCreditCodeExpires',
        type: "date"
    });
    laydate.render({
        elem: '#certIdExpires',
        type: "date"
    });
</script>
@}
management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js
@@ -61,6 +61,146 @@
                    message: '两次密码不一致'
                },
            }
        },
        merchantName: {
            validators: {
                notEmpty: {
                    message: '公司名称不能为空'
                }
            }
        },
        businessScope: {
            validators: {
                notEmpty: {
                    message: '经营范围不能为空'
                }
            }
        },
        socialCreditCode: {
            validators: {
                notEmpty: {
                    message: '统一社会信用码不能为空'
                }
            }
        },
        socialCreditCodeExpires: {
            validators: {
                notEmpty: {
                    message: '统一社会信用证有效期不能为空'
                }
            }
        },
        provCodeEnterprise: {
            validators: {
                notEmpty: {
                    message: '地区不能为空'
                }
            }
        },
        cityCodeEnterprise: {
            validators: {
                notEmpty: {
                    message: '地区不能为空'
                }
            }
        },
        areaCodeEnterprise: {
            validators: {
                notEmpty: {
                    message: '地区不能为空'
                }
            }
        },
        address: {
            validators: {
                notEmpty: {
                    message: '企业详细地址不能为空'
                }
            }
        },
        legalPerson: {
            validators: {
                notEmpty: {
                    message: '法人姓名不能为空'
                }
            }
        },
        merchantIDCode: {
            validators: {
                notEmpty: {
                    message: '法人身份证号不能为空'
                }
            }
        },
        certIdExpires: {
            validators: {
                notEmpty: {
                    message: '法人身份证有效期不能为空'
                }
            }
        },
        legalPhone: {
            validators: {
                notEmpty: {
                    message: '法人手机号不能为空'
                }
            }
        },
        fileNo: {
            validators: {
                notEmpty: {
                    message: '营业执照扫描件不能为空'
                }
            }
        },
        cardName: {
            validators: {
                notEmpty: {
                    message: '结算账户名不能为空'
                }
            }
        },
        cardNo: {
            validators: {
                notEmpty: {
                    message: '结算账户号不能为空'
                }
            }
        },
        phone: {
            validators: {
                notEmpty: {
                    message: '银行预留手机号不能为空'
                }
            }
        },
        bankCode: {
            validators: {
                notEmpty: {
                    message: '银行名称不能为空'
                }
            }
        },
        provCodeBank: {
            validators: {
                notEmpty: {
                    message: '开户行地区不能为空'
                }
            }
        },
        cityCodeBank: {
            validators: {
                notEmpty: {
                    message: '开户行地区不能为空'
                }
            }
        },
        areaCodeBank: {
            validators: {
                notEmpty: {
                    message: '开户行地区不能为空'
                }
            }
        }
    }
};
@@ -114,20 +254,41 @@
 */
TAgentInfoDlg.collectData = function() {
    this
    .set('id')
    .set('principal')
    .set('principalPhone')
    .set('email')
    .set('provinceCode')
    .set('provinceName')
    .set('cityCode')
    .set('cityName')
    .set('status')
        .set('id')
        .set('principal')
        .set('principalPhone')
        .set('email')
        .set('provinceCode')
        .set('provinceName')
        .set('cityCode')
        .set('cityName')
        .set('status')
        .set('area')
        .set('areaId')
        .set('account')
        .set('password')
    .set('createTime');
        .set('createTime')
        .set('userType')
        .set('merchantName')
        .set('businessScope')
        .set('socialCreditCode')
        .set('socialCreditCodeExpires')
        .set('provCodeEnterprise')
        .set('cityCodeEnterprise')
        .set('areaCodeEnterprise')
        .set('address')
        .set('cardName')
        .set('cardNo')
        .set('bankAcctType')
        .set('phone')
        .set('legalPerson')
        .set('merchantIDCode')
        .set('certIdExpires')
        .set('legalPhone')
        .set('bankCode')
        .set('provCodeBank')
        .set('cityCodeBank')
        .set('areaCodeBank');
}
/**
@@ -184,4 +345,7 @@
$(function() {
    Feng.initValidator("tAgentInfoForm", TAgentInfoDlg.validateFields);
    var carPhoto = new $WebUpload("fileNo");
    carPhoto.setUploadBarId("progressBar");
    carPhoto.init();
});
super_save_driving.sql
@@ -11,7 +11,7 @@
 Target Server Version : 50637
 File Encoding         : 65001
 Date: 01/06/2023 23:31:35
 Date: 02/06/2023 02:32:20
*/
SET NAMES utf8mb4;
@@ -74,7 +74,7 @@
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `money` decimal(20, 2) NULL DEFAULT NULL COMMENT '报销金额',
  `desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '描述',
  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `state` int(11) NULL DEFAULT NULL COMMENT '状态: 1.待提交  2:待审核   3.审核通过 4:驳回',
  `userid` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `processId` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '流程定义id',
@@ -93,12 +93,12 @@
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `logname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '日志名称',
  `userid` int(65) NULL DEFAULT NULL COMMENT '管理员id',
  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `succeed` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否执行成功',
  `message` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '具体消息',
  `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录ip',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1344 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '登录记录' ROW_FORMAT = COMPACT;
) ENGINE = InnoDB AUTO_INCREMENT = 1355 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '登录记录' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of sys_login_log
@@ -1446,6 +1446,17 @@
INSERT INTO `sys_login_log` VALUES (1341, '登录日志', 1, '2023-05-26 15:53:14', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1342, '登录日志', 1, '2023-05-29 15:50:32', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1343, '登录日志', 1, '2023-06-01 23:23:14', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1344, '登录日志', 1, '2023-06-01 23:38:06', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1345, '登录日志', 1, '2023-06-02 00:26:29', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1346, '登录日志', 1, '2023-06-02 00:28:42', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1347, '登录日志', 1, '2023-06-02 00:31:25', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1348, '登录日志', 1, '2023-06-02 00:43:01', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1349, '登录日志', 1, '2023-06-02 01:19:14', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1350, '登录日志', 1, '2023-06-02 01:21:08', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1351, '登录日志', 1, '2023-06-02 01:25:45', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1352, '登录日志', 1, '2023-06-02 01:27:02', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1353, '登录日志', 1, '2023-06-02 01:38:03', '成功', NULL, '127.0.0.1');
INSERT INTO `sys_login_log` VALUES (1354, '登录日志', 1, '2023-06-02 02:20:10', '成功', NULL, '127.0.0.1');
-- ----------------------------
-- Table structure for sys_menu
@@ -1629,7 +1640,7 @@
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
  `type` int(11) NULL DEFAULT NULL COMMENT '类型',
  `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '内容',
  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `creater` int(11) NULL DEFAULT NULL COMMENT '创建人',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '通知表' ROW_FORMAT = COMPACT;
@@ -1651,11 +1662,11 @@
  `userid` int(65) NULL DEFAULT NULL COMMENT '用户id',
  `classname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类名称',
  `method` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '方法名称',
  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `succeed` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否成功',
  `message` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 520 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志' ROW_FORMAT = COMPACT;
) ENGINE = InnoDB AUTO_INCREMENT = 523 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of sys_operation_log
@@ -2179,6 +2190,9 @@
INSERT INTO `sys_operation_log` VALUES (517, '异常日志', '', 1, NULL, NULL, '2023-05-26 15:53:17', '失败', 'redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool\r\n    at redis.clients.util.Pool.getResource(Pool.java:53)\r\n    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)\r\n    at com.stylefeng.guns.modular.system.util.RedisUtil.getValue(RedisUtil.java:63)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardController.blackboard(BlackboardController.java:239)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardControllerTTFastClassBySpringCGLIBTTc0f26a22.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardControllerTTEnhancerBySpringCGLIBTTb9d234af.blackboard(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\nCaused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect\r\n    at redis.clients.jedis.Connection.connect(Connection.java:207)\r\n    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)\r\n    at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)\r\n    at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:433)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)\r\n    at redis.clients.util.Pool.getResource(Pool.java:49)\r\n    ... 89 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n    at java.net.Socket.connect(Socket.java:589)\r\n    at redis.clients.jedis.Connection.connect(Connection.java:184)\r\n    ... 96 more\r\n');
INSERT INTO `sys_operation_log` VALUES (518, '异常日志', '', 1, NULL, NULL, '2023-05-29 15:50:34', '失败', 'redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool\r\n    at redis.clients.util.Pool.getResource(Pool.java:53)\r\n    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)\r\n    at com.stylefeng.guns.modular.system.util.RedisUtil.getValue(RedisUtil.java:63)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardController.blackboard(BlackboardController.java:239)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardControllerTTFastClassBySpringCGLIBTTc0f26a22.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.system.BlackboardControllerTTEnhancerBySpringCGLIBTT301bf62.blackboard(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\nCaused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect\r\n    at redis.clients.jedis.Connection.connect(Connection.java:207)\r\n    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)\r\n    at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)\r\n    at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:433)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)\r\n    at redis.clients.util.Pool.getResource(Pool.java:49)\r\n    ... 89 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n    at java.net.Socket.connect(Socket.java:589)\r\n    at redis.clients.jedis.Connection.connect(Connection.java:184)\r\n    ... 96 more\r\n');
INSERT INTO `sys_operation_log` VALUES (519, '异常日志', '', 1, NULL, NULL, '2023-05-29 15:51:36', '失败', 'redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool\r\n    at redis.clients.util.Pool.getResource(Pool.java:53)\r\n    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)\r\n    at com.stylefeng.guns.modular.system.util.RedisUtil.getValue(RedisUtil.java:63)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAppUserController.updateStatus(TAppUserController.java:242)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAppUserControllerTTFastClassBySpringCGLIBTTa16f68ba.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAppUserControllerTTEnhancerBySpringCGLIBTTc7e09a2a.updateStatus(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\nCaused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused: connect\r\n    at redis.clients.jedis.Connection.connect(Connection.java:207)\r\n    at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93)\r\n    at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1767)\r\n    at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:106)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:433)\r\n    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:362)\r\n    at redis.clients.util.Pool.getResource(Pool.java:49)\r\n    ... 89 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n    at java.net.Socket.connect(Socket.java:589)\r\n    at redis.clients.jedis.Connection.connect(Connection.java:184)\r\n    ... 96 more\r\n');
INSERT INTO `sys_operation_log` VALUES (520, '异常日志', '', 1, NULL, NULL, '2023-06-02 01:31:11', '失败', 'java.lang.NullPointerException\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentController.add(TAgentController.java:185)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTFastClassBySpringCGLIBTT85defb73.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)\r\n    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTEnhancerBySpringCGLIBTTe2299fcd.add(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\n');
INSERT INTO `sys_operation_log` VALUES (521, '异常日志', '', 1, NULL, NULL, '2023-06-02 01:33:04', '失败', 'java.lang.NullPointerException\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentController.add(TAgentController.java:185)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTFastClassBySpringCGLIBTT85defb73.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)\r\n    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTEnhancerBySpringCGLIBTTe2299fcd.add(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\n');
INSERT INTO `sys_operation_log` VALUES (522, '异常日志', '', 1, NULL, NULL, '2023-06-02 01:33:59', '失败', 'java.lang.NullPointerException\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentController.add(TAgentController.java:185)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTFastClassBySpringCGLIBTT85defb73.invoke(<generated>)\r\n    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\r\n    at org.springframework.aop.framework.CglibAopProxyTCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)\r\n    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)\r\n    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)\r\n    at org.springframework.aop.framework.CglibAopProxyTDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)\r\n    at com.stylefeng.guns.modular.system.controller.general.TAgentControllerTTEnhancerBySpringCGLIBTTe2299fcd.add(<generated>)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n    at java.lang.reflect.Method.invoke(Method.java:498)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)\r\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)\r\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)\r\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)\r\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)\r\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)\r\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)\r\n    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)\r\n    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)\r\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)\r\n    at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilterT1.call(AbstractShiroFilter.java:365)\r\n    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)\r\n    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)\r\n    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)\r\n    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)\r\n    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.stylefeng.guns.core.xss.XssFilter.doFilter(XssFilter.java:31)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)\r\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)\r\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)\r\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)\r\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)\r\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)\r\n    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)\r\n    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n    at org.apache.coyote.AbstractProtocolTConnectionHandler.process(AbstractProtocol.java:800)\r\n    at org.apache.tomcat.util.net.NioEndpointTSocketProcessor.doRun(NioEndpoint.java:1471)\r\n    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n    at java.util.concurrent.ThreadPoolExecutorTWorker.run(ThreadPoolExecutor.java:624)\r\n    at org.apache.tomcat.util.threads.TaskThreadTWrappingRunnable.run(TaskThread.java:61)\r\n    at java.lang.Thread.run(Thread.java:748)\r\n');
-- ----------------------------
-- Table structure for sys_relation
@@ -2489,20 +2503,20 @@
  `password` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `salt` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'md5密码盐',
  `name` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名字',
  `birthday` datetime NULL DEFAULT NULL COMMENT '生日',
  `birthday` datetime(0) NULL DEFAULT NULL COMMENT '生日',
  `sex` int(11) NULL DEFAULT NULL COMMENT '性别(1:男 2:女)',
  `email` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮件',
  `phone` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
  `roleid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id',
  `deptid` int(11) NULL DEFAULT NULL COMMENT '部门id',
  `status` int(11) NULL DEFAULT NULL COMMENT '状态(1:启用  2:冻结  3:删除)',
  `createtime` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `createtime` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  `version` int(11) NULL DEFAULT NULL COMMENT '保留字段',
  `pass_word_update` datetime NULL DEFAULT NULL COMMENT '密码修改时间',
  `pass_word_update` datetime(0) NULL DEFAULT NULL COMMENT '密码修改时间',
  `role_type` int(1) NULL DEFAULT NULL COMMENT '角色类型 1=平台 2=分公司 3=加盟商',
  `object_id` int(11) NULL DEFAULT NULL COMMENT '公司id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '管理员表' ROW_FORMAT = COMPACT;
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '管理员表' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of sys_user
@@ -2516,6 +2530,7 @@
INSERT INTO `sys_user` VALUES (7, NULL, 'guizhoud', 'b723270778326d4fe56c1e806bec14eb', '4twsi', '贵州代理商', NULL, 1, NULL, NULL, '2', 25, 1, '2023-05-22 16:20:05', NULL, NULL, 3, 16);
INSERT INTO `sys_user` VALUES (8, NULL, 'ceshi111111', '93573ecba11247d3f9d23179ef925adf', 'b5ns0', '东莞代理商', NULL, 1, NULL, NULL, '2', 25, 1, '2023-05-26 14:58:38', NULL, NULL, 3, 17);
INSERT INTO `sys_user` VALUES (9, NULL, 'ceshi1111111', 'eea269526fb0251f74785b0ce9f783b6', 'ipzib', '测试1111111', NULL, 1, NULL, NULL, '3', 25, 1, '2023-05-26 14:59:38', NULL, NULL, 2, 12);
INSERT INTO `sys_user` VALUES (10, NULL, '1', 'b7c189f90a0a94718c66776c0b5f5ddd', 'fbo95', 'kkk', NULL, 1, NULL, NULL, '2', 25, 1, '2023-06-02 01:38:54', NULL, NULL, 3, 18);
-- ----------------------------
-- Table structure for t_account_change_detail
@@ -2532,7 +2547,7 @@
  `newData` double(10, 2) NULL DEFAULT NULL COMMENT '新数据',
  `orderId` bigint(20) NULL DEFAULT NULL COMMENT '订单id',
  `explain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '变动说明',
  `createTime` datetime NULL DEFAULT NULL COMMENT '变动时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '变动时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 405 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '账户变动明细' ROW_FORMAT = COMPACT;
@@ -2958,35 +2973,55 @@
  `cityCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '代理区域市编号',
  `cityName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '代理区域市名称',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `bankDeposit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户银行',
  `bankAccount` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '银行账号',
  `serviceCalls` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '客服电话',
  `userType` int(255) NULL DEFAULT NULL COMMENT '商户类型(1=个体工商户,2=企业)',
  `merchantName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '公司名称',
  `businessScope` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '经营范围',
  `socialCreditCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '统一社会信用码',
  `socialCreditCodeExpires` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '统一社会信用证有效期',
  `provCodeEnterprise` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '企业注册省编号',
  `cityCodeEnterprise` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '企业注册市编号',
  `areaCodeEnterprise` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '企业注册区编号',
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '企业注册详细地址哈',
  `legalPerson` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '法人姓名',
  `merchantIDCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '法人身份证号码',
  `certIdExpires` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '法人身份证有效期',
  `legalPhone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '法人手机号',
  `fileNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '附件编号',
  `merchantStatus` int(1) NULL DEFAULT NULL COMMENT '商户状态(0=审核中,1=已成功,2=审核失败)',
  `cardName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '结算账户名',
  `cardNo` int(11) NULL DEFAULT NULL COMMENT '结算账户号',
  `bankAcctType` int(1) NULL DEFAULT NULL COMMENT '银行账户类型(1=对公,2=对私)',
  `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '银行预留手机号',
  `bankCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户行编号',
  `provCodeBank` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户行地区省编号',
  `cityCodeBank` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户行地区市编号',
  `areaCodeBank` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户行地区区编号',
  `bankStatus` int(1) NULL DEFAULT NULL COMMENT '结算账户状态(0=处理中,1=绑定成功,2=绑定失败)',
  `merchantNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商户号',
  `merchantName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商户名称',
  `merchantPhone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商户电话',
  `merchantIDCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '商户身份证号',
  `serviceCalls` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '客服电话',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代理商' ROW_FORMAT = COMPACT;
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代理商' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of t_agent
-- ----------------------------
INSERT INTO `t_agent` VALUES (1, 'admin', '1588888888', '393733352@qq.com', '510000', '四川省', '510100', '成都市', 1, '2023-02-03 14:52:57', NULL, NULL, '17628232726', NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (2, 'ceshi', '1588888888', '393733352@qq.com', '510000', '四川省', '510100', '成都市', 1, '2023-02-03 14:52:57', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (5, '测试1', '18392563245', '420516325@qq.com', '220000', '吉林省', '222400', '延边朝鲜族自治州', 1, '2023-02-20 17:56:28', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (6, '测试2', '18392563245', '420516325@qq.com', '230000', '黑龙江省', '230800', '佳木斯市', 1, '2023-02-22 10:11:26', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (7, '测试3', '18392563245', '420516325@qq.com', '130000', '河北省', '130600', '保定市', 2, '2023-02-24 10:06:07', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (8, '测试1', '18392563246', '420516325@qq.com', '140000', '山西省', '141100', '吕梁市', 1, '2023-02-24 10:24:44', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (9, '', '', '', '350000', '福建省', '350200', '厦门市', 1, '2023-03-08 09:06:19', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (10, '测试1', '18392563259', '420516325@qq.com', '350000', '福建省', '350300', '莆田市', 1, '2023-03-08 09:14:48', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (11, '测试1', '18392563256', '420516325@qq.com', '510000', '四川省', '510100', '成都市', 1, '2023-03-08 09:16:55', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (12, '测试1', '18392563245', '420516325@qq.com', '110000', '北京市', '110100', '北京市市辖区', 1, '2023-03-08 09:19:45', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (13, '广东', '18392563249', '420516325@qq.com', '440000', '广东省', '440100', '广州市', 1, '2023-04-03 10:38:57', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (14, '双流', '28392563245', 'andy.wang@cca19.com', '140000', '山西省', '140100', '太原市', 1, '2023-04-09 16:29:49', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (15, '张三张三', '18392565342', '123456789@qq.com', '230000', '黑龙江省', '230700', '伊春市', 1, '2023-05-17 15:41:44', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (16, '贵州代理商', '13465645644', '', '520000', '贵州省', '520300', '遵义市', 1, '2023-05-22 16:20:04', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (17, '东莞代理商', '18392563246', 'admin@qq.com', '440000', '广东省', '441900', '东莞市', 1, '2023-05-26 14:58:37', NULL, NULL, NULL, NULL, NULL, NULL, NULL);
INSERT INTO `t_agent` VALUES (1, 'admin', '1588888888', '393733352@qq.com', '510000', '四川省', '510100', '成都市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '17628232726', '2023-02-03 14:52:57');
INSERT INTO `t_agent` VALUES (2, 'ceshi', '1588888888', '393733352@qq.com', '510000', '四川省', '510100', '成都市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-02-03 14:52:57');
INSERT INTO `t_agent` VALUES (5, '测试1', '18392563245', '420516325@qq.com', '220000', '吉林省', '222400', '延边朝鲜族自治州', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-02-20 17:56:28');
INSERT INTO `t_agent` VALUES (6, '测试2', '18392563245', '420516325@qq.com', '230000', '黑龙江省', '230800', '佳木斯市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-02-22 10:11:26');
INSERT INTO `t_agent` VALUES (7, '测试3', '18392563245', '420516325@qq.com', '130000', '河北省', '130600', '保定市', 2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-02-24 10:06:07');
INSERT INTO `t_agent` VALUES (8, '测试1', '18392563246', '420516325@qq.com', '140000', '山西省', '141100', '吕梁市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-02-24 10:24:44');
INSERT INTO `t_agent` VALUES (9, '', '', '', '350000', '福建省', '350200', '厦门市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-08 09:06:19');
INSERT INTO `t_agent` VALUES (10, '测试1', '18392563259', '420516325@qq.com', '350000', '福建省', '350300', '莆田市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-08 09:14:48');
INSERT INTO `t_agent` VALUES (11, '测试1', '18392563256', '420516325@qq.com', '510000', '四川省', '510100', '成都市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-08 09:16:55');
INSERT INTO `t_agent` VALUES (12, '测试1', '18392563245', '420516325@qq.com', '110000', '北京市', '110100', '北京市市辖区', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-03-08 09:19:45');
INSERT INTO `t_agent` VALUES (13, '广东', '18392563249', '420516325@qq.com', '440000', '广东省', '440100', '广州市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-04-03 10:38:57');
INSERT INTO `t_agent` VALUES (14, '双流', '28392563245', 'andy.wang@cca19.com', '140000', '山西省', '140100', '太原市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-04-09 16:29:49');
INSERT INTO `t_agent` VALUES (15, '张三张三', '18392565342', '123456789@qq.com', '230000', '黑龙江省', '230700', '伊春市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-05-17 15:41:44');
INSERT INTO `t_agent` VALUES (16, '贵州代理商', '13465645644', '', '520000', '贵州省', '520300', '遵义市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-05-22 16:20:04');
INSERT INTO `t_agent` VALUES (17, '东莞代理商', '18392563246', 'admin@qq.com', '440000', '广东省', '441900', '东莞市', 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2023-05-26 14:58:37');
INSERT INTO `t_agent` VALUES (18, 'kkk', '15828353127', '393733352@qq.com', '210000', '辽宁省', '210200', '大连市', 1, 1, '1', '1', '1', '2023-06-02 00:00:00.0', NULL, NULL, NULL, '1', '1', '1', '2023-06-02 00:00:00.0', '1', NULL, NULL, '1', 1, 2, '1', NULL, '1', '1', '1', NULL, NULL, NULL, '2023-06-02 01:38:54');
-- ----------------------------
-- Table structure for t_app_user
@@ -3005,7 +3040,7 @@
  `accountBalance` double(11, 2) NULL DEFAULT NULL COMMENT '账户余额',
  `userTagId` int(11) NULL DEFAULT NULL COMMENT '用户标签id',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `is_exception` int(1) NULL DEFAULT 1 COMMENT '是否异常 1正常 2异常',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '启用/冻结理由',
  `inviterType` int(1) NULL DEFAULT NULL COMMENT '邀约人类型(1=用户,2=司机)',
@@ -3058,7 +3093,7 @@
  `addresseePhone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '收件人电话',
  `addresseeEmail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '收件人邮箱',
  `state` int(1) NULL DEFAULT 1 COMMENT '开票状态 1待开票 2已开票 3开票失败',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '发票管理' ROW_FORMAT = COMPACT;
@@ -3090,7 +3125,7 @@
  `districtCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '代理区域区编号',
  `districtName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '代理区域区名称',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  `branchOfficeName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分公司名称',
  `operatingBusiness` int(1) NULL DEFAULT 1 COMMENT '经营业务 1司机代驾',
  `bankDeposit` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '开户银行',
@@ -3119,7 +3154,7 @@
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '消息内容',
  `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `show` tinyint(1) NULL DEFAULT 0 COMMENT '是否显示 1是 0否',
  `upDown` int(1) NULL DEFAULT 2 COMMENT '上下架 1上架 2下架',
  PRIMARY KEY (`id`) USING BTREE
@@ -3146,7 +3181,7 @@
  `userId` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `cause` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '转单原因',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 277 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '订单取消记录' ROW_FORMAT = COMPACT;
@@ -3444,7 +3479,7 @@
  `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '提现金额',
  `state` int(1) NULL DEFAULT NULL COMMENT '提现状态 1未成功 2成功',
  `orderNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '第三方流水号',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '提现记录' ROW_FORMAT = COMPACT;
@@ -3471,9 +3506,9 @@
  `html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '富文本',
  `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `createUserId` int(11) NULL DEFAULT NULL COMMENT '添加人员id',
  `updateTime` datetime NULL DEFAULT NULL COMMENT '更新时间',
  `updateTime` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
  `updateUserId` int(11) NULL DEFAULT NULL COMMENT '更新人员id',
  `onOffLine` int(1) NULL DEFAULT 2 COMMENT '上下线 1上线 2下线',
  PRIMARY KEY (`id`) USING BTREE
@@ -3894,10 +3929,10 @@
  `notes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '注释',
  `state` int(1) NULL DEFAULT NULL COMMENT '处理状态(1=待处理,2=已处理)',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `auditId` int(11) NULL DEFAULT NULL COMMENT '处理人id',
  `auditPersonName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '处理人名称',
  `auditTime` datetime NULL DEFAULT NULL COMMENT '处理时间',
  `auditTime` datetime(0) NULL DEFAULT NULL COMMENT '处理时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '投诉' ROW_FORMAT = COMPACT;
@@ -3915,7 +3950,7 @@
  `user_id` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `agent_id` int(11) NULL DEFAULT NULL COMMENT '代理商id',
  `branch_office_id` int(11) NULL DEFAULT NULL COMMENT '分公司id',
  `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `coupon_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '优惠券名称',
  `coupon_type` int(1) NULL DEFAULT NULL COMMENT '优惠券类型 1活动券 2新人券',
  `coupon_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '优惠券码',
@@ -3957,10 +3992,10 @@
  `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '分账金额',
  `merchantNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '收款商户号',
  `state` int(1) NULL DEFAULT NULL COMMENT '分账状态(1=分账中,2=分账成功)',
  `payTime` datetime NULL DEFAULT NULL COMMENT '分账时间',
  `createTime` datetime NULL DEFAULT NULL COMMENT '记录时间',
  `payTime` datetime(0) NULL DEFAULT NULL COMMENT '分账时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '记录时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '分账记录' ROW_FORMAT = Compact;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '分账记录' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of t_division_record
@@ -3994,12 +4029,12 @@
  `approvalStatus` int(1) NULL DEFAULT 1 COMMENT '审核状态(1=待审核,2=已同意,3=已拒绝)',
  `approvalNotes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '审核注释',
  `approvalUserId` int(11) NULL DEFAULT NULL COMMENT '审核用户id',
  `approvalTime` datetime NULL DEFAULT NULL COMMENT '审核时间',
  `approvalTime` datetime(0) NULL DEFAULT NULL COMMENT '审核时间',
  `serverStatus` int(1) NULL DEFAULT 1 COMMENT '服务状态(1=空闲,2=服务中)',
  `integral` int(11) NULL DEFAULT 0 COMMENT '剩余积分',
  `score` double(11, 1) NULL DEFAULT 5.0 COMMENT '评分',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  `backgroundBalance` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '后台充值余额',
  `couponBalance` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '优惠券余额(订单优惠券支付的金额)',
  `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '启用冻结理由',
@@ -4010,7 +4045,7 @@
  `cityName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '加盟区域市名称',
  `areaCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '加盟区域区编号',
  `areaName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '加盟区域区名称',
  `firstCertificateTime` datetime NULL DEFAULT NULL COMMENT '驾驶证初次领证时间',
  `firstCertificateTime` datetime(0) NULL DEFAULT NULL COMMENT '驾驶证初次领证时间',
  `commission` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '佣金',
  `wxCollectionCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '微信收款码',
  `zfbCollectionCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '支付宝收款码',
@@ -4055,7 +4090,7 @@
  `IDCode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '身份证号码',
  `bankNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '银行卡号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '司机银行卡' ROW_FORMAT = Compact;
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '司机银行卡' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of t_driver_bank
@@ -4068,8 +4103,8 @@
CREATE TABLE `t_driver_work`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `driverId` int(11) NULL DEFAULT NULL COMMENT '司机id',
  `workTime` datetime NULL DEFAULT NULL COMMENT '上班时间',
  `offWorkTime` datetime NULL DEFAULT NULL COMMENT '下班时间',
  `workTime` datetime(0) NULL DEFAULT NULL COMMENT '上班时间',
  `offWorkTime` datetime(0) NULL DEFAULT NULL COMMENT '下班时间',
  `onlineTime` bigint(20) NULL DEFAULT NULL COMMENT '在线时长(秒)',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=上班,2=下班)',
  PRIMARY KEY (`id`) USING BTREE
@@ -4136,7 +4171,7 @@
  `editionFile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '版本文件',
  `editionAnnouncement` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '版本公告',
  `editionPort` int(1) NULL DEFAULT NULL COMMENT '端口 1用户端 2司机端',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '版本管理' ROW_FORMAT = COMPACT;
@@ -4159,7 +4194,7 @@
  `score` int(1) NULL DEFAULT NULL COMMENT '评分',
  `evaluate` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '评价内容',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '订单评价' ROW_FORMAT = COMPACT;
@@ -4201,7 +4236,7 @@
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `type` int(1) NULL DEFAULT NULL COMMENT '类型(1=代驾服务协议与隐私政策保护,2=法律条款,3=个人信息处理规则,4=积分说明,5=佣金规则说明,6=行程录音说明,7=预估价格说明,8=加盟基本要求,9=加盟流程,10=起步价说明,11=注销协议,12=关于我们,13=司机消单说明)',
  `html` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT 'H5内容',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = 'H5富文本' ROW_FORMAT = COMPACT;
@@ -4230,7 +4265,7 @@
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `type` int(1) NULL DEFAULT NULL COMMENT '数据类型(1=启动页)',
  `img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '图片地址',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 42 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统图片' ROW_FORMAT = COMPACT;
@@ -4254,7 +4289,7 @@
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '内容',
  `sort` int(1) NULL DEFAULT NULL COMMENT '排序',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '加盟要求' ROW_FORMAT = COMPACT;
@@ -4276,7 +4311,7 @@
  `type` int(1) NULL DEFAULT NULL COMMENT '数据类型(1=转单,2=司机消单,3=用户取消订单)',
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '内容',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '事由管理' ROW_FORMAT = COMPACT;
@@ -4307,18 +4342,18 @@
  `source` int(1) NULL DEFAULT NULL COMMENT '订单来源(1=小程序,2=APP)',
  `agentId` int(11) NULL DEFAULT NULL COMMENT '代理商id',
  `branchOfficeId` int(11) NULL DEFAULT NULL COMMENT '分公司id',
  `orderTakingTime` datetime NULL DEFAULT NULL COMMENT '接单时间',
  `goToAppointmentPointTime` datetime NULL DEFAULT NULL COMMENT '前往预约点时间',
  `arrivalTimeAtTheAppointmentPoint` datetime NULL DEFAULT NULL COMMENT '到达预约点时间',
  `startTime` datetime NULL DEFAULT NULL COMMENT '开始服务时间',
  `orderTakingTime` datetime(0) NULL DEFAULT NULL COMMENT '接单时间',
  `goToAppointmentPointTime` datetime(0) NULL DEFAULT NULL COMMENT '前往预约点时间',
  `arrivalTimeAtTheAppointmentPoint` datetime(0) NULL DEFAULT NULL COMMENT '到达预约点时间',
  `startTime` datetime(0) NULL DEFAULT NULL COMMENT '开始服务时间',
  `startAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '起点地址',
  `startLat` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '起点纬度',
  `startLng` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '起点经度',
  `endAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '终点地址',
  `endLat` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '终点纬度',
  `endLng` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '终点经度',
  `boardingTime` datetime NULL DEFAULT NULL COMMENT '上车时间',
  `getoffTime` datetime NULL DEFAULT NULL COMMENT '下车时间',
  `boardingTime` datetime(0) NULL DEFAULT NULL COMMENT '上车时间',
  `getoffTime` datetime(0) NULL DEFAULT NULL COMMENT '下车时间',
  `startDistance` double(11, 2) NULL DEFAULT 0.00 COMMENT '起步里程(公里)',
  `startPrice` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '起步价',
  `overDriveDistance` double(11, 2) NULL DEFAULT 0.00 COMMENT '超出起步里程',
@@ -4347,15 +4382,15 @@
  `discountAmount` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '折扣优惠金额',
  `discount` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '折扣',
  `payType` int(1) NULL DEFAULT NULL COMMENT '支付类型(1=微信支付,2=余额支付,3=线下收款)',
  `payTime` datetime NULL DEFAULT NULL COMMENT '支付时间',
  `payTime` datetime(0) NULL DEFAULT NULL COMMENT '支付时间',
  `orderNo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '第三方支付流水号',
  `hallOrder` int(1) NULL DEFAULT 0 COMMENT '大厅订单(0=否,1=是)',
  `startWaitTime` datetime NULL DEFAULT NULL COMMENT '开始进入等待状态时间',
  `startWaitTime` datetime(0) NULL DEFAULT NULL COMMENT '开始进入等待状态时间',
  `state` int(1) NULL DEFAULT NULL COMMENT '订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待支付,108=待评价,109=已完成,201=转单中,301=已取消,401=等待中)',
  `oldState` int(1) NULL DEFAULT NULL COMMENT '历史订单状态(用于还原之前状态)',
  `isInvoice` int(1) NULL DEFAULT 0 COMMENT '是否已开票',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `routeRecord` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '行程录音',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 364 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '订单' ROW_FORMAT = COMPACT;
@@ -4730,7 +4765,7 @@
  `startAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '起点地址',
  `endAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '终点地址',
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '编号',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '拒单记录' ROW_FORMAT = COMPACT;
@@ -4758,8 +4793,8 @@
  `newDriverId` int(11) NULL DEFAULT NULL COMMENT '新司机id',
  `cause` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '转单原因',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `successTime` datetime NULL DEFAULT NULL COMMENT '转单成功时间',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `successTime` datetime(0) NULL DEFAULT NULL COMMENT '转单成功时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '订单转派记录' ROW_FORMAT = COMPACT;
@@ -4780,10 +4815,10 @@
  `orderNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '第三方支付流水号',
  `balance` decimal(10, 2) NULL DEFAULT NULL COMMENT '余额',
  `state` int(1) NULL DEFAULT NULL COMMENT '支付状态(1=待支付,2=已支付,3=已取消)',
  `payTime` datetime NULL DEFAULT NULL COMMENT '支付时间',
  `createTime` datetime NULL DEFAULT NULL COMMENT '充值时间',
  `payTime` datetime(0) NULL DEFAULT NULL COMMENT '支付时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '充值时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '平台充值记录' ROW_FORMAT = Compact;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '平台充值记录' ROW_FORMAT = COMPACT;
-- ----------------------------
-- Records of t_platform_recharge_record
@@ -4800,10 +4835,10 @@
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '流水号',
  `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '充值金额',
  `payType` int(1) NULL DEFAULT NULL COMMENT '支付方式(1=微信,2=系统充值)',
  `payTime` datetime NULL DEFAULT NULL COMMENT '完成支付时间',
  `payTime` datetime(0) NULL DEFAULT NULL COMMENT '完成支付时间',
  `payStatus` int(1) NULL DEFAULT NULL COMMENT '支付状态(1=待支付,2=已完成)',
  `orderNumber` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '第三方流水号',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  `agentId` int(11) NULL DEFAULT NULL COMMENT '代理商ID',
  `surplusDividedAmount` decimal(10, 2) NULL DEFAULT 0.00 COMMENT '剩余待分账金额',
  PRIMARY KEY (`id`) USING BTREE
@@ -8413,7 +8448,7 @@
  `orderId` int(11) NULL DEFAULT NULL COMMENT '订单id',
  `amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '收入金额',
  `balance` decimal(10, 2) NULL DEFAULT NULL COMMENT '余额',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 53 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '收入记录' ROW_FORMAT = COMPACT;
@@ -8484,7 +8519,7 @@
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '内容',
  `state` int(1) NULL DEFAULT NULL COMMENT '是否发送 1未发送 2已发送',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统公告' ROW_FORMAT = COMPACT;
@@ -8507,7 +8542,7 @@
  `userId` int(11) NULL DEFAULT NULL COMMENT '用户id',
  `isRead` int(1) NULL DEFAULT NULL COMMENT '阅读(0=否,1=是)',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统公告-用户关系' ROW_FORMAT = COMPACT;
@@ -8554,7 +8589,7 @@
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL COMMENT '内容',
  `isRead` int(1) NULL DEFAULT NULL COMMENT '阅读状态(0=否,1=是)',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 504 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统消息' ROW_FORMAT = COMPACT;
@@ -9089,7 +9124,7 @@
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '标签名',
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '达标条件',
  `status` int(1) NULL DEFAULT NULL COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户标签' ROW_FORMAT = COMPACT;
@@ -9108,8 +9143,8 @@
  `couponTotal` int(11) NULL DEFAULT NULL COMMENT '领取总数量',
  `validCount` int(11) NULL DEFAULT NULL COMMENT '有效数量',
  `expireCount` int(11) NULL DEFAULT 0 COMMENT '过期数量',
  `expireTime` datetime NULL DEFAULT NULL COMMENT '过期时间',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间-领取时间',
  `expireTime` datetime(0) NULL DEFAULT NULL COMMENT '过期时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间-领取时间',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态 1正常 2冻结 3删除',
  `roleType` int(1) NULL DEFAULT NULL COMMENT '角色类型 1=平台 2=分公司 3=加盟商',
  `objectId` int(11) NULL DEFAULT NULL COMMENT '公司id',
@@ -12394,7 +12429,7 @@
  `effectiveTime` int(11) NULL DEFAULT NULL COMMENT '有效天数',
  `content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '服务内容',
  `status` int(1) NULL DEFAULT 1 COMMENT '状态(1=正常,2=冻结,3=删除)',
  `createTime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
  `createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '添加时间',
  `distance` double(11, 2) NULL DEFAULT NULL COMMENT '优推距离',
  `picture` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '图片',
  PRIMARY KEY (`id`) USING BTREE
@@ -12420,10 +12455,10 @@
  `integral` int(11) NULL DEFAULT NULL COMMENT '积分',
  `type` int(1) NULL DEFAULT NULL COMMENT '优推类型(1=次数,2=小时)',
  `surplusQuantity` int(11) NULL DEFAULT NULL COMMENT '剩余数量',
  `endTime` datetime NULL DEFAULT NULL COMMENT '优推结束时间',
  `endTime` datetime(0) NULL DEFAULT NULL COMMENT '优推结束时间',
  `state` int(1) NULL DEFAULT NULL COMMENT '状态(1=未使用,2=使用中,3=已结束)',
  `failureTime` datetime NULL DEFAULT NULL COMMENT '失效时间',
  `createTime` datetime NULL DEFAULT NULL COMMENT '添加时间',
  `failureTime` datetime(0) NULL DEFAULT NULL COMMENT '失效时间',
  `createTime` datetime(0) NULL DEFAULT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '司机优推数据' ROW_FORMAT = COMPACT;