Browse Source

添加加密方法,修改小程序订单详情接口,修改管理端订单详情接口

liu 1 year ago
parent
commit
1a627a6941

+ 17 - 0
src/main/java/com/template/annotation/DESRespondSecret.java

@@ -0,0 +1,17 @@
+package com.template.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 返回参数加密注解
+ */
+
+//可以作用在类上和方法上
+@Target(value = {ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DESRespondSecret {
+    boolean validated() default true;
+}

+ 95 - 0
src/main/java/com/template/aop/DESResponseSecretAspect.java

@@ -0,0 +1,95 @@
+package com.template.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.template.annotation.DESRespondSecret;
+import com.template.common.utils.EncryptUtil;
+import com.template.model.result.CommonResult;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * @Author: binguo
+ * @Date: 2024/2/26 星期一 10:02
+ * @Description: com.template.aop
+ * @Version: 1.0
+ */
+@Component
+@Aspect
+//规定AOP的执行顺序
+//Order(1) 多个aop时可通过该注解来确定执行顺序
+public class DESResponseSecretAspect {
+
+    // 定义切点,使用了@DESRespondSecret注解的类 或 使用了@DESRespondSecret注解的方法
+
+    /**
+     * 切点,方法上有注解或类上有注解
+     * 拦截类或者是方法上标注注解的方法
+     */
+    @Pointcut("@within(com.template.annotation.DESRespondSecret) || @annotation(com.template.annotation.DESRespondSecret)")
+    public void pointCut() {
+    }
+
+    @Around("pointCut()")
+    public Object after(ProceedingJoinPoint joinPoint) throws Throwable {
+        Object rvt = joinPoint.proceed(joinPoint.getArgs());
+        return rvt;
+    }
+
+    /**
+     * 与After的区别在于AfterReturning只有在方法执行成功之后才会被植入,如果After和
+     * AfterReturning同时存在于一个文件中,谁写在前面谁先运行
+     *
+     * @param joinpoint
+     * @param rvt
+     * @return
+     */
+    @AfterReturning(pointcut = "execution(public * com.template.controller.*.*(..))", returning = "rvt")
+    public Object log(JoinPoint joinpoint, Object rvt) {
+        //获取被代理对象
+        Object target = joinpoint.getTarget();
+        //获取通知签名 获取方法上的DESRespondSecret注解
+        MethodSignature signature = (MethodSignature) joinpoint.getSignature();
+        try {
+            // 获取被代理方法
+            Method pointMethod = target.getClass().getMethod(signature.getName(), signature.getParameterTypes());
+            // 获取被代理方法上面的注解@DESRespondSecret
+            DESRespondSecret secret = pointMethod.getAnnotation(DESRespondSecret.class);
+            // 被代理方法上没有,则说明@DESRespondSecret注解在被代理类上
+            if (secret == null) {
+                secret = target.getClass().getAnnotation(DESRespondSecret.class);
+            }
+            //类上也没有 直接返回
+            if (secret == null) {
+                return rvt;
+            }
+            // 如果有,并且值为false,则不进行加密
+            if (secret != null && !secret.validated()) {
+                return rvt;
+            } else {
+                CommonResult baseVo1 = (CommonResult) rvt;
+                // 获取返回值json字符串
+                Object data = baseVo1.getData();
+                if (null != data) {
+                    String jsonString = JSON.toJSONString(data);
+                    // 加密
+                    String s = EncryptUtil.encrypt(jsonString);
+                    baseVo1.setData(s);
+                }
+                return baseVo1;
+
+            }
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
+        }
+        return rvt;
+    }
+
+}

+ 83 - 0
src/main/java/com/template/common/utils/EncryptUtil.java

@@ -0,0 +1,83 @@
+package com.template.common.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import java.security.SecureRandom;
+import java.util.Base64;
+
+/**
+ * 对称加密算法
+ *
+ * @Date: 2024/2/26 星期一 10:31
+ * @Description: com.template.common.utils
+ * @Version: 1.0
+ */
+public class EncryptUtil {
+    //http://tool.chacuo.net/cryptdes 在线解密
+    public static String secretKeyB = "com.template.common.utils";
+    private final static String DES = "DES";
+
+    //加密
+    public static String encrypt(String data) {
+        byte[] bt;
+        try {
+            bt = encrypt(data.getBytes(), secretKeyB.getBytes());
+            //加密
+            String strs = Base64.getEncoder().encodeToString(bt);
+            return strs;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    //解密
+    public static String decrypt(String data) {
+        if (data == null) {
+            return null;
+        }
+        byte[] buf;
+        byte[] bt;
+        try {
+            //解密
+            buf = Base64.getDecoder().decode(data);
+            bt = decrypt(buf, secretKeyB.getBytes());
+            return new String(bt);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
+        // 生成可信任的随机数源
+        SecureRandom sr = new SecureRandom();
+        // 从原始密钥数据创建DESKeySpec对象
+        DESKeySpec dks = new DESKeySpec(key);
+        // 创建密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
+        SecretKey securekey = keyFactory.generateSecret(dks);
+        // Cipher对象实际完成加密操作
+        Cipher cipher = Cipher.getInstance(DES);
+        // 用密钥初始化Cipher对象
+        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
+        return cipher.doFinal(data);
+    }
+
+    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
+        // 生成可信任的随机数源
+        SecureRandom sr = new SecureRandom();
+        // 从原始密钥数据创建DESKeySpec对象
+        DESKeySpec dks = new DESKeySpec(key);
+        // 创建密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
+        SecretKey securekey = keyFactory.generateSecret(dks);
+        // Cipher对象实际完成解密操作
+        Cipher cipher = Cipher.getInstance(DES);
+        // 用密钥初始化Cipher对象
+        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
+        return cipher.doFinal(data);
+    }
+}

+ 29 - 24
src/main/java/com/template/controller/HouseNumberStateController.java

@@ -832,27 +832,27 @@ public class HouseNumberStateController implements HouseNumberStateAPI {
             HouseOrder houseOrder = houseOrderService.getOne(wrapperHo);
 
 
-            //            入住人id
-//            if (ObjectUtils.isEmpty(users)) {
-//                Users users1 = new Users();
-//                users1.setUserName(liveName);
-//                users1.setPhone(phone);
-//                users1.setCardNumber(cardNumber);
-//                users1.setFingerprint(fingerprint);
-//                users1.setIdCard(idCard);
-//                users1.setIdCardInformation(idCardInformation);
-//                users1.setUserMenuId("1");
-//                boolean save = usersService.save(users1);
+//                        入住人id
+            if (ObjectUtils.isEmpty(users)) {
+                Users users1 = new Users();
+                users1.setUserName(liveName);
+                users1.setPhone(phone);
+                users1.setCardNumber(cardNumber);
+                users1.setFingerprint(fingerprint);
+                users1.setIdCard(idCard);
+                users1.setIdCardInformation(idCardInformation);
+                users1.setUserMenuId("1");
+                boolean save = usersService.save(users1);
 //                houseOrder.setLiveUsersId(users1.getId() + "");
-//            } else {
-//                users.setCardNumber(cardNumber);
-//                users.setFingerprint(fingerprint);
-//                users.setIdCard(idCard);
-//                users.setIdCardInformation(idCardInformation);
-//                usersService.updateById(users);
+            } else {
+                users.setCardNumber(cardNumber);
+                users.setFingerprint(fingerprint);
+                users.setIdCard(idCard);
+                users.setIdCardInformation(idCardInformation);
+                usersService.updateById(users);
 //                houseOrder.setLiveUsersId(users.getId() + "");
-//            }
-//            houseOrder.setLiveUsersId(users.getId() + "");
+            }
+            houseOrder.setLiveUsersId(users.getId() + "");
             houseOrder.setLiveUsersId(houseOrder.getReserveUserId());
             DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             Date liveDate = Date.from(LocalDateTime.parse(liveTime, dateTimeFormatter1).atZone(ZoneId.systemDefault()).toInstant());
@@ -1124,7 +1124,7 @@ public class HouseNumberStateController implements HouseNumberStateAPI {
 
 //        添加状态表,修改状态表
             HouseNumberState houseNumberState = new HouseNumberState();
-            houseNumberState.setStatus(3);
+            houseNumberState.setStatus(4);
             houseNumberState.setHouseNumberId(houseNumberId);
             houseNumberState.setStartTime(format);
             houseNumberState.setEndTime(houseOrder.getReserveLeaveTime());
@@ -1728,7 +1728,11 @@ public class HouseNumberStateController implements HouseNumberStateAPI {
             return CommonResult.fail("无锁定房间");
         }
         houseNumberStateService.updateBatchById(list);
-        houseNumberStateService.removeByIds(list);
+        ArrayList<Integer> ids = new ArrayList<>();
+        for (HouseNumberState houseNumberState : list) {
+            ids.add(houseNumberState.getId());
+        }
+        houseNumberStateService.removeByIds(ids);
 
 
         return CommonResult.ok();
@@ -1765,13 +1769,14 @@ public class HouseNumberStateController implements HouseNumberStateAPI {
             LocalDateTime localDateTime=null;
             LocalDateTime localDateTime2 =null;
             if (i==0) {
-                localDateTime=LocalDateTime.now();
+                localDateTime = LocalDateTime.parse(startTime, dateTimeFormatter1);
                 localDateTime2 = localDateTime.plusHours(liveTime);
             }else {
-                localDateTime = start.plusDays(i);
+                localDateTime = start.plusHours(i);
                 localDateTime2 = end.plusHours(i);
             }
-
+//            LocalDateTime localDateTime = start.plusHours(i);
+//            LocalDateTime  localDateTime2 = end.plusHours(i);
             ReserveDayVo reserveDayVo = new ReserveDayVo();
 //            LocalDateTime localDateTime = start.plusHours(i);
 //            LocalDateTime localDateTime2 = end.plusHours(i);

+ 38 - 6
src/main/java/com/template/controller/HouseOrderController.java

@@ -19,10 +19,7 @@ import com.template.model.enumModel.ePayStatu;
 import com.template.model.pojo.*;
 import com.template.model.result.CommonResult;
 import com.template.model.result.PageUtils;
-import com.template.model.vo.HouseOrderPageListVo;
-import com.template.model.vo.HouseOrderVo;
-import com.template.model.vo.OrderPageVo;
-import com.template.model.vo.QueryExportVo;
+import com.template.model.vo.*;
 import com.template.model.weixin.PayUtil;
 import com.template.model.weixin.WechatPayV3Util;
 import com.template.services.*;
@@ -659,9 +656,29 @@ public class HouseOrderController implements HouseOrderAPI {
         if (ObjectUtils.isEmpty(houseOrder)) {
             return CommonResult.fail("无该订单");
         }
+        String liveUsersId = houseOrder.getLiveUsersId();
+        HouseOrderParticularsVo vo = new HouseOrderParticularsVo();
+        vo.setHouseOrder(houseOrder);
+        if (ObjectUtils.isNotEmpty(liveUsersId)) {
+            Users users = usersService.getById(liveUsersId);
+            if (ObjectUtils.isNotEmpty(users)) {
+//                指纹
+                String fingerprint = users.getFingerprint();
+                vo.setFingerprint(fingerprint);
+//                卡号编码idCardInformation
+                String idCardInformation = users.getIdCardInformation();
+                vo.setIdCardInformation(idCardInformation);
+            }
+        }
+        Unlocking unlocking = unlockingService.getOrderNumber(orderNumber);
+        if (ObjectUtils.isNotEmpty(unlocking)) {
+            vo.setStartTime(unlocking.getStartTime());
+            vo.setEndTime(unlocking.getEndTime());
+        }
+
 //      todo 水电明细
 
-        return CommonResult.ok(houseOrder);
+        return CommonResult.ok(vo);
     }
 
     @Override
@@ -1120,7 +1137,7 @@ public class HouseOrderController implements HouseOrderAPI {
 
 //        添加状态表,修改状态表
             HouseNumberState houseNumberState = new HouseNumberState();
-            houseNumberState.setStatus(3);
+            houseNumberState.setStatus(4);
             houseNumberState.setHouseNumberId(houseNumberId);
             houseNumberState.setStartTime(format);
             houseNumberState.setEndTime(houseOrder.getReserveLeaveTime());
@@ -1519,6 +1536,18 @@ public class HouseOrderController implements HouseOrderAPI {
         houseOrderVo.setHouseOrder(houseOrder);
         houseOrderVo.setHouse(house);
 
+
+        String houseNumberId = houseOrder.getHouseNumberId();
+        HouseNumber houseNumber= houseNumberService.getById(houseNumberId);
+        if (ObjectUtils.isNotEmpty(houseNumber)) {
+            houseOrderVo.setRoomNumber(houseNumber.getRoomNumber());
+        }
+        String orderNumber = houseOrder.getOrderNumber();
+        Unlocking unlocking=unlockingService.getOrderNumber(orderNumber);
+        if (ObjectUtils.isNotEmpty(unlocking)) {
+            houseOrderVo.setPassWord(unlocking.getPassWord());
+        }
+
         return CommonResult.ok(houseOrderVo);
     }
 
@@ -2175,6 +2204,9 @@ public class HouseOrderController implements HouseOrderAPI {
             wrapperHns.eq(HouseNumberState::getHouseNumberId, houseNumberId)
                     .eq(HouseNumberState::getOrderNumber, orderNumber);
             HouseNumberState houseNumberState = houseNumberStateService.getOne(wrapperHns);
+            if (ObjectUtils.isEmpty(houseNumberState)) {
+                return CommonResult.fail("无该订单房态");
+            }
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             houseNumberState.setEndTime(sdf.format(new Date()));
             // 修改订单状态

+ 1 - 1
src/main/java/com/template/controller/UploadServlet.java

@@ -45,7 +45,7 @@ public class UploadServlet {
 //            out.write(buffer, 0, bytesRead);
 //        }
 //        out.close();
-        String url="192.168.161.224:12345/"+fileNameWithPath;
+        String url="192.168.161.190:12345/"+fileNameWithPath;
 //        response.getWriter().println(url);
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("url",url);

+ 4 - 0
src/main/java/com/template/model/vo/HouseOrderPageListVo.java

@@ -1,5 +1,6 @@
 package com.template.model.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
@@ -7,6 +8,7 @@ import java.util.Date;
 
 @Data
 public class HouseOrderPageListVo {
+    private Integer id;
 //    订单号
     private String orderNumber;
 //  入住时间
@@ -46,4 +48,6 @@ public class HouseOrderPageListVo {
 //    1:取消,2:退款,3:入住,4:退房,5:换房,6:详情
     private String choiceBox;
 
+    @ApiModelProperty(value = "房间类型(1:全日房,2:钟点房)")
+    private Integer roomType;
 }

+ 13 - 0
src/main/java/com/template/model/vo/HouseOrderParticularsVo.java

@@ -0,0 +1,13 @@
+package com.template.model.vo;
+
+import com.template.model.pojo.HouseOrder;
+import lombok.Data;
+
+@Data
+public class HouseOrderParticularsVo {
+    private HouseOrder houseOrder;
+    private String fingerprint;
+    private String idCardInformation;
+    private String startTime;
+    private String endTime;
+}

+ 2 - 1
src/main/java/com/template/model/vo/HouseOrderVo.java

@@ -8,5 +8,6 @@ import lombok.Data;
 public class HouseOrderVo {
     private HouseOrder houseOrder;
     private House house;
-
+    private String roomNumber;
+    private String passWord;
 }

+ 1 - 0
src/main/java/com/template/services/UnlockingService.java

@@ -18,4 +18,5 @@ public interface UnlockingService extends IService<Unlocking> {
 
     List<UnlockingKeyVo> key(String houseNumberId);
 
+    Unlocking getOrderNumber(String orderNumber);
 }

+ 11 - 2
src/main/java/com/template/services/impl/UnlockingServiceImpl.java

@@ -1,10 +1,11 @@
 package com.template.services.impl;
 
-import com.template.model.pojo.Unlocking;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.template.mapper.UnlockingMapper;
+import com.template.model.pojo.Unlocking;
 import com.template.model.vo.UnlockingKeyVo;
 import com.template.services.UnlockingService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -29,4 +30,12 @@ public class UnlockingServiceImpl extends ServiceImpl<UnlockingMapper, Unlocking
 
         return unlockingKeyVos;
     }
+
+    @Override
+    public Unlocking getOrderNumber(String orderNumber) {
+        LambdaQueryWrapper<Unlocking> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(Unlocking::getOrderNumber,orderNumber);
+        Unlocking one = this.getOne(wrapper);
+        return one;
+    }
 }

+ 6 - 3
src/main/resources/mapper/template/HouseOrderMapper.xml

@@ -4,9 +4,10 @@
 
     <select id="pageList" resultType="com.template.model.vo.HouseOrderPageListVo">
         SELECT
+        ho.id,
         ho.order_number as orderNumber,
-        ho.live_time as liveTime,
-        ho.leave_time as leaveTime,
+        ho.reserve_live_time as liveTime,
+        ho.reserve_leave_time as leaveTime,
         ho.reserve_name as reserveName,
         ho.live_name as liveName,
         ho.reserve_phone as phone,
@@ -20,7 +21,9 @@
         ho.refund_time as refundTime,
         ho.cancel_time as cancelTime,
         h.id as houseId,
-        hn.id as houserNumberId
+        hn.id as houseNumberId,
+        h.room_type as roomType
+
 
         FROM
         `house_order` ho