liujie
2025-08-05 d7073ba542fa70a4882c44a7484753deaa4fd7e5
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/QianYunTong

# Conflicts:
# DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianConfig.java
# UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java
2个文件已删除
20个文件已修改
1 文件已重命名
1个文件已添加
2889 ■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/account/util/Util.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/HttpsRequest.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/HttpsRequest_2.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/Signature.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/Util.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/XMLParser.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/protocol/AppPayReqData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/ApiUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/DateUtil.java 1102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/OrdersUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java 1085 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Driver.java
@@ -390,6 +390,15 @@
    @ApiModelProperty("分享链接")
    private String shareLink;
    @ApiModelProperty("证联客户号")
    private String custId;
    @ApiModelProperty("是否已开通支付账户(0:否,1:是)")
    private Integer accOpenFlag;
    @ApiModelProperty("是否已同步到中台(0:否,1:是)")
    private Integer isSynchronous;
    public String getShareImg() {
        return shareImg;
@@ -1009,6 +1018,30 @@
        this.entercode = entercode;
    }
    
    public String getCustId() {
        return custId;
    }
    public void setCustId(String custId) {
        this.custId = custId;
    }
    public Integer getAccOpenFlag() {
        return accOpenFlag;
    }
    public void setAccOpenFlag(Integer accOpenFlag) {
        this.accOpenFlag = accOpenFlag;
    }
    public Integer getIsSynchronous() {
        return isSynchronous;
    }
    public void setIsSynchronous(Integer isSynchronous) {
        this.isSynchronous = isSynchronous;
    }
    @Override
    public String toString() {
        return "Driver{" +
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java
@@ -21,8 +21,13 @@
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.EmployeeUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.AddAccountInfoRequest;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest;
import com.stylefeng.guns.modular.system.util.zhenglian.ZhengLianUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.OrderListWarpper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
@@ -119,6 +124,35 @@
     */
    @Override
    public List<Map<String, Object>> queryOrderList(Integer state, Integer pageNum, Integer size, Integer uid) throws Exception {
        Driver driver = driverService.selectById(uid);
        //获取证联数据
        if(null == driver.getCustId() || 0 == driver.getAccOpenFlag()){
            TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
            tradeTerminalInfo.setIp("127.0.0.1");
            tradeTerminalInfo.setTerminal("1");
            tradeTerminalInfo.setMac("");
            ZLUserInfo userInfo = ZhengLianUtil.getUserInfo(driver.getEmpId().toString(), tradeTerminalInfo);
            if(null != userInfo){
                driver.setCustId(userInfo.getCustId());
                driver.setAccOpenFlag(userInfo.getAccOpenFlag());
                driverService.updateById(driver);
            }
        }
        //同步到中台
        if(null != driver.getAccOpenFlag() && 1 == driver.getAccOpenFlag() && 0 == driver.getIsSynchronous()){
            AddAccountInfoRequest request = new AddAccountInfoRequest();
            request.setCustId(driver.getCustId());
            request.setAccountNo(driver.getEmpId().toString());
            request.setAccountName(driver.getName());
            request.setMobile(driver.getPhone());
            Integer status = EmployeeUtil.addAccountInfo(request);
            if(0 == status){
                driver.setIsSynchronous(1);
                driverService.updateById(driver);
            }
        }
        Integer page = pageNum;
        pageNum = (pageNum - 1) * size;
        List<Map<String, Object>> datas = new ArrayList<>();
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -212,6 +212,11 @@
     * @return 状态 0 成功 其他失败
     */
    public static Integer addAccountInfo(AddAccountInfoRequest request){
        request.setPartnerId("522700");
        request.setIndustryCode("100");
        request.setPayModeId("501101");
        request.setAccessMode("APP");
        //请求路径
        String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/addAccountInfo";
        //私钥文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/ZhengLianUtil.java
@@ -1,7 +1,15 @@
package com.stylefeng.guns.modular.system.util.zhenglian;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
import com.stylefeng.guns.modular.system.util.UUIDUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
import com.zlpay.assist.encrypt.sm4.SM4Util;
import com.zlpay.assist.sign.sm2.SM2Cert;
import com.zlpay.assist.sign.sm2.SM2Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.RandomStringUtils;
@@ -9,7 +17,11 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * @author zhibing.pu
@@ -20,6 +32,87 @@
    
    private static ZhengLianConfig zhengLianConfig = SpringContextsUtil.getBean(ZhengLianConfig.class).getZhengLianConfig();
    
    /**
     * 获取用户详情
     * @param appUserId
     * @param tradeTerminalInfo
     * @return
     * @throws Exception
     */
    public static ZLUserInfo getUserInfo(String appUserId, TradeTerminalInfo tradeTerminalInfo) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        Map<String,String> headerMap = new HashMap<String,String>();
        MessageBody body = new MessageBody();
        headerMap.put("msgId", UUIDUtil.getRandomCode());
        headerMap.put("merchNo", "B00000871");
        headerMap.put("txCode", "ZLPAY.ACC.T0009");
        headerMap.put("version", "1.0.1");
        headerMap.put("signa", "1");
        headerMap.put("signNo", zhengLianConfig.getSignNo());
        headerMap.put("encrp", "1");
        headerMap.put("encrpNo", zhengLianConfig.getEncrpNo());
        headerMap.put("timestamp", sdf.format(new Date()));
        Map<String, Object> map = new HashMap<>();
        map.put("appId", zhengLianConfig.getAppid());
        map.put("appUserId", appUserId);
        map.put("tradeTerminalInfo", tradeTerminalInfo);
        String reqBO = JSON.toJSONString(map);
        // 生成对称加密秘钥
        String key = ZhengLianUtil.generateKey(16);
        // 加密数据
        String jsonData = SM4Util.sm4EcbEncrypt(key, reqBO, "NoPadding");
        //加密对称加密的秘钥
        // 获取公钥
        String publicKey = ZhengLianUtil.getPublicKey();
        String secrtKey = SM2Util.encrypt(publicKey, key);
        // 将密文放入body
        body.setData(jsonData);
        body.setSign(ZhengLianUtil.sign(jsonData));
        body.setSecret(secrtKey);
        String result = ZLHttpClientUtil.doPost(zhengLianConfig.getUrl(), headerMap, JSON.toJSONString(body));
        System.out.println("应答内容:"+ result);
        MessageBody respBody = JSON.parseObject(result,MessageBody.class);
        // 验签
        boolean checkResult = SM2Util.verify(publicKey, zhengLianConfig.getEncrpNo(), respBody.getSign(), respBody.getData());
        System.out.println("验签结果:" + checkResult);
        // 获取私钥
        String privateKey = ZhengLianUtil.getPrivateKey();
        // 解密对称秘钥
        String k = SM2Util.decrypt(privateKey, respBody.getSecret());
        System.out.println("对称秘钥:" + k);
        // 解密业务报文
        String backData = SM4Util.sm4EcbDecrypt(k, respBody.getData());
        System.out.println("返回业务报文:" + backData);
        JSONObject jsonObject = JSON.parseObject(backData);
        String sysRtnCode = jsonObject.getString("sysRtnCode");
        if(!"000000".equals(sysRtnCode)){
            log.error("查询用户信息失败!{}", jsonObject.getString("sysRtnMsg"));
            throw new Exception(jsonObject.getString("sysRtnMsg"));
        }
        JSONObject bizData = jsonObject.getJSONObject("bizData");
        String resCode = bizData.getString("resCode");
        if(!"S010000".equals(resCode)){
            log.error("查询用户信息失败!{}", bizData.getString("resMsg"));
            throw new Exception(jsonObject.getString("resMsg"));
        }
        JSONObject resData = bizData.getJSONObject("resData");
        ZLUserInfo zlUserInfo = resData.toJavaObject(ZLUserInfo.class);
        return zlUserInfo;
    }
    /**
     * @Description: 从公钥证书获取公钥串
     * @return
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/zhenglian/model/ZLUserInfo.java
New file
@@ -0,0 +1,37 @@
package com.stylefeng.guns.modular.system.util.zhenglian.model;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2025/8/5 10:10
 */
@Data
public class ZLUserInfo {
    /**
     * appid
     */
    private String appId;
    /**
     * APP端用户唯一标识
     */
    private String appUserId;
    /**
     * 姓名
     */
    private String userName;
    /**
     * 证件号码
     */
    private String certNo;
    /**
     * 证联客户号
     */
    private String custId;
    /**
     * 是否已开通支付账户
     * 1:是
     * 0:否
     */
    private Integer accOpenFlag;
}
DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,48 +1,47 @@
//package com.stylefeng.guns;
//
//import com.stylefeng.guns.modular.system.model.Driver;
//import com.stylefeng.guns.modular.system.service.IDriverService;
//import com.stylefeng.guns.modular.system.util.zhenglian.TokenUtil;
//import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
//import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.test.context.junit4.SpringRunner;
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
//public class GunsApplicationTest {
//
//    @Autowired
//    private MongoTemplate mongoTemplate;
//    @Autowired
//    private IDriverService driverService;
//
//
//    @Test
//    public void test() {
//
//        Driver driver = driverService.selectById(driverId);
//        TokenRequest tokenRequest = new TokenRequest();
//        tokenRequest.setAppUserId(driver.getEmpId().toString());
//        tokenRequest.setUserName(driver.getName());
//        tokenRequest.setCertNo(driver.getIdCard());
//        tokenRequest.setPhone(driver.getPhone());
//        TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
//        tradeTerminalInfo.setIp("127.0.0.1");
//        tradeTerminalInfo.setTerminal("1");
//        tradeTerminalInfo.setMac("");
//        tokenRequest.setTradeTerminalInfo(tradeTerminalInfo);
//        tokenRequest.setType(type);
//        String token = null;
//        try {
//            token = TokenUtil.getToken(tokenRequest);
//        } catch (Exception e) {
//            throw new RuntimeException(e);
//        }
//        System.err.println(token);
//    }
//}
package com.stylefeng.guns;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.service.IDriverService;
import com.stylefeng.guns.modular.system.util.zhenglian.ZhengLianUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.stylefeng.guns.modular.system.util.zhenglian.model.ZLUserInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class GunsApplicationTest {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private IDriverService driverService;
    @Test
    public void test() {
        Driver driver = driverService.selectById(14);
        TokenRequest tokenRequest = new TokenRequest();
        tokenRequest.setAppUserId(driver.getEmpId().toString());
        tokenRequest.setUserName(driver.getName());
        tokenRequest.setCertNo(driver.getIdCard());
        tokenRequest.setPhone(driver.getPhone());
        TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
        tradeTerminalInfo.setIp("127.0.0.1");
        tradeTerminalInfo.setTerminal("1");
        tradeTerminalInfo.setMac("");
        ZLUserInfo userInfo = null;
        try {
            userInfo = ZhengLianUtil.getUserInfo("11448158", tradeTerminalInfo);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        System.err.println(userInfo);
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/account/util/Util.java
@@ -1,12 +1,14 @@
package com.stylefeng.guns.modular.account.util;
import com.thoughtworks.xstream.XStream;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.io.*;
import java.lang.reflect.Field;
import java.util.*;
/**
@@ -118,5 +120,104 @@
            throw new RuntimeException("签名过程中出现错误");
        }
    }
    /**
     * 通过反射的方式遍历对象的属性和属性值,方便调试
     *
     * @param o 要遍历的对象
     * @throws Exception
     */
    public static void reflect(Object o) throws Exception {
        Class<? extends Object> cls = o.getClass();
        Field[] fields = cls.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            Field f = fields[i];
            f.setAccessible(true);
            Util.log(f.getName() + " -> " + f.get(o));
        }
    }
    public static byte[] readInput(InputStream in) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int len = 0;
        byte[] buffer = new byte[1024];
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        out.close();
        in.close();
        return out.toByteArray();
    }
    public static String inputStreamToString(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int i;
        while ((i = is.read()) != -1) {
            baos.write(i);
        }
        return baos.toString();
    }
    public static InputStream getStringStream(String sInputString) {
        ByteArrayInputStream tInputStringStream = null;
        if (sInputString != null && !sInputString.trim().equals("")) {
            try {
                tInputStringStream = new ByteArrayInputStream(sInputString.getBytes("UTF-8"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return tInputStringStream;
    }
    public static Object getObjectFromXML(String xml, Class<?> tClass) {
        //将从API返回的XML数据映射到Java对象
        XStream xStreamForResponseData = new XStream();
        xStreamForResponseData.alias("xml", tClass);
        xStreamForResponseData.ignoreUnknownElements();//暂时忽略掉一些新增的字段
        return xStreamForResponseData.fromXML(xml);
    }
    public static String getStringFromMap(Map<String, Object> map, String key, String defaultValue) {
        if (key == "" || key == null) {
            return defaultValue;
        }
        String result = (String) map.get(key);
        if (result == null) {
            return defaultValue;
        } else {
            return result;
        }
    }
    public static int getIntFromMap(Map<String, Object> map, String key) {
        if (key == "" || key == null) {
            return 0;
        }
        if (map.get(key) == null) {
            return 0;
        }
        return Integer.parseInt((String) map.get(key));
    }
    /**
     * 打log接口
     * @param log 要打印的log字符串
     * @return 返回log
     */
    public static String log(Object log){
        System.out.println(log.toString());
        return log.toString();
    }
    /**
     * 读取本地的xml数据,一般用来自测用
     * @param localPath 本地xml文件路径
     * @return 读到的xml字符串
     */
    public static String getLocalXMLString(String localPath) throws IOException {
        return Util.inputStreamToString(Util.class.getResourceAsStream(localPath));
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/UserInfoController.java
@@ -3,13 +3,11 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.common.constant.JwtConstants;
import com.stylefeng.guns.core.shiro.ShiroKit;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.account.server.UserWithdrawalService;
import com.stylefeng.guns.modular.account.util.OssUploadUtil;
import com.stylefeng.guns.modular.system.model.Driver;
import com.stylefeng.guns.modular.system.model.TDriverPromotionActivity;
import com.stylefeng.guns.modular.system.model.UserInfo;
import com.stylefeng.guns.modular.system.model.UserWithdrawal;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.WeChatUtil;
@@ -60,6 +58,8 @@
    
    @Autowired
    private HttpServletRequest request;
    private String salt = "&a.s";
    @Autowired
    private TDriverPromotionActivityService driverPromotionActivityService;
@@ -860,4 +860,44 @@
            return ResultUtil.runErr();
        }
    }
    /**
     * 代驾系统添加用户接口
     * @param phone
     * @return
     */
    @ResponseBody
    @GetMapping("/base/user/addAppUser")
    public String addAppUser(String phone, String code, String areaCode){
        try {
            return userInfoService.addAppUser(phone, code, areaCode);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 代驾系统验证短信验证码
     * @param phone
     * @param code
     * @param request
     * @return
     */
    @ResponseBody
    @PostMapping("/base/user/checkCaptcha")
    public Boolean checkCaptcha1(String phone, String code, HttpServletRequest request){
        try {
            String device = request.getHeader("device");
            if(ToolUtil.isEmpty(device)){
                return false;
            }
            boolean b = userInfoService.checkCaptcha(phone, code);
            return b;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/rideCommentController.java
@@ -10,14 +10,14 @@
import com.stylefeng.guns.modular.shunfeng.task.base.QuartzManager;
import com.stylefeng.guns.modular.shunfeng.task.base.TimeJobType;
import com.stylefeng.guns.modular.shunfeng.task.jobs.CourseExamineRide;
import com.stylefeng.guns.modular.shunfeng.util.DateUtil;
import com.stylefeng.guns.modular.shunfeng.util.OrderUtil;
import com.stylefeng.guns.modular.shunfeng.util.OrdersUtil;
import com.stylefeng.guns.modular.shunfeng.util.SensitiveWordUtil;
import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
import com.stylefeng.guns.modular.system.model.SensitiveWords;
import com.stylefeng.guns.modular.system.model.UserInfo;
import com.stylefeng.guns.modular.system.service.ISystemNoticeService;
import com.stylefeng.guns.modular.system.service.IUserInfoService;
import com.stylefeng.guns.modular.system.util.DateUtil;
import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
import com.stylefeng.guns.modular.system.util.PushUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil;
@@ -393,7 +393,7 @@
                }
            }
            OrderRide orderRide=new OrderRide();
            orderRide.setOrderNum(OrderUtil.getOrderNoForPrefix("ride"));
            orderRide.setOrderNum(OrdersUtil.getOrderNoForPrefix("ride"));
            orderRide.setPlatformMoney(platformMoney);
            orderRide.setAddTime(new Date());
            orderRide.setUserId(userId);
@@ -484,7 +484,7 @@
                }
                /*1一个司机可以创建多个行程*/
                OrderTravel orderTravel=new OrderTravel();
                orderTravel.setOrderNum(OrderUtil.getOrderNoForPrefix("travel"));
                orderTravel.setOrderNum(OrdersUtil.getOrderNoForPrefix("travel"));
                orderTravel.setAddTime(new Date());
                orderTravel.setDriverId(driverId);
                orderTravel.setStartTime(DateUtil.getDate(startTime,"yyyy-MM-dd HH:mm"));
@@ -775,7 +775,7 @@
        }
        if(orderRide.getTuiMoney()>0){
            Financial financial= financialService.selectOne(new EntityWrapper<Financial>().eq("orderNum",orderRide.getOrderNum()));
            String finNum=OrderUtil.getOrderNoForPrefix("fin");
            String finNum=OrdersUtil.getOrderNoForPrefix("fin");
            //todo 退款金额大于0需要退款
            if(orderRide.getPayType()==1){//余额
                UserInfo userInfo=userInfoService.selectById(orderRide.getUserId());
@@ -848,7 +848,7 @@
                    f.setMoney(orderTravel.getServiceMoney());
                    f.setPwType(9);//9=顺风车取消服务费
                    f.setOrderNum(orderTravel.getOrderNum());
                    String finNum=OrderUtil.getOrderNoForPrefix("fin");
                    String finNum=OrdersUtil.getOrderNoForPrefix("fin");
                    f.setLsType(finNum);
                    f.setUserId(driverRide.getUserId());
                    f.setOrderType(4);
@@ -947,7 +947,7 @@
                    f.setPayType("1");//余额
                    f.setMoney(orderRide.getMoney()-orderRide.getPlatformMoney());//司机提成
                    f.setPwType(11);//顺风车司机提成
                    f.setLsType(OrderUtil.getOrderNoForPrefix("finan"));
                    f.setLsType(OrdersUtil.getOrderNoForPrefix("finan"));
                    f.setUserId(userInfo.getId());
                    f.setOrderType(4);
                    f.setLx(1);
@@ -969,7 +969,7 @@
                        f.setPayType("1");//余额
                        f.setMoney(money);//邀请金额
                        f.setPwType(10);//分享收益
                        f.setLsType(OrderUtil.getOrderNoForPrefix("finan"));
                        f.setLsType(OrdersUtil.getOrderNoForPrefix("finan"));
                        f.setUserId(userInfo1.getId());
                        f.setOrderType(4);
                        f.setLx(1);
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/HttpsRequest.java
@@ -1,5 +1,6 @@
package com.stylefeng.guns.modular.shunfeng.tencent.common;
import com.stylefeng.guns.modular.account.util.Util;
import com.stylefeng.guns.modular.shunfeng.tencent.service.IServiceRequest;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/HttpsRequest_2.java
@@ -1,5 +1,6 @@
package com.stylefeng.guns.modular.shunfeng.tencent.common;
import com.stylefeng.guns.modular.account.util.Util;
import com.stylefeng.guns.modular.shunfeng.tencent.service.IServiceRequest;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/Signature.java
@@ -1,15 +1,14 @@
package com.stylefeng.guns.modular.shunfeng.tencent.common;
import java.io.IOException;
import com.stylefeng.guns.modular.account.util.Util;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
/**
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/Util.java
File was deleted
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/common/XMLParser.java
@@ -1,20 +1,20 @@
package com.stylefeng.guns.modular.shunfeng.tencent.common;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import com.stylefeng.guns.modular.account.util.Util;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class XMLParser {
    public static Map<String,Object> getMapFromXML(String xmlString) throws ParserConfigurationException, IOException, SAXException {
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/tencent/protocol/AppPayReqData.java
@@ -2,7 +2,7 @@
import com.stylefeng.guns.modular.shunfeng.tencent.common.RandomStringGenerator;
import com.stylefeng.guns.modular.shunfeng.tencent.common.Signature;
import com.stylefeng.guns.modular.shunfeng.util.DateUtil;
import com.stylefeng.guns.modular.system.util.DateUtil;
import java.lang.reflect.Field;
import java.util.HashMap;
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/ApiUtil.java
@@ -1,6 +1,8 @@
package com.stylefeng.guns.modular.shunfeng.util;
import com.stylefeng.guns.modular.system.util.DateUtil;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/DateUtil.java
File was deleted
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/OrdersUtil.java
File was renamed from UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/util/OrderUtil.java
@@ -9,7 +9,7 @@
 * @createDate 2016年5月27日
 * @version 1.0
 */
public class OrderUtil {
public class OrdersUtil {
    
    /* 订单号 */
    private static long orderNum = 0L;
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IUserInfoService.java
@@ -236,6 +236,11 @@
    ResultUtil reissueCoupon() throws Exception;
    ResultUtil<LoginWarpper> wxLoginIsBind(String jscode);
    /**
     * 代驾系统添加用户接口
     * @param phone
     * @return
     */
    String addAppUser(String phone, String code, String areaCode) throws Exception;
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/UserInfoServiceImpl.java
@@ -1633,4 +1633,59 @@
        }
        return ResultUtil.success(loginWarpper);
    }
    @Override
    public String addAppUser(String phone, String code, String areaCode) throws Exception {
        UserInfo userInfo = userInfoMapper.queryByPhone(phone);
        String nickName = null;
        if (null == userInfo) {
            nickName = this.getDefaultName();
        } else {
            nickName = userInfo.getNickName();
        }
        //调中台接口查询用户
        List<QYTUserInfo> infoByPhone = UserUtil.getUserInfoByPhone(phone);
        String onconUUID = null;
        if (null == infoByPhone || infoByPhone.isEmpty()) {
            RegisterViaMobileRequest request = new RegisterViaMobileRequest();
            request.setMobile(phone);
            request.setEncryptType("aesbase64");
            request.setPassword(AESUtils.encryptBase64("123456"));
            request.setNickname(nickName);
            request.setVerify_code(code);
            request.setVerify_code_type("0");
            RegisterViaMobile register = UserUtil.registerViaMobile(request);
            if (!"0".equals(register.getStatus())) {
                return null;
            }
            onconUUID = register.getOnconUUID();
        }
        if (null == userInfo) {
            userInfo = new UserInfo();
            userInfo.setPhone(phone);
            userInfo.setPassWord(ShiroKit.md5("", salt));
            userInfo.setNickName(nickName);
            userInfo.setIsAuth(1);
            userInfo.setConsumption(0D);
            userInfo.setBalance(0D);
            userInfo.setState(1);
            if(null != onconUUID){
                userInfo.setOnconUUID(onconUUID);
            }
            //用户所属企业
            if(null != areaCode){
                Company query = companyCityService.query(areaCode);
                userInfo.setCompanyId(null != query ? query.getId() : 1);
                userInfo.setRegistAreaCode(areaCode);
            }else {
                userInfo.setCompanyId(1);
            }
            this.insert(userInfo);
        }
        return userInfo.getId().toString();
    }
}
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/DateUtil.java
@@ -12,7 +12,1092 @@
 */
@Component
public class DateUtil {
    private static TimeZone tz = TimeZone.getTimeZone("GMT+8");
    // private static TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
    public static boolean hourMinuteBetween(String nowDate, String startDate, String endDate) throws Exception{
        SimpleDateFormat format = new SimpleDateFormat("HH:mm");
        Date now = format.parse(nowDate);
        Date start = format.parse(startDate);
        Date end = format.parse(endDate);
        long nowTime = now.getTime();
        long startTime = start.getTime();
        long endTime = end.getTime();
        return nowTime >= startTime && nowTime <= endTime;
    }
    /**
     * 得到系统日期
     *
     * @return
     */
    public static Date getDate() {
        TimeZone.setDefault(tz);
        return new Date();
    }
    /**
     * 获取当然凌晨的时间
     *
     * @return Date
     */
    public static Date getZero() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        return calendar.getTime();
    }
    /**
     * 判断日期是否在from,to之内 "yyyy-MM-dd" 格式
     *
     * @param time
     *            指定日期
     * @param from
     *            开始日期
     * @param to
     *            结束日期
     * @return true 在之间 false 不在之间
     */
    public static boolean belongCalendar(Date time, Date from, Date to) {
        Calendar date = Calendar.getInstance();
        date.setTime(time);
        Calendar after = Calendar.getInstance();
        after.setTime(from);
        Calendar before = Calendar.getInstance();
        before.setTime(to);
        if ((date.after(after) && date.before(before)) || (time.compareTo(from) == 0 || time.compareTo(to) == 0)) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 两个时间之差
     *
     * @param startTime
     * @param endTime
     * @param format
     * @return
     * @throws ParseException
     */
    public static String dateDiff(String startTime, String endTime, String format) throws ParseException {
        // 按照传入的格式生成一个simpledateformate对象
        SimpleDateFormat sd = new SimpleDateFormat(format);
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long nm = 1000 * 60;// 一分钟的毫秒数
        long ns = 1000;// 一秒钟的毫秒数
        long diff;
        long day = 0;
        long hour = 0;
        long min = 0;
        long sec = 0;
        // long time=0;
        String strTime = "";
        // 获得两个时间的毫秒时间差异
        diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
        day = diff / nd;// 计算差多少天
        hour = diff % nd / nh + day * 24;// 计算差多少小时
        min = diff % nd % nh / nm + day * 24 * 60;// 计算差多少分钟
        sec = diff % nd % nh % nm / ns;// 计算差多少秒
        // 输出结果
        /*
         * System.out.println("时间相差:" + day + "天" + (hour - day * 24) + "小时" +
         * (min - day * 24 * 60) + "分钟" + sec + "秒。");
         * System.out.println("hour=" + hour + ",min=" + min);
         */
        if (day == 1) {
            strTime = "昨天";
        } else if (day > 1) {
            // strTime=day+"天前";
            strTime = startTime.substring(0, 10);
        } else if (hour >= 1 && hour < 24) {
            strTime = hour + "小时前";
        } else {
            if (min == 0) {
                strTime = sec + "秒钟前";
            } else {
                strTime = min + "分钟前";
            }
        }
        // if (str.equalsIgnoreCase("h")) {
        // return hour;
        // } else {
        // return min;
        // }
        // if (str.equalsIgnoreCase("h")) {
        // return hour;
        // } else {
        // return min;
        // }
        return strTime;
    }
    /**
     * 得到系统Calendar日期
     *
     * @return
     */
    public static Calendar getCalendar() {
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        return cal;
    }
    /**
     * 获取当前时间
     *
     * @return
     */
    public static long getMillisecond() {
        long millisecond = 0;
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 获取本月1号的时间戳
     *
     * @return
     */
    public static long getMillisecond_MONTH() {
        long millisecond = 0;
        TimeZone.setDefault(tz);
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 获取上个月1号的时间戳
     *
     * @return
     */
    public static long getMillisecond_FRONTMONTH() {
        long millisecond = 0;
        Calendar cal = getCalendar();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.MONTH, Calendar.MONTH - 2);
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 获取当前毫秒数
     *
     * @return long
     */
    public static long getCurMilli() {
        long millisecond = 0;
        Calendar cal = Calendar.getInstance();
        millisecond = cal.getTimeInMillis();
        return millisecond;
    }
    /**
     * 日期转毫秒
     *
     * @param date
     * @return
     */
    public static long getMillisecond(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if (!"".equals(date)) {
            newDate = sdf.format(date);
        } else {
            newDate = sdf.format(DateUtil.getDate());
        }
        long millisecond = 0;
        try {
            millisecond = sdf.parse(newDate).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 日期转毫秒(加24小时,yyyy-MM-dd HH:mm:ss)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_24h(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if (!"".equals(date)) {
            newDate = sdf.format(date);
        } else {
            newDate = sdf.format(DateUtil.getDate());
        }
        long millisecond = 24 * 3600 * 1000;
        try {
            millisecond += sdf.parse(newDate).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 日期转毫秒(加N年)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_year(String date, Integer year) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.YEAR, year);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
    /**
     * 日期转毫秒(加N天)
     *
     * @param date
     *            毫秒字符串
     * @return
     */
    public static Date getMillisecond_day(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = date;
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.DATE, day);
        Date dt1 = rightNow.getTime();
        Date dates = new Date(dt1.getTime());
        return dates;
    }
    /**
     * 日期转毫秒(加N月)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_month(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MONTH, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
    /**
     * 日期转毫秒(加分钟)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_fz(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if ("".equals(date)) {
            newDate = sdf.format(DateUtil.getDate());
        } else {
            newDate = getDateTime(Long.parseLong(date));
        }
        Date dt = null;
        try {
            dt = sdf.parse(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1.getTime();
    }
    public static Date getMillisecond_fz1(String date, Integer day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dt = null;
        try {
            dt = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar rightNow = Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.MINUTE, day);
        Date dt1 = rightNow.getTime();
        return dt1;
    }
    /**
     * 字符串日期转毫秒
     *
     * @param date
     * @return
     */
    public static long getMillisecond_str(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if ("".equals(date)) {
            date = sdf.format(DateUtil.getDate());
        }
        long millisecond = 0;
        try {
            millisecond = sdf.parse(date).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 字符串日期转毫秒
     *
     * @param date
     * @return
     */
    public static long getMillisecond_strYmd(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if ("".equals(date)) {
            date = sdf.format(DateUtil.getDate());
        }
        long millisecond = 0;
        try {
            millisecond = sdf.parse(date).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 字符串日期转Date
     *
     * @param string
     * @return date
     * @throws ParseException
     */
    public static Date getStrToDate(String dateString) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(dateString);
        return date;
    }
    /**
     * 字符串日期转Date
     *
     * @param date
     * @return
     */
    public static Date getDate_str(String dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        sdf.setTimeZone(tz);
        if ("".equals(dateStr)) {
            dateStr = sdf.format(DateUtil.getDate());
        }
        Date date = null;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 字符串日期转Date yyyy-MM-dd HH:mm
     *
     * @param date
     * @return
     */
    public static Date getDate_str2(String dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        sdf.setTimeZone(tz);
        if ("".equals(dateStr)) {
            dateStr = sdf.format(DateUtil.getDate());
        }
        Date date = null;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 字符串日期转Date yyyy-MM-dd HH:mm:ss
     *
     * @param date
     * @return
     */
    public static Date getDate_str3(String dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(tz);
        if ("".equals(dateStr)) {
            dateStr = sdf.format(DateUtil.getDate());
        }
        Date date = null;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 字符串日期转Date
     *
     * @param date
     * @return
     */
    public static Date getDate_strYMd(Long dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if (dateStr == null) {
            dateStr = DateUtil.getCurMilli();
        }
        Date date = null;
        try {
            date = sdf.parse(sdf.format(new Date(dateStr)));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 毫秒转Date
     *
     * @param date
     * @return
     */
    public static Date getDate_strYMdHms(Long dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (dateStr == null) {
            dateStr = DateUtil.getCurMilli();
        }
        Date date = null;
        try {
            date = sdf.parse(sdf.format(new Date(dateStr)));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 字符串日期转Date
     *
     * @param date
     * @return
     */
    public static Date getDate_strYMdHm(Long dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        if (dateStr == null) {
            dateStr = DateUtil.getCurMilli();
        }
        Date date = null;
        try {
            date = sdf.parse(sdf.format(new Date(dateStr)));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    /**
     * 字符串日期转毫秒
     *
     * @param date
     * @return
     */
    public static long getMillisecond_strDmy(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        if ("".equals(date)) {
            date = sdf.format(DateUtil.getDate());
        }
        long millisecond = 0;
        try {
            millisecond = sdf.parse(date).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 字符串日期转毫秒转毫秒(加24小时)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_str_24h(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if ("".equals(date)) {
            date = sdf.format(DateUtil.getDate());
        }
        long millisecond = 24 * 3600 * 1000;
        try {
            millisecond += sdf.parse(date).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 字符串日期转毫秒转毫秒(加24小时)
     *
     * @param date
     * @return
     */
    public static long getMillisecond_strYmd_24h(String date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if ("".equals(date)) {
            date = sdf.format(DateUtil.getDate());
        }
        long millisecond = 24 * 3600 * 1000;
        try {
            millisecond += sdf.parse(date).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millisecond;
    }
    /**
     * 毫秒转日期
     *
     * @param millisecond
     * @return
     */
    public static String getDate(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 转换为指定格式的时间
     *
     * @return Date
     */
    public static Date getDate(String date, String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        Date d = null;
        try {
            d = format.parse(date);
        } catch (ParseException ex) {
            return null;
        }
        return d;
    }
    /**
     * 毫秒转日期
     *
     * @param millisecond
     * @return
     */
    public static String getDate_HH(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("HH");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 毫秒转日期时间
     *
     * @param millisecond
     * @return
     */
    public static String getDateTime(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 毫秒转年月日
     *
     * @param millisecond
     * @return
     */
    public static String getDateYMD(long millisecond) {
        if (millisecond == 0) {
            millisecond = getCurMilli();
        }
        SimpleDateFormat dateformat = new SimpleDateFormat("yyyy年MM月dd日");
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return dateformat.format(calendar.getTime());
    }
    /**
     * 两日期相差毫秒
     *
     * @param startDate
     * @param endDate
     * @return
     */
    public static long getMinusMillisecond(Date startDate, Date endDate) {
        long startMillisecond = getMillisecond(startDate);
        long endMillisecond = getMillisecond(endDate);
        long minusMillisecond = endMillisecond - startMillisecond;
        if (minusMillisecond < 0) {
            minusMillisecond = 0;
        }
        return minusMillisecond;
    }
    /**
     * 两日期相差天数
     *
     * @param startDate
     * @param endDate
     * @return
     */
    public static long getMinusDay(Date startDate, Date endDate) {
        long startMillisecond = getMillisecond(startDate);
        long endMillisecond = getMillisecond(endDate);
        long minusMillisecond = endMillisecond - startMillisecond;
        long day = 0;
        if (minusMillisecond < 0) {
            day = 0;
        } else {
            day = minusMillisecond / (24 * 3600 * 1000);
        }
        return day;
    }
    /**
     * 前N天毫秒
     *
     * @param day
     * @return
     */
    public static long getRetreatDay_millisecond(int day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        long nowMillisecond = 0;
        try {
            nowMillisecond = sdf.parse(sdf.format(DateUtil.getDate())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        nowMillisecond += 24 * 3600 * 1000;
        long retreatMillisecond = 24 * 3600 * 1000 * day;
        return nowMillisecond - retreatMillisecond;
    }
    /**
     * 前N天时间
     *
     * @param day
     * @return
     */
    public static String getRetreatDay_millisecond1(int day) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        long nowMillisecond = 0;
        try {
            nowMillisecond = sdf.parse(sdf.format(DateUtil.getDate())).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        nowMillisecond += 24 * 3600 * 1000;
        long retreatMillisecond = 24 * 3600 * 1000 * day;
        long s = nowMillisecond - retreatMillisecond;
        Date date = new Date(s);
        String res = sdf.format(date);
        return res;
    }
    // 当前时间前30天
    public static String getRetreatDay_millisecond2() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String endDate = sdf.format(today);// 当前日期
        // 获取三十天前日期
        Calendar theCa = Calendar.getInstance();
        theCa.setTime(today);
        theCa.add(theCa.DATE, -30);// 最后一个数字30可改,30天的意思
        Date start = theCa.getTime();
        String startDate = sdf.format(start);// 三十天之前日期
        return startDate;
    }
    /**
     * 日期转秒
     *
     * @param date
     * @return
     */
    public static long getDecond(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String newDate = "";
        if (!"".equals(date)) {
            newDate = sdf.format(date);
        } else {
            newDate = sdf.format(DateUtil.getDate());
        }
        long second = 0;
        try {
            second = sdf.parse(newDate).getTime() / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return second;
    }
    /**
     * 日期转String
     *
     * @param date
     * @return
     * @throws ParseException
     */
    public static String getDateToString(Date date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String newDate = sdf.format(date);
        long millisecond = sdf.parse(newDate).getTime();
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return sdf.format(calendar.getTime());
    }
    public static String getDateToString(Date date,String pattern) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        String newDate = sdf.format(date);
        long millisecond = sdf.parse(newDate).getTime();
        Calendar calendar = getCalendar();
        calendar.setTimeInMillis(millisecond);
        return sdf.format(calendar.getTime());
    }
    /**
     * 毫秒转星期XX
     *
     * @param millisecond
     * @return
     */
    public static int getDate_week(Long millisecond) {
        if (millisecond == null) {
            millisecond = getCurMilli();
        }
        Calendar cal = getCalendar();
        cal.setTimeInMillis(millisecond);
        return cal.get(Calendar.DAY_OF_WEEK) - 1;
    }
    /**
     * 获取当前系统时间已yyyy-MM-dd HH:mm:ss格式化的字符串
     */
    public static String nowStr() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
        return dateFormat.format(getDate());
    }
    /**
     *
     * 获取之前几天日期
     *
     * @param pattern
     *            yyyy-MM-dd(默认)
     * @param few
     *            之前几天
     */
    public static String beforeFewDayStr(String pattern, Integer few) {
        if (pattern == null || "".equals(pattern)) {
            pattern = "yyyy-MM-dd";
        }
        Calendar c = getCalendar();
        c.add(Calendar.DATE, -few);
        return new SimpleDateFormat(pattern).format(c.getTime());
    }
    /**
     * 得到几天后的时间
     *
     * @param d
     * @param day
     * @return
     */
    public static Date getDateAfter(Date d, int day) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar now = Calendar.getInstance();
        now.setTime(d);
        now.set(Calendar.DATE, now.get(Calendar.DATE) - day);//+后 -前
        return now.getTime();
    }
    /**
     * 获取今天日期
     *
     * @param pattern
     *            yyyy-MM-dd(默认)
     */
    public static String todayStr(String pattern) {
        if (pattern == null || "".equals(pattern)) {
            pattern = "yyyy-MM-dd";
        }
        return new SimpleDateFormat(pattern).format(getDate());
    }
    /**
     * 获取当前系统时间戳字符串
     */
    public static String nowDateLongStr() {
        return getDate().getTime() + "";
    }
    /**
     * 获取当前系统时间
     *
     * @return
     */
    public static Date now() {
        return getDate();
    }
    /*public static void main(String[] args) throws ParseException {
        // 打印测试日期包含
        Date time1 = getDate_str("2017-3-11");
        Date time2 = getDate_str("2017-3-15");
        Date time3 = getDate_str("2017-3-17");
        Date time4 = getDate_str("2017-3-12");
        Date time5 = getDate_str("2017-3-16");
        Date from = getDate_str("2017-3-12");
        Date to = getDate_str("2017-3-16");
        System.out.println(belongCalendar(time1, from, to));
        System.out.println(belongCalendar(time2, from, to));
        System.out.println(belongCalendar(time3, from, to));
        System.out.println(belongCalendar(time4, from, to));
        System.out.println(belongCalendar(time5, from, to));
        System.out.println(nowStr());
    }
*/
    /**
     * 把日期往后增加一天. 正数往后推,负数往前移动
     *
     * @param day
     * @return
     */
    public static String getString(int day) {
        Date date = new Date();// 取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, day);// 把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); // 这个时间就是日期往后推一天的结果
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date);
        return dateString;
    }
    /**
     * 根据当前日期获得所在周的日期区间(周一和周日日期)
     *
     * @return
     * @author zhaoxuepu
     * @throws ParseException
     */
    public static String getTimeInterval(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        // System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期
        // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 获得当前日期是一个星期的第几天
        int day = cal.get(Calendar.DAY_OF_WEEK);
        // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
        String imptimeBegin = sdf.format(cal.getTime());
        // System.out.println("所在周星期一的日期:" + imptimeBegin);
        cal.add(Calendar.DATE, 6);
        String imptimeEnd = sdf.format(cal.getTime());
        // System.out.println("所在周星期日的日期:" + imptimeEnd);
        return imptimeBegin + "," + imptimeEnd;
    }
    /**
     * 根据当前日期获得上周的日期区间(上周周一和周日日期)
     *
     * @return
     * @author zhaoxuepu
     */
    public static String getLastTimeInterval() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar1 = Calendar.getInstance();
        Calendar calendar2 = Calendar.getInstance();
        int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1;
        int offset1 = 1 - dayOfWeek;
        int offset2 = 7 - dayOfWeek;
        calendar1.add(Calendar.DATE, offset1 - 7);
        calendar2.add(Calendar.DATE, offset2 - 7);
        // System.out.println(sdf.format(calendar1.getTime()));// last Monday
        String lastBeginDate = sdf.format(calendar1.getTime());
        // System.out.println(sdf.format(calendar2.getTime()));// last Sunday
        String lastEndDate = sdf.format(calendar2.getTime());
        return lastBeginDate + "," + lastEndDate;
    }
    public static String DateYUE() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar c = Calendar.getInstance();
        c.add(Calendar.MONTH, 0);
        c.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
        String first = format.format(c.getTime());
        // 获取当前月最后一天
        Calendar ca = Calendar.getInstance();
        ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
        String last = format.format(ca.getTime());
        return first + "," + last;
    }
    public static String getBeforeFirstMonthdate() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        Calendar calendar1 = Calendar.getInstance();
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        int month = calendar1.get(Calendar.MONTH);
        calendar1.set(Calendar.MONTH, month - 1);
        calendar1.set(Calendar.DAY_OF_MONTH, calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));
        String str = format.format(calendar.getTime());
        String str1 = format.format(calendar1.getTime());
        return str + "," + str1;
    }
    /**
     * 获取某年第一天和最后一天日期
     *
     * @param year
     *            年份
     * @return Date
     */
    public static String getYearFirst(int year) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Calendar calendar1 = Calendar.getInstance();
        calendar1.clear();
        calendar1.set(Calendar.YEAR, year);
        calendar1.roll(Calendar.DAY_OF_YEAR, -1);
        String str = format.format(calendar.getTime());
        String str1 = format.format(calendar1.getTime());
        return str + "," + str1;
    }
    public static Date addDate(Date date,Integer day) throws ParseException {
        long time = date.getTime(); // 得到指定日期的毫秒数
        day = day*24*60*60*1000; // 要加上的天数转换成毫秒数
        time+=day; // 相加得到新的毫秒数
        return new Date(time); // 将毫秒数转换成日期
    }
    // 获取一天开始和结束
    public static String getDay() {
        Date dBefore = new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
        String defaultStartDate = sdf.format(dBefore); //格式化前一天
        defaultStartDate = defaultStartDate+" 00:00:00";
        String defaultEndDate = defaultStartDate.substring(0,10)+" 23:59:59";
        return defaultStartDate + "," + defaultEndDate;
    }
    public static void main(String[] args){
        System.out.println(DateUtil.getDate("2020-05-28", "yyyy-MM-dd").getTime());
        System.out.println(new Date().getTime());
    }
    /**
     * 获取给定日期天的开始时间点或结束时间点
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -29,7 +29,7 @@
@Component
public class PushUtil {
    
    private final String socket_uri = "http://127.0.0.1:6000";
    private final String socket_uri = "http://192.168.110.111:6000";
    @Autowired
    private IOrderTaxiService orderTaxiService;
    
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -142,7 +142,7 @@
     */
    public void timoutNoPayment() {
        List<OrderPrivateCar> orderPrivateCars = orderPrivateCarService.selectList(new EntityWrapper<OrderPrivateCar>().eq("state", 7)
                .eq("isDelete", 1).eq("recoveryOrder", 0).last(" and now() >= DATE_ADD(insertTime, INTERVAL 24 HOUR)"));
                .eq("isDelete", 1).eq("recoveryOrder", 0).last(" and now() >= DATE_ADD(insertTime, INTERVAL 30 MINUTE)"));
        for (OrderPrivateCar orderPrivateCar : orderPrivateCars) {
            try {
                //使用备付金进行支付订单
@@ -172,11 +172,11 @@
                request.setDriverId(driver1.getEmpId().toString());
                ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request);
                Integer status1 = travelItineraryList.getList().get(0).getStatus();
                if(8 != status1){
                if(9 != status1){
                    //中台修改订单状态
                    ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
                    request1.setOrderId(orderPrivateCar.getTravelId());
                    request1.setStatus(8);
                    request1.setStatus(9);
                    if (null != orderPrivateCar.getDriverId()) {
                        request1.setDriverId(driver1.getEmpId().toString());
                        request1.setSupplierShopId(company.getEnterCode());
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -515,7 +515,7 @@
        tradePayOffData.setPaymentInfos(paymentInfoRequests);
        List<GoodsInfo> goodsInfo = new ArrayList<>();
        GoodsInfo goodsInfo1 = new GoodsInfo();
        goodsInfo1.setMerchantCode(":B00000872");
        goodsInfo1.setMerchantCode("B00000872");
        goodsInfo1.setCustId("CB0000004686");
        goodsInfo1.setCustName("证联消费平台交易客户");
        goodsInfo1.setProfitSharing("1");
@@ -526,7 +526,7 @@
        TradeRequest request = new TradeRequest<TradePayOffData>();
        request.setSceneId("1774717104844095488");
        request.setAppId(QianYunTongProperties.appkey);
        request.setConfigVersion(1);
        request.setConfigVersion(2);
        request.setRequestId(UUIDUtil.getRandomCode());
        request.setData(tradePayOffData);
        //请求路径