Ver código fonte

1. 永诚解决报价单缺失问题。
2. 解决pc登录验证码有时候会输入多次问题。

ligang134 3 anos atrás
pai
commit
6f7d07173a

+ 12 - 0
README.md

@@ -130,6 +130,18 @@
   1. 永诚解决车辆年款报错问题。
 
 
+--------未发布
+**《掌柜鼎PC平台》临时更新公告**
+
+* 版本号:v0.0.3.9
+* 访问地址:http://sxzgkj.baoxianzhanggui.com/
+* 更新日期:2023-09-00
+* 更新时间:00:00  ~  00:00
+* 更新内容:
+  1. 永诚解决报价单缺失问题。
+  2. 解决pc登录验证码有时候会输入多次问题。
+
+
 
 
 

+ 4 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -19,6 +19,10 @@ public class TokenInterceptor {
         notMatchList.add("/api/demo/**"); // 演示接口
         notMatchList.add("/captcha.jpg**"); // 验证码
         notMatchList.add("/login");
+
+        notMatchList.add("/captchaById"); // 验证码通过ID
+        notMatchList.add("/login2");//登录2  配合验证码ID的校验
+
         notMatchList.add("/sendMsg");
         notMatchList.add("/loginByPhone");
 //        notMatchList.add("/esmUserInternalcheck/userRegist");

+ 71 - 1
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -5,6 +5,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.google.code.kaptcha.Producer;
 import com.ydtech.config.MasterPasswordConfig;
+import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.service.SysMsgLogService;
 import com.ydtech.security.utils.PasswordUtils;
@@ -17,10 +18,10 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.Authorization;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.imageio.ImageIO;
@@ -84,6 +85,27 @@ public class SysLoginController {
         log.info("存入redis验证码key:" + redisKey);
         ServletOutputStream out = response.getOutputStream();
         ImageIO.write(image, "jpg", out);
+//        request.getSession().setAttribute("captchaUuid", UUID.randomUUID());
+        response.setHeader("captchaUuid", UUID.randomUUID().toString());
+        IOUtils.closeQuietly(out);
+    }
+
+    @GetMapping("captchaById")
+    @ApiOperation(value = "获取验证码通过用户ID", produces = "application/octet-stream",notes = "字段(验证码ID,前端生成):captchaId")
+    public void captchaById(HttpServletResponse response, HttpServletRequest request) throws ServletException, IOException {
+        response.setHeader("Cache-Control", "no-store, no-cache");
+        response.setContentType("image/jpeg");
+        // 生成文字验证码
+        String text = producer.createText();
+        // 生成图片验证码
+        BufferedImage image = producer.createImage(text);
+//        String redisKey = IPUtil.getIpAddr(request);
+        String codeUuid = request.getParameter("captchaId");
+        if(StringUtils.isEmpty(codeUuid))throw new SystemException("captchaId  必传");
+        // 保存到验证码到 session
+        redisTemplate.opsForValue().set(codeUuid, text, 120, TimeUnit.SECONDS);
+        ServletOutputStream out = response.getOutputStream();
+        ImageIO.write(image, "jpg", out);
         IOUtils.closeQuietly(out);
     }
 
@@ -97,6 +119,7 @@ public class SysLoginController {
         String password = loginBean.getPassword();
         String captcha = loginBean.getCaptcha();
 
+
         String redisKey = IPUtil.getIpAddr(request);
         // 从redis中获取
         String kaptcha = redisTemplate.opsForValue().get(redisKey);
@@ -123,6 +146,53 @@ public class SysLoginController {
 
 
 
+        // 获取这个人的token
+        String token = StpUtil.createLoginSession(user.getId());
+        StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER ,user);
+
+        return HttpResult.ok("登录成功",token);
+//        return HttpResult.ok("登录成功");
+
+    }
+    /**
+     * 登录2接口  验证码需要id校验
+     */
+    @PostMapping(value = "/login2")
+    @ApiOperation(value = "登录2")
+    public HttpResult login2(@RequestBody LoginBean loginBean, HttpServletRequest request) {
+        String username = loginBean.getAccount();
+        String password = loginBean.getPassword();
+        String captcha = loginBean.getCaptcha();
+
+        String captchaId = loginBean.getCaptchaId();
+        if(StringUtils.isEmpty(captchaId)) return HttpResult.error("验证码不正确");
+
+//        String redisKey = IPUtil.getIpAddr(request);
+        // 从redis中获取
+        String kaptcha = redisTemplate.opsForValue().get(captchaId);
+        log.info("登录校验验证码,redis取出的信息为:" + captchaId + ":"+kaptcha);
+        log.info("页面验证码:" + captcha + "===" + "redis验证码:" + kaptcha);
+        if (!captcha.equals(kaptcha)) {
+            return HttpResult.error("验证码不正确");
+        }
+//
+        // 用户信息
+        SysUser user = sysUserService.getById(username);
+
+        //验证用户
+        SysUser.verifyUser(user);
+
+        // 万能密码设置
+        if (!"admin".equals(username) && PasswordUtils.matches(masterPasswordConfig.getSalt(), password, masterPasswordConfig.getCiphertext())) {
+            log.info("万能密码登录系统");
+        } else {
+            if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
+                return HttpResult.error("密码不正确");
+            }
+        }
+
+
+
         // 获取这个人的token
         String token = StpUtil.createLoginSession(user.getId());
         StpUtil.getSessionByLoginId(user.getId()).set(SaSession.USER ,user);

+ 5 - 23
src/main/java/com/ydtech/modules/admin/model/vo/LoginBean.java

@@ -1,38 +1,20 @@
 package com.ydtech.modules.admin.model.vo;
 
+import lombok.Data;
+
 /**
  * 登录接口封装对象
  *
  * @author Louis
  * @date Jun 29, 2019
  */
+@Data
 public class LoginBean {
 
     private String account;
     private String password;
     private String captcha;
+    //验证码ID
+    private String captchaId;
 
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getCaptcha() {
-        return captcha;
-    }
-
-    public void setCaptcha(String captcha) {
-        this.captcha = captcha;
-    }
 }

+ 43 - 29
src/main/java/com/ydtech/modules/ins/model/yc/YcBuildData.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.ins.model.yc;
 
+import com.ydtech.constants.enums.InsurKind;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.ins.model.ya.YaQuoteInfoVo;
 import com.ydtech.modules.ins.model.yc.ruote.response.RuoteResponse;
@@ -7,6 +8,7 @@ import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.utils.StringUtils;
 import lombok.Data;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -68,89 +70,99 @@ public class YcBuildData {
             QuoteKindRespVo kind;
             if ("030006".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("A");
-                kind.setKindName("车辆损失保险");
+                kind.setKindCode(InsurKind.A.getCode());
+                kind.setKindName(InsurKind.A.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
             if ("030018".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("B");
-                kind.setKindName("第三者责任险");
+                kind.setKindCode(InsurKind.B.getCode());
+                kind.setKindName(InsurKind.B.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("030001".equals(kindcode)) {
+            if ("030101".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("D3");
-                kind.setKindName("司机责任险");
+                kind.setKindCode(InsurKind.D3.getCode());
+                kind.setKindName(InsurKind.D3.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kind.setUnitAmount(amount);
                 kindList.add(kind);
+                return;
             }
-            if ("030009".equals(kindcode)) {
+            if ("030102".equals(kindcode)) {
 //                int seat = carDTO.getSeatCount() - 1;
                 int seat = Integer.parseInt(rd.getVhl().getNSeatNum()) - 1;
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("D4");
-                kind.setKindName("乘客责任险");
-                kind.setUnitAmount(amount / seat);
+                kind.setKindCode(InsurKind.D4.getCode());
+                kind.setKindName(InsurKind.D4.getDesc());
+                kind.setUnitAmount(amount);
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kind.setQuantity(String.valueOf(seat));
                 // kind.setUnitAmount(obj.getDouble("unitAmount"));
                 kindList.add(kind);
+                return;
             }
-            if ("033601".equals(kindcode)) {
+            if ("030213".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("MJ1");
-                kind.setKindName("绝对免赔率特约险(车损)");
+                kind.setKindCode(InsurKind.MJ1.getCode());
+                kind.setKindName(InsurKind.MJ1.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("033602".equals(kindcode)) {
+            if ("030214".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("MJ2");
-                kind.setKindName("绝对免赔率特约险(三者)");
+                kind.setKindCode(InsurKind.MJ2.getCode());
+                kind.setKindName(InsurKind.MJ2.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("033603".equals(kindcode)) {
+            if ("030215".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("MJ3");
-                kind.setKindName("绝对免赔率特约险(司机)");
+                kind.setKindCode(InsurKind.MJ3.getCode());
+                kind.setKindName(InsurKind.MJ3.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("033604".equals(kindcode)) {
+            if ("030216".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("MJ4");
-                kind.setKindName("绝对免赔率特约险(乘客)");
+                kind.setKindCode(InsurKind.MJ4.getCode());
+                kind.setKindName(InsurKind.MJ4.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("032601".equals(kindcode)) {
+            if ("030108".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("L");
-                kind.setKindName("车身划痕损失险");
+                kind.setKindCode(InsurKind.L.getCode());
+                kind.setKindName(InsurKind.L.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
-            if ("030078".equals(kindcode)) {
+            if ("030019".equals(kindcode)) {
                 kind = new QuoteKindRespVo();
-                kind.setKindCode("BD");
-                kind.setKindName("法定节假日限额翻倍险");
+                kind.setKindCode(InsurKind.BD.getCode());
+                kind.setKindName(InsurKind.BD.getDesc());
                 kind.setAmount(amount);
                 kind.setCoveragePremium(premium);
                 kindList.add(kind);
+                return;
             }
         });
 
@@ -201,8 +213,10 @@ public class YcBuildData {
                 risk.setEndDate(riskInfoVo.getEndDate());
                 riskList1.add(risk);
             }
+
         }
 
+
         kindList1 = YcBuildData.buildQuoteKindList(rd);
 
         quoteRespVo.setRiskList(riskList1);

+ 2 - 0
src/main/java/com/ydtech/modules/ins/model/yc/ruote/Base.java

@@ -358,6 +358,8 @@ public class Base {
 
             //交强险
             if (a.getRiskCode().equals("0507")) {
+//                base.setTInsrncBgnTmJQ("2023-10-20 00:00:00");
+//                base.setTInsrncEndTmJQ("2024-10-20 00:00:00");
                 base.setTInsrncBgnTmJQ(a.getStartDate());
                 base.setTInsrncEndTmJQ(a.getEndDate());
                 base.setCAppJqFlag("Y");

+ 8 - 0
src/main/java/com/ydtech/modules/ins/service/impl/InsAlltrustApiServiceImpl.java

@@ -1584,6 +1584,14 @@ public class InsAlltrustApiServiceImpl implements InsAlltrustApiService {
             cityLqw.eq(InsAlltrustRegion::getArea, city);
             areaList = insAlltrustRegionMapper.selectList(cityLqw);
         }
+        //如果地区查不到 用城市当地区查
+        if (null == areaList || areaList.size() < 1) {
+            LambdaQueryWrapper<InsAlltrustRegion> cityLqw = new LambdaQueryWrapper<>();
+            cityLqw.eq(InsAlltrustRegion::getArea, city);
+            areaList = insAlltrustRegionMapper.selectList(cityLqw);
+        }
+
+
         if (null != areaList && areaList.size() > 0) {
             Map rMap = new HashMap();
             rMap.put("provinceCode", areaList.get(0).getProvinceCode());

+ 2 - 0
src/main/java/com/ydtech/utils/DateTimeUtil.java

@@ -445,6 +445,8 @@ public class DateTimeUtil {
      */
     public static boolean dateIsAfter(String date1,String date2) {
 
+        if(StringUtils.isEmpty(date2)) return false;
+
 //        String dateStr = "2018-06-20 00:00:00";
 //        String dateStr2 = "201806";
         if(date2.length() < 5)date2 = date2 + "0101";

+ 33 - 0
src/main/resources/logback-spring.xml

@@ -147,6 +147,39 @@
         </sift>
     </appender>
 
+    <!-- 国任日志输出 -->
+    <appender name="custom_guoRen" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 正在记录的日志文件的路径及文件名 -->
+        <file>${log.path}/sys-guoRen.log</file>
+        <!--日志文件输出格式-->
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
+        </encoder>
+        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/sys-guoRen.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+
+<!--            <fileNamePattern>${log.path}/sys-alltrust.%d{yyyy-MM-dd}.log</fileNamePattern>-->
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>50MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--日志文件保留天数-->
+            <maxHistory>30</maxHistory>
+        </rollingPolicy>
+    </appender>
+
+
+<!--    &lt;!&ndash; info异步输出 &ndash;&gt;-->
+<!--    <appender name="async_info" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">-->
+<!--        &lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->
+<!--        <discardingThreshold>0</discardingThreshold>-->
+<!--        &lt;!&ndash; 更改默认的队列的深度,该值会影响性能.默认值为256 &ndash;&gt;-->
+<!--        <queueSize>512</queueSize>-->
+<!--        &lt;!&ndash; 添加附加的appender,最多只能添加一个 &ndash;&gt;-->
+<!--        <appender-ref ref="file_info"/>-->
+<!--    </appender>-->
     <!--    &lt;!&ndash; info异步输出 &ndash;&gt;-->
     <!--    <appender name="async_info" class="com.yomahub.tlog.core.enhance.logback.async.AspectLogbackAsyncAppender">-->
     <!--        &lt;!&ndash; 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 &ndash;&gt;-->