Ver Fonte

fix:地址

wrj há 1 ano atrás
pai
commit
ecfd9ec6ec
21 ficheiros alterados com 1258 adições e 106 exclusões
  1. 11 3
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TJsController.java
  2. 83 17
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java
  3. 10 3
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TRechargeController.java
  4. 1 1
      nightFragrance-common/src/main/java/com/ylx/common/constant/Constants.java
  5. 4 0
      nightFragrance-common/src/main/java/com/ylx/common/constant/MassageConstants.java
  6. 11 1
      nightFragrance-framework/src/main/java/com/ylx/framework/aspectj/LogAspect.java
  7. 2 2
      nightFragrance-generator/src/main/java/com/ylx/generator/util/VelocityUtils.java
  8. 8 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java
  9. 7 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TRecharge.java
  10. 15 5
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnum.java
  11. 30 0
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/PayTypeEnum.java
  12. 2 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TJsService.java
  13. 4 1
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java
  14. 15 3
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java
  15. 81 45
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java
  16. 7 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TRechargeServiceImpl.java
  17. 68 0
      nightFragrance-massage/src/main/java/com/ylx/massage/task/massageTask.java
  18. 890 0
      nightFragrance-massage/src/main/java/com/ylx/massage/utils/DateTimeUtils.java
  19. 8 5
      nightFragrance-massage/src/main/resources/mapper/massage/TOrderMapper.xml
  20. 1 0
      nightFragrance-massage/src/main/resources/mapper/massage/TRechargeMapper.xml
  21. 0 18
      sql/ry-vue.sql

+ 11 - 3
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TJsController.java

@@ -54,7 +54,7 @@ public class TJsController extends BaseController {
      * @param js
      * @return
      */
-//    @Log(title = "技师管理", businessType = BusinessType.INSERT)
+    @Log(title = "技师管理", businessType = BusinessType.INSERT)
     @RequestMapping(value = "wx/add", method = RequestMethod.POST)
     @ApiOperation("添加技师申请")
     public R add(@RequestBody TJs js) {
@@ -81,8 +81,16 @@ public class TJsController extends BaseController {
     @Log(title = "技师管理", businessType = BusinessType.UPDATE)
     @RequestMapping(value = "wx/update", method = RequestMethod.POST)
     @ApiOperation("更新技师信息")
-    public Boolean wxUpdate(@RequestBody TJs js) {
-        return jsService.updateById(js);
+    public R wxUpdate(@RequestBody TJs js) {
+        try {
+            return R.ok(jsService.wxUpdateJs(js));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error(e.toString());
+            return R.fail("系统异常");
+        }
     }
 
     /**

+ 83 - 17
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -41,8 +41,8 @@ public class TOrderController {
      * @param order
      * @return
      */
+    @Log(title = "新增订单", businessType = BusinessType.INSERT)
     @ApiOperation("添加申请")
-    @Log(title = "订单", businessType = BusinessType.INSERT)
     @RequestMapping(value = "wx/add", method = RequestMethod.POST)
     public R<TOrder> add(@RequestBody TOrder order) {
         try {
@@ -50,8 +50,10 @@ public class TOrderController {
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
-        } catch (Exception e) {
-            log.error(e.toString());
+        }
+        catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -63,9 +65,19 @@ public class TOrderController {
      * @return
      */
     @ApiOperation("支付订单")
+    @Log(title = "支付订单", businessType = BusinessType.UPDATE)
     @RequestMapping(value = "wx/pay", method = RequestMethod.POST)
-    public Boolean pay(@RequestBody TOrder order) {
-        return orderService.payOrder(order);
+    public R pay(@RequestBody TOrder order) {
+        try {
+            return R.ok(orderService.payOrder(order));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
     }
 
     /**
@@ -74,10 +86,22 @@ public class TOrderController {
      * @param order
      * @return
      */
+    @Log(title = "取消订单", businessType = BusinessType.UPDATE)
     @ApiOperation("取消订单")
     @RequestMapping(value = "wx/cancle", method = RequestMethod.POST)
-    public Boolean cancle(@RequestBody TOrder order) {
-        return orderService.cancle(order);
+    public R cancle(@RequestBody TOrder order) {
+
+        try {
+            return R.ok(orderService.cancle(order));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
+
     }
 
     /**
@@ -86,10 +110,20 @@ public class TOrderController {
      * @param order
      * @return
      */
+    @Log(title = "拒绝订单", businessType = BusinessType.UPDATE)
     @ApiOperation("拒绝订单")
     @RequestMapping(value = "wx/jujue", method = RequestMethod.POST)
-    public Boolean jujue(@RequestBody TOrder order) {
-        return orderService.jujue(order);
+    public R jujue(@RequestBody TOrder order) {
+        try {
+            return R.ok(orderService.jujue(order));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
     }
 
 
@@ -99,11 +133,21 @@ public class TOrderController {
      * @param order
      * @return
      */
+    @Log(title = "接受订单", businessType = BusinessType.UPDATE)
     @ApiOperation("接受订单")
     @RequestMapping(value = "wx/takingOrders", method = RequestMethod.POST)
     public R takingOrders(@RequestBody TOrder order) {
-        orderService.takingOrders(order);
-        return R.ok();
+        try {
+            orderService.takingOrders(order);
+            return R.ok();
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
     }
 
     /**
@@ -112,10 +156,21 @@ public class TOrderController {
      * @param order
      * @return
      */
-    @ApiOperation("确认订单")
+    @Log(title = "确认服务完成", businessType = BusinessType.UPDATE)
+    @ApiOperation("确认服务完成")
     @RequestMapping(value = "wx/confirm", method = RequestMethod.POST)
-    public Boolean confirm(@RequestBody TOrder order) {
-        return orderService.confirm(order);
+    public R confirm(@RequestBody TOrder order) {
+        try {
+            return R.ok(orderService.confirm(order));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."
+                    +stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
     }
 
     /**
@@ -124,6 +179,7 @@ public class TOrderController {
      * @param param
      * @return
      */
+    @Log(title = "微信获取订单信息", businessType = BusinessType.OTHER)
     @ApiOperation("获取订单信息")
     @RequestMapping(value = "wx/getOrder", method = RequestMethod.GET)
     public R getOrder(Page<TOrder> page, TOrder param) {
@@ -131,7 +187,6 @@ public class TOrderController {
         return R.ok(all);
     }
 
-
     /**
      * 分页查询数据
      */
@@ -147,10 +202,21 @@ public class TOrderController {
         return R.ok(pageSelect);
     }
 
-    @ApiOperation("更新数据")
+    @ApiOperation("更新订单数据")
+    @Log(title = "更新订单数据", businessType = BusinessType.OTHER)
     @RequestMapping(value = "/update", method = RequestMethod.POST)
     public R update(@RequestBody TOrder borrow) {
-        return R.ok(orderService.updateById(borrow));
+        try {
+            return R.ok(orderService.updateById(borrow));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement= e.getStackTrace()[0];
+            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."
+                    +stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            return R.fail("系统异常");
+        }
     }
 
 

+ 10 - 3
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TRechargeController.java

@@ -1,6 +1,7 @@
 package com.ylx.web.controller.massage;
 
 import com.ylx.common.core.domain.R;
+import com.ylx.common.exception.ServiceException;
 import com.ylx.massage.domain.TRecharge;
 import com.ylx.massage.service.TRechargeService;
 import com.ylx.massage.service.TWxUserService;
@@ -13,7 +14,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.time.LocalDateTime;
 
 /**
  * 充值记录表 前端控制器
@@ -32,7 +32,14 @@ public class TRechargeController {
     @ApiOperation("微信充值")
     @RequestMapping(value = "wx/add", method = RequestMethod.POST)
     private R add(@RequestBody TRecharge recharge) {
-        // 获取对应用户
-        return R.ok(rechargeService.recharge(recharge));
+        try {
+            return R.ok(rechargeService.recharge(recharge));
+        } catch (ServiceException s) {
+            log.error(s.getMessage());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return R.fail("系统异常");
+        }
     }
 }

+ 1 - 1
nightFragrance-common/src/main/java/com/ylx/common/constant/Constants.java

@@ -157,7 +157,7 @@ public class Constants
     /**
      * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
      */
-    public static final String[] JOB_WHITELIST_STR = { "com.ylx.quartz.task" };
+    public static final String[] JOB_WHITELIST_STR = { "com.ylx.quartz.task", "com.ylx.massage.task" };
 
     /**
      * 定时任务违规的字符

+ 4 - 0
nightFragrance-common/src/main/java/com/ylx/common/constant/MassageConstants.java

@@ -16,6 +16,10 @@ public class MassageConstants {
 
     public static final Integer INTEGER_TEN = 10;
 
+    public static final Integer ONE_HUNDRED = 100;
+
+    public static final Integer TWO_HUNDRED = 200;
+
     /**
      * 单号key前缀
      */

+ 11 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/aspectj/LogAspect.java

@@ -4,6 +4,8 @@ import java.util.Collection;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import com.ylx.common.core.domain.model.WxLoginUser;
+import com.ylx.common.exception.ServiceException;
 import org.apache.commons.lang3.ArrayUtils;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
@@ -85,7 +87,12 @@ public class LogAspect
         try
         {
             // 获取当前的用户
-            LoginUser loginUser = SecurityUtils.getLoginUser();
+            LoginUser loginUser = null;
+            try {
+                loginUser = SecurityUtils.getLoginUser();
+            } catch (ServiceException ex) {
+                log.info("小程序操作日志");
+            }
 
             // *========数据库日志=========*//
             SysOperLog operLog = new SysOperLog();
@@ -102,6 +109,9 @@ public class LogAspect
                 {
                     operLog.setDeptName(currentUser.getDept().getDeptName());
                 }
+            }else {
+                WxLoginUser WxLoginUser = SecurityUtils.getWxLoginUser();
+                operLog.setOperName(WxLoginUser.getCOpenid());
             }
 
             if (e != null)

+ 2 - 2
nightFragrance-generator/src/main/java/com/ylx/generator/util/VelocityUtils.java

@@ -199,9 +199,9 @@ public class VelocityUtils
         {
             fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className);
         }
-        else if (template.contains("controller.java.vm"))
+        else if (template.contains("task.java.vm"))
         {
-            fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className);
+            fileName = StringUtils.format("{}/task/{}Controller.java", javaPath, className);
         }
         else if (template.contains("mapper.xml.vm"))
         {

+ 8 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java

@@ -8,8 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
+import lombok.*;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -48,6 +47,9 @@ public class TOrder implements Serializable {
     @ApiModelProperty("订单号")
     private String orderNo;
 
+    @TableField("pay_type")
+    @ApiModelProperty("支付类型:1微信支付 2:余额支付")
+    private Integer payType;
     /**
      * 用户openid
      */
@@ -140,6 +142,10 @@ public class TOrder implements Serializable {
     @ApiModelProperty("用户信息")
     private TWxUser wxUser;
 
+    @TableField(exist = false)
+    @ApiModelProperty("订单状态名称")
+    private String statusName;
+
     public String getcId() {
         return cId;
     }

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TRecharge.java

@@ -39,6 +39,13 @@ public class TRecharge implements Serializable {
     @ApiModelProperty("用户openid")
     private String cOpenId;
 
+    /**
+     * 充值单号
+     */
+    @TableField("recharge_no")
+    @ApiModelProperty("充值单号")
+    private String rechargeNo;
+
     /**
      * 金额
      */

+ 15 - 5
nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnum.java

@@ -1,5 +1,6 @@
 package com.ylx.massage.enums;
 
+import com.ylx.common.utils.StringUtils;
 import org.apache.commons.compress.utils.Lists;
 
 import java.util.ArrayList;
@@ -12,14 +13,14 @@ import java.util.List;
  */
 public enum OrderStatusEnum {
 
-    ALL(null, "全部"),
-    WAIT_JD(0, "待接单"),
-    SERVICE(1, "服务中"),
+    ALL(100, "全部"),
+//    WAIT_JD(0, "待接单"),
+    SERVICE(1, "进行中"),
     WAIT_EVALUATE(2, "待评价"),
     COMPLETE(3, "已完成"),
     WAIT_PAY(-1, "待付款"),
-    CANCEL(-2, "已取消"),
-    REFUSE(-3, "已拒绝");
+    CANCEL(-2, "已取消");
+//    REFUSE(-3, "已拒绝");
 
 
     private final Integer code;
@@ -43,6 +44,15 @@ public enum OrderStatusEnum {
         return objects;
     }
 
+    public static String getDescByCode(Integer code) {
+        for (OrderStatusEnum value : OrderStatusEnum.values()) {
+            if(value.getCode().equals(code)){
+                return value.getInfo();
+            }
+        }
+        return StringUtils.EMPTY;
+    }
+
     public Integer getCode() {
         return code;
     }

+ 30 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/enums/PayTypeEnum.java

@@ -0,0 +1,30 @@
+package com.ylx.massage.enums;
+
+/**
+ * @author jianlong
+ * @date 2024-03-27 15:31
+ * 提现申请枚举
+ */
+public enum PayTypeEnum {
+
+    WEI_PAY(1, "微信支付"),
+    BALANCE_PAY(2, "余额支付");
+
+
+    private final Integer code;
+    private final String info;
+
+    PayTypeEnum(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getInfo() {
+        return info;
+    }
+
+}

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TJsService.java

@@ -17,4 +17,6 @@ public interface TJsService extends IService<TJs> {
     boolean addJs(TJs js);
 
     TJs getByJsId(String s);
+
+    boolean wxUpdateJs(TJs js);
 }

+ 4 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java

@@ -2,6 +2,7 @@ package com.ylx.massage.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.mapper.TAddressMapper;
 import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.service.TAddressService;
@@ -27,7 +28,9 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean defaultAddress(TAddress tAddress) {
-
+        if(StringUtils.isBlank(tAddress.getOpenid())){
+            throw new RuntimeException("openid不能为空");
+        }
         TAddress oldAddress = this.getByOpenId(tAddress.getOpenid());
         if (oldAddress != null) {
             oldAddress.setType(0);

+ 15 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java

@@ -57,6 +57,12 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         if (cjs != null) {
             throw new ServiceException("请勿重复申请");
         }
+        cacheAddress(js);
+        initialization(js);
+        return this.save(js);
+    }
+
+    private void cacheAddress(TJs js) {
         if (StringUtils.isBlank(js.getcPhone())) {
             throw new ServiceException("手机号不能为空");
         }
@@ -68,8 +74,13 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         Object latitude = jsonObject.get("latitude");
         Object longitude = jsonObject.get("longitude");
         locationUtil.geoAdd(js.getcOpenId(), Double.parseDouble(longitude.toString()), Double.parseDouble(latitude.toString()));
-        extracted(js);
-        return this.save(js);
+    }
+
+
+    @Override
+    public boolean wxUpdateJs(TJs js) {
+        cacheAddress(js);
+        return this.updateById(js);
     }
 
     @Override
@@ -96,7 +107,8 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         return js;
     }
 
-    private static void extracted(TJs js) {
+
+    private static void initialization(TJs js) {
         // 评分默认最高
         js.setnStar(MassageConstants.INTEGER_FIVE);
         // 已服务数量 0

+ 81 - 45
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -9,13 +10,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.constant.MassageConstants;
 import com.ylx.common.exception.ServiceException;
-import com.ylx.common.utils.uuid.IdUtils;
 import com.ylx.massage.domain.*;
 import com.ylx.massage.enums.JsStatusEnum;
 import com.ylx.massage.enums.OrderStatusEnum;
 import com.ylx.massage.mapper.TOrderMapper;
 import com.ylx.massage.service.*;
 import com.ylx.massage.utils.OrderNumberGenerator;
+import org.apache.commons.compress.utils.Lists;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,7 +24,9 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
@@ -61,15 +64,15 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     @Override
     public TOrder addOrder(TOrder order) {
 
-        if(StringUtils.isBlank(order.getcJsId())){
+        if (StringUtils.isBlank(order.getcJsId())) {
             throw new ServiceException("请选择技师");
         }
-        if(order.getcGoods().isEmpty()){
+        if (order.getcGoods().isEmpty()) {
             throw new ServiceException("请选择项目");
         }
         //获取用户默认地址
         TAddress address = addressService.getByOpenId(order.getcOpenId());
-        if(address == null){
+        if (address == null) {
             throw new ServiceException("请先添加地址");
         }
 
@@ -92,10 +95,17 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
      */
     @Override
     public Boolean payOrder(TOrder order) {
+//        if(order.getPayType().equals(PayTypeEnum.WEI_PAY.getCode())){
+//            //调用微信支付
+//            weiPay(order);
+//        }
         // 根据orderid查询订单信息
         TOrder orderNew = getById(order.getcId());
         // 从对应账户扣款
-        TWxUser user = wxUserService.getById(orderNew.getcOpenId());
+        TWxUser user = wxUserService.getByOpenId(orderNew.getcOpenId());
+        if (null == user) {
+            throw new ServiceException("用户不存在");
+        }
         if (user.getdBalance().compareTo(orderNew.getdTotalMoney()) < MassageConstants.INTEGER_ZERO) {
             return false;
         } else {
@@ -105,6 +115,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             paramUser.setdBalance(user.getdBalance().subtract(orderNew.getdTotalMoney()));
             paramUser.setdMoney(user.getdMoney().add(orderNew.getdTotalMoney()));
             paramUser.setnNum(user.getnNum() + MassageConstants.INTEGER_ZERO);
+            paramUser.setId(user.getId());
             wxUserService.updateById(paramUser);
             // 更新项目数据
             JSONArray objects = orderNew.getcGoods();
@@ -118,11 +129,19 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             });
             TOrder orderParam = new TOrder();
             orderParam.setcId(orderNew.getcId());
-            orderParam.setnStatus(OrderStatusEnum.WAIT_JD.getCode());
+            //orderParam.setnStatus(OrderStatusEnum.WAIT_JD.getCode());
+            orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
+            //更新及技师状态
+            updateJs (orderNew);
             return updateById(orderParam);
         }
     }
 
+    private void weiPay(TOrder order) {
+        // 根据orderid查询订单信息
+        TOrder orderNew = getById(order.getcId());
+    }
+
     /**
      * 拒绝订单
      *
@@ -156,7 +175,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         });
         TOrder orderParam = new TOrder();
         orderParam.setcId(orderNew.getcId());
-        orderParam.setnStatus(OrderStatusEnum.REFUSE.getCode());
+//        orderParam.setnStatus(OrderStatusEnum.REFUSE.getCode());
         return updateById(orderParam);
     }
 
@@ -167,6 +186,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
      * @return
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean confirm(TOrder order) {
 
         // 获取订单信息
@@ -183,7 +203,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         BigDecimal multiply = orderNew.getdTotalMoney().multiply(new BigDecimal(100 - jsById.getnBili()));
         multiply = multiply.divide(new BigDecimal(100), MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP);
         // 获取技师所对应的用户
-        TWxUser jsUser = wxUserService.getById(orderNew.getcJsId());
+        TWxUser jsUser = wxUserService.getByOpenId(jsById.getcOpenId());
         // 更新余额
         jsUser.setdBalance(jsUser.getdBalance().add(multiply));
         // 更新总钱数
@@ -219,37 +239,39 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     public Boolean cancle(TOrder order) {
         // 获取订单信息
         // 根据orderid查询订单信息
-        TOrder orderNew = gettOrder(order);
+        TOrder orderNew = getById(order.getcId());
         //待接单
-        if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_JD.getCode())) {
-            TWxUser user = wxUserService.getById(orderNew.getcOpenId());
-            // 更新用户金额 及下单此时
-            TWxUser paramUser = new TWxUser();
-            paramUser.setcOpenid(user.getcOpenid());
-            // 金额归还对应账户
-            paramUser.setdBalance(user.getdBalance().add(orderNew.getdTotalMoney()));
-            // 消费金额对应减少
-            paramUser.setdMoney(user.getdMoney().subtract(orderNew.getdTotalMoney()));
-            // 下单次数减一
-            paramUser.setnNum(user.getnNum() - MassageConstants.INTEGER_ONE);
-            wxUserService.updateById(paramUser);
-
-            // 更新项目数据
-            JSONArray objects = orderNew.getcGoods();
-            objects.forEach(item -> {
-                UpdateWrapper<TXiangmu> wrapper = new UpdateWrapper<>();
-                // 获取参数
-                wrapper.lambda().eq(TXiangmu::getcId, ((JSONObject) item).getString("cId"));
-                // 设置数量
-                wrapper.setSql(" n_sale_number = n_sale_number - " + ((JSONObject) item).getInteger("number"));
-                xiangmuService.update(wrapper);
-            });
-            TOrder orderParam = new TOrder();
-            orderParam.setcId(orderNew.getcId());
-            orderParam.setnStatus(OrderStatusEnum.CANCEL.getCode());
-            return updateById(orderParam);
-
-        } else if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {
+//        if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_JD.getCode())) {
+//            TWxUser user = wxUserService.getById(orderNew.getcOpenId());
+//            // 更新用户金额 及下单此时
+//            TWxUser paramUser = new TWxUser();
+//            paramUser.setcOpenid(user.getcOpenid());
+//            // 金额归还对应账户
+//            paramUser.setdBalance(user.getdBalance().add(orderNew.getdTotalMoney()));
+//            // 消费金额对应减少
+//            paramUser.setdMoney(user.getdMoney().subtract(orderNew.getdTotalMoney()));
+//            // 下单次数减一
+//            paramUser.setnNum(user.getnNum() - MassageConstants.INTEGER_ONE);
+//            wxUserService.updateById(paramUser);
+//
+//            // 更新项目数据
+//            JSONArray objects = orderNew.getcGoods();
+//            objects.forEach(item -> {
+//                UpdateWrapper<TXiangmu> wrapper = new UpdateWrapper<>();
+//                // 获取参数
+//                wrapper.lambda().eq(TXiangmu::getcId, ((JSONObject) item).getString("cId"));
+//                // 设置数量
+//                wrapper.setSql(" n_sale_number = n_sale_number - " + ((JSONObject) item).getInteger("number"));
+//                xiangmuService.update(wrapper);
+//            });
+//            TOrder orderParam = new TOrder();
+//            orderParam.setcId(orderNew.getcId());
+//            orderParam.setnStatus(OrderStatusEnum.CANCEL.getCode());
+//            return updateById(orderParam);
+//
+//        } else
+
+        if (Objects.equals(orderNew.getnStatus(), OrderStatusEnum.WAIT_PAY.getCode())) {
             //待付款
             TOrder orderParam = new TOrder();
             orderParam.setcId(orderNew.getcId());
@@ -269,11 +291,21 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     }
 
 
-
     @Override
     public Page<TOrder> getAll(Page<TOrder> page, TOrder param) {
-        return orderMapper.getAll(page, param);
+        Page<TOrder> orderPage = orderMapper.getAll(page, param);
+        if (orderPage != null && CollectionUtil.isNotEmpty(orderPage.getRecords())) {
+
+            ArrayList<TOrder> orders = Lists.newArrayList();
+            orderPage.getRecords().forEach(order -> {
+                order.setStatusName(OrderStatusEnum.getDescByCode(order.getnStatus()));
+                orders.add(order);
+            });
+            orderPage.setRecords(orders);
+        }
+        return orderPage;
     }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void takingOrders(TOrder order) {
@@ -284,6 +316,15 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         TOrder orderNew = this.getById(order);
 
         // 检查订单对应的技师是否存在
+        updateJs (orderNew);
+        // 更新订单状态
+        TOrder orderParam = new TOrder();
+        orderParam.setcId(order.getcId());
+        orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
+        this.updateById(orderParam);
+    }
+
+    private void updateJs (TOrder orderNew) {
         TJs js = jsService.getById(orderNew.getcJsId());
         if (js == null) {
             throw new IllegalStateException("无法找到对应的技师");
@@ -295,10 +336,5 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         int num = js.getnNum() == null ? 0 : js.getnNum();
         js.setnNum(num + MassageConstants.INTEGER_ONE);
         jsService.updateById(js);
-        // 更新订单状态
-        TOrder orderParam = new TOrder();
-        orderParam.setcId(order.getcId());
-        orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
-        this.updateById(orderParam);
     }
 }

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TRechargeServiceImpl.java

@@ -2,12 +2,15 @@ package com.ylx.massage.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.core.domain.R;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.TRecharge;
 import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.mapper.TRechargeMapper;
 import com.ylx.massage.service.TRechargeService;
 import com.ylx.massage.service.TWxUserService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
@@ -23,9 +26,13 @@ public class TRechargeServiceImpl extends ServiceImpl<TRechargeMapper, TRecharge
     private TWxUserService wxUserService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public R recharge(TRecharge recharge) {
 
         //增加充值记录
+        if(StringUtils.isBlank(recharge.getcOpenId())){
+            throw new ServiceException("openId不能为空");
+        }
         recharge.setDtCreateTime(LocalDateTime.now());
         save(recharge);
 

+ 68 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/task/massageTask.java

@@ -0,0 +1,68 @@
+package com.ylx.massage.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.constant.MassageConstants;
+import com.ylx.massage.domain.TOrder;
+import com.ylx.massage.enums.OrderStatusEnum;
+import com.ylx.massage.service.TOrderService;
+import com.ylx.massage.utils.DateTimeUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author jianlong
+ * @date 2024-04-19 14:11
+ *
+ */
+@Slf4j
+@Component("massageTask")
+public class massageTask {
+
+    @Resource
+    private TOrderService orderService;
+
+    public void cancelOrder() {
+
+        Date nowDate = new Date();
+        log.info("开始执行取消订单任务当前时间,{}", nowDate);
+
+        Date date = DateTimeUtils.addMinute(nowDate, -5);
+        log.info("开始执行取消订单任务当前时间减5分钟,{}", date);
+        long total = 1L;
+        while(total > 0L){
+            total = extracted(date);
+        }
+
+    }
+
+    private Long extracted(Date nowDate) {
+        log.info("extracted 开始执行取消订单任务时间,{}", nowDate);
+        LambdaQueryWrapper<TOrder> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        objectLambdaQueryWrapper.eq(TOrder::getnStatus, OrderStatusEnum.WAIT_PAY.getCode()).
+                le(TOrder::getDtCreateTime, nowDate).
+                orderByAsc(TOrder::getcTime);
+
+        Page<TOrder> page = new Page<>();
+        page.setSize(MassageConstants.TWO_HUNDRED);
+
+        Page<TOrder> resPage = orderService.page(page, objectLambdaQueryWrapper);
+        if (CollectionUtil.isNotEmpty(resPage.getRecords())) {
+            resPage.getRecords().forEach(order->{
+                TOrder newOrder = new TOrder();
+                //todo 订单锁
+                newOrder.setcId(order.getcId());
+                newOrder.setnStatus(OrderStatusEnum.CANCEL.getCode());
+                orderService.updateById(newOrder);
+                log.info("取消超时未支付订单orderNo,{}", order.getOrderNo());
+            });
+        }
+        return resPage.getTotal();
+
+    }
+}

+ 890 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/DateTimeUtils.java

@@ -0,0 +1,890 @@
+package com.ylx.massage.utils;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateUtils;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.*;
+import java.util.*;
+
+
+@Slf4j
+public final class DateTimeUtils {
+    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    public static final String DATE_TIME_NUMBER_FORMAT = "yyyyMMddHHmmss";
+    public static final String DATE_FORMAT = "yyyy-MM-dd";
+    public static final String DATE_FORMAT_FOREIGN = "dd/MM/yyyy";
+    public static final String DATE_YEAR_MONT_DAY_FORMAT = "yyyy/MM/dd";
+    public static final String DATE_NUMBER_FORMAT = "yyyyMMdd";
+    public static final String DATE_NUMBER_YEARS_FORMAT = "yyyyMM";
+    public static final String DATE_NUMBER_YEAR_MONTH_FORMAT = "yyyy年MM月";
+    public static final String DATE_NUMBER_YEAR_MONTH_FORMAT2 = "yyyy-MM";
+    public static final String TIME_FORMAT = "yyyy-MM-dd 12:00:00";
+    public static final long DAY_SECONDS = 24L * 60 * 60;
+    public static final long DAY_MILLISECONDS = 24L * 60 * 60 * 1000;
+    public static final String DATE_TIME_ZONE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
+
+    private DateTimeUtils() {
+    }
+
+    public static String formatDate(Date date, String pattern) {
+        return new SimpleDateFormat(pattern).format(date);
+    }
+
+    public static String formatDate(String pattern) {
+        return new SimpleDateFormat(pattern).format(new Date());
+    }
+
+    public static String formatDate(Date date) {
+        return formatDate(date, DATE_FORMAT);
+    }
+
+    public static String formatDatetime(Date date) {
+        return formatDate(date, DATE_TIME_FORMAT);
+    }
+
+    public static String formatDatetime() {
+        return formatDate(DATE_TIME_FORMAT);
+    }
+
+    public static Date formatTime(Date date) {
+        String formatDate = formatDate(date, TIME_FORMAT);
+        return parseDate(formatDate, DATE_TIME_FORMAT);
+    }
+
+    /**
+     * 解析日期
+     *
+     * @param date
+     * @param pattern
+     * @return
+     */
+    public static Date parseDate(String date, String pattern) {
+        try {
+            return new SimpleDateFormat(pattern).parse(date);
+        } catch (Exception e) {
+            log.error("解析日期错误:{}", e.getMessage());
+            return null;
+        }
+    }
+
+    /**
+     * 解析日期时间
+     *
+     * @param date
+     * @return
+     */
+    public static Date parseDatetime(String date) {
+        return parseDate(date, DATE_TIME_FORMAT);
+    }
+
+    /**
+     * 解析年月日期时间
+     *
+     * @param date
+     * @return
+     */
+    public static Date parseDateday(String date) {
+        return parseDate(date, DATE_FORMAT);
+    }
+
+    /**
+     * 解析年月日期
+     *
+     * @param date
+     * @return
+     */
+    public static Date parseDateMoth(String date) {
+        return parseDate(date, DATE_NUMBER_YEAR_MONTH_FORMAT2);
+    }
+
+    /**
+     * 解析年月日期时间
+     *
+     * @param date
+     * @return
+     */
+    public static Date numberDateday(String date) {
+        return parseDate(date, DATE_NUMBER_FORMAT);
+    }
+
+
+    /**
+     * 获取当前时间戳
+     *
+     * @return
+     */
+    public static Timestamp currentTimestamp() {
+        return new Timestamp(System.currentTimeMillis());
+    }
+
+    /**
+     * 获取两个日期相差的天数
+     *
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static int dayDiff(Date date1, Date date2) {
+        Long days = (date1.getTime() - date2.getTime()) / DAY_MILLISECONDS;
+        return days.intValue();
+    }
+
+    /**
+     * 计算两个日期相差天数,忽略时分秒
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static int dayDiffIgnoreHms(Date date1, Date date2) {
+        if(null == date1 || null == date2 ){
+            return 0;
+        }
+        Calendar calendar1 = Calendar.getInstance();
+        calendar1.setTime(date1);
+        setTime2Start(calendar1);
+
+        Calendar calendar2 = Calendar.getInstance();
+        calendar2.setTime(date2);
+        setTime2Start(calendar2);
+
+       return dayDiff(calendar1.getTime(),calendar2.getTime());
+    }
+
+    /**
+     * 获取一个日期与当前时间相差的天数
+     *
+     * @param date
+     * @return
+     */
+    public static int dayDiff(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        setTime2Start(calendar);
+        return dayDiff(date, calendar.getTime());
+    }
+
+    /**
+     * 设置时间部分到开始时刻
+     *
+     * @param calendar
+     * @return
+     */
+    public static void setTime2Start(Calendar calendar) {
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+    }
+
+    /**
+     * 设置时间部分到结束时刻
+     *
+     * @param calendar
+     * @return
+     */
+    public static void setTime2End(Calendar calendar) {
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        calendar.set(Calendar.MILLISECOND, 999);
+    }
+
+    /**
+     * 当前年的开始时间
+     *
+     * @return
+     */
+    public static Date getFirstDayOfYear() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMinimum(Calendar.DAY_OF_YEAR));
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 当前年的结束时间
+     *
+     * @return
+     */
+    public static Date getLastDayOfYear() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMaximum(Calendar.DAY_OF_YEAR));
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 当前月的开始时间
+     *
+     * @return
+     */
+    public static Date getFirstDayOfMonth() {
+        return getFirstDayOfMonth(new Date());
+    }
+
+    public static Date getFirstDayOfMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /***
+     * 当前月的结束时间
+     * @return
+     */
+    public static Date getLastDayOfMonth() {
+        return getLastDayOfMonth(new Date());
+    }
+
+    public static Date getLastDayOfMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期所在月的天数
+     *
+     * @param date
+     * @return
+     */
+    public static int getDaysOfMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        int days = calendar.getActualMaximum(Calendar.DATE);
+        return days;
+    }
+
+    /**
+     * 两个时间相差的月份
+     *
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static int monthDiff(Date date1, Date date2) {
+        Long month = (date1.getTime() - date2.getTime()) / (DAY_MILLISECONDS * 365 / 12);
+        return month.intValue();
+    }
+
+    /**
+     * 获取某个日期的天数
+     *
+     * @param date
+     * @return
+     */
+    public static int getDayOfDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.DAY_OF_MONTH);
+    }
+
+    /**
+     * 获取某个日期的月份
+     *
+     * @param date
+     * @return
+     */
+    public static int getMonthOfDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MONTH);
+    }
+
+    /**
+     * 获取某个日期的月份,补充到两位
+     *
+     * @param date
+     * @return
+     */
+    public static String getMonthOfDateToString(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        String Month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
+        return Month.length() > 1 ? Month : BigDecimal.ZERO.toString().concat(Month);
+    }
+
+    /**
+     * 获取某个日期的年份
+     *
+     * @param date
+     * @return
+     */
+    public static int getYearOfDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        return calendar.get(Calendar.YEAR);
+    }
+
+    /**
+     * 日期加减
+     *
+     * @param date
+     * @param field
+     * @param amount
+     * @return
+     */
+    public static Date add(Date date, int field, int amount) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(field, amount);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期当天的开始时间(00:00:00)
+     *
+     * @param date
+     * @return
+     */
+    public static Date getStartDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期当天的结束时间(23:59:59)
+     *
+     * @param date
+     * @return
+     */
+    public static Date getEndDate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期昨天的结束时间(23:59:59)
+     *
+     * @param date
+     * @return
+     */
+    public static Date yesterdayEnddate(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.DATE, -1);
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 日期天数加减
+     *
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addDays(Date date, int amount) {
+        return add(date, Calendar.DAY_OF_MONTH, amount);
+    }
+
+    /**
+     * 根据type获取开始时间
+     *
+     * @param endDate
+     * @param type
+     * @return
+     */
+
+    /**
+     * 日期月份加减
+     *
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addMonths(Date date, int amount) {
+        return add(date, Calendar.MONTH, amount);
+    }
+
+    /**
+     * 加减小时
+     *
+     * @param date
+     * @param amount
+     * @return
+     */
+    public static Date addHours(Date date, int amount) {
+        return add(date, Calendar.HOUR_OF_DAY, amount);
+    }
+
+    /**
+     * 加减分钟
+     *
+     * @param date   指定日期
+     * @param amount
+     */
+    public static Date addMinute(Date date, int amount) {
+        return add(date, Calendar.MINUTE, amount);
+    }
+
+
+    /**
+     * 获取昨天开始时间
+     *
+     * @return
+     */
+    public static Date yesterdayStart() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -1);
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取昨天结束时间
+     *
+     * @return
+     */
+    public static Date yesterdayEnd() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.DATE, -1);
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取今天开始时间
+     *
+     * @return
+     */
+    public static Date todayStart() {
+        Calendar calendar = Calendar.getInstance();
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取今天结束时间
+     *
+     * @return
+     */
+    public static Date todayEnd() {
+        Calendar calendar = Calendar.getInstance();
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 时间戳转换为date类型
+     *
+     * @param timestamp
+     * @return
+     */
+    public static Date getTimeOfDate(Long timestamp) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(timestamp);
+        return calendar.getTime();
+    }
+
+
+
+    /**
+     * 获取某个日期当天的开始时间(00:00:00)
+     *
+     * @param timestamp
+     * @return
+     */
+    public static Date getStartTimeOfDate(Long timestamp) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(timestamp);
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期当天的结束时间(23:59:59)
+     *
+     * @param timestamp
+     * @return
+     */
+    public static Date getEndTimeOfDate(Long timestamp) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(timestamp);
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期当天的开始时间(00:00:00)
+     *
+     * @param startDate
+     * @return
+     */
+    public static Date getStartTimeOfDate(String startDate) {
+        Date date = parseDate(startDate, DATE_FORMAT);
+        if (date == null) {
+            return null;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(date.getTime());
+        setTime2Start(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期当天的结束时间(23:59:59)
+     *
+     * @param endDate
+     * @return
+     */
+    public static Date getEndTimeOfDate(String endDate) {
+        Date date = parseDate(endDate, DATE_FORMAT);
+        if (date == null) {
+            return null;
+        }
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(date.getTime());
+        setTime2End(calendar);
+        return calendar.getTime();
+    }
+
+    /**
+     * 获取某个日期的本周的开始时间
+     *
+     * @param date 某个日期
+     * @return 开始时间
+     */
+    public static Date getBeginDayOfWeek(Date date) {
+        Calendar cal = Calendar.getInstance();
+        if (null != date) {
+            cal.setTime(date);
+        }
+        int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
+        if (dayofweek == 1) {
+            dayofweek += 7;
+        }
+        cal.add(Calendar.DATE, 2 - dayofweek);
+        return getStartTimeOfDate(cal.getTime().getTime());
+    }
+
+    /**
+     * 获取某个日期的本周的结束时间
+     *
+     * @param date 某个日期
+     * @return 结束时间
+     */
+    public static Date getEndDayOfWeek(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(getBeginDayOfWeek(date));
+        cal.add(Calendar.DAY_OF_WEEK, 6);
+        return getEndTimeOfDate(cal.getTime().getTime());
+    }
+
+    /**
+     * 获取某个日期的本月的开始时间
+     *
+     * @param date 某个日期
+     * @return 开始时间
+     */
+    public static Date getBeginDayOfMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(getYearOfDate(date), getMonthOfDate(date), 1);
+        return getStartTimeOfDate(calendar.getTime().getTime());
+    }
+
+    /**
+     * 获取某个日期的本月的结束时间
+     *
+     * @param date 某个日期
+     * @return 结束时间
+     */
+    public static Date getEndDayOfMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(getYearOfDate(date), getMonthOfDate(date), 1);
+        int day = calendar.getActualMaximum(Calendar.DATE);
+        calendar.set(getYearOfDate(date), getMonthOfDate(date), day);
+        return getEndTimeOfDate(calendar.getTime().getTime());
+    }
+
+    /**
+     * 获取某个日期的本年的开始时间
+     *
+     * @param date 某个日期
+     * @return 开始时间
+     */
+    public static Date getBeginDayOfYear(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, getYearOfDate(date));
+        cal.set(Calendar.MONTH, Calendar.JANUARY);
+        cal.set(Calendar.DATE, 1);
+        return getStartTimeOfDate(cal.getTime().getTime());
+    }
+
+    /**
+     * 获取某个日期的本年的结束时间
+     *
+     * @param date 某个日期
+     * @return 结束时间
+     */
+    public static Date getEndDayOfYear(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.YEAR, getYearOfDate(date));
+        cal.set(Calendar.MONTH, Calendar.DECEMBER);
+        cal.set(Calendar.DATE, 31);
+        return getEndTimeOfDate(cal.getTime().getTime());
+    }
+
+    /**
+     * 时间Date类型转Long时间戳
+     *
+     * @param date
+     * @return
+     */
+    public static Long dateToStamp(Date date) {
+        long time = 0L;
+        try {
+            String sDate = formatDatetime(date);
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
+            Date parse = simpleDateFormat.parse(sDate);
+            time = parse.getTime();
+        } catch (Exception e) {
+            log.error("时间Date转时间戳错误:{}", e);
+        }
+        return time;
+    }
+
+    /**
+     * 时间DateString类型转Long时间戳
+     *
+     * @param date
+     * @return
+     */
+    public static Long dateStringToStamp(String date) {
+        long time = 0L;
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_TIME_FORMAT);
+            Date parse = simpleDateFormat.parse(date);
+            time = parse.getTime();
+        } catch (Exception e) {
+            log.error("时间DateString转时间戳错误:{}", e);
+        }
+        return time;
+    }
+
+    /**
+     * 秒级时间戳转Date
+     *
+     * @param stamp
+     * @param pattern
+     * @return
+     */
+    public static String stampToDate(Long stamp, String pattern) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
+        return simpleDateFormat.format(new Date(stamp));
+    }
+
+    /**
+     * 获取年份加减时间
+     *
+     * @param years
+     * @return
+     */
+    public static Date getYearAdd(Integer years) {
+        Date date = new Date();//获取当前时间
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.YEAR, years);//当前时间减去一年,即一年前的时间
+        return calendar.getTime();//获取一年前的时间,或者一个月前的时间
+    }
+
+    public static Date getBeginDate(int year, int month) {
+        YearMonth yearMonth = YearMonth.of(year, month);
+        LocalDate localDate = yearMonth.atDay(1);
+        LocalDateTime startOfDay = localDate.atStartOfDay();
+        ZonedDateTime zonedDateTime = startOfDay.atZone(ZoneId.of("Asia/Shanghai"));
+        return Date.from(zonedDateTime.toInstant());
+    }
+
+    /**
+     * 根据传入时间、时间单位获取该单位起始时间
+     *
+     * @param dateTime 时间
+     * @param dateUnitType 时间单位:0-日-默认昨天  1-周-本周  2-月-本月 3-年-本年
+     */
+
+
+
+    /**
+     * 判断某个时间是否在[startTime, endTime]区间,注意时间格式要一致
+     *
+     * @param dateTime 比较时间
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @return
+     * @author jqlin
+     */
+    public static boolean isEffectiveDate(Date dateTime, Date startTime, Date endTime) {
+        if (dateTime.getTime() == startTime.getTime()
+                || dateTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+
+        Calendar date = Calendar.getInstance();
+        date.setTime(dateTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 日期类型转字符串类型
+     * @param date
+     * @param pattern
+     * @return
+     */
+
+    /**
+     * 数字转换成日期的开始时间
+     *
+     * @param year,month,day
+     * @return
+     */
+    public static Date getStartTimeOfDate(int year,int month, int day) {
+        String date = year+"-"+month+"-"+day;
+        return getStartTimeOfDate(date);
+    }
+
+    /**
+     * 设置查询区间,最大查询3个月数据,超过3个月区间抛异常
+     * @param startDate,
+     * @param endDate
+     * @param months ,需要查询的区间月份,传正数,超过最大区间抛异常信息
+     * @return
+     */
+
+    /**
+     * 设置查询区间,最大查询一周数据,超过一周区间抛异常
+     *
+     * @param startDate,
+     * @param endDate
+     * @param weeks      需要查询的区间:周,传正数,超过最大区间抛异常信息
+     * @return
+     */
+
+    /**
+     * 获取两个日期之间所有日期
+     *
+     * @param startDayDate
+     * @param endDayDate
+     * @return
+     */
+
+    /**
+     * 获取两个日期之间所有日期
+     *
+     * @param startDayLong
+     * @param endDayLong
+     * @return
+     */
+
+    /**
+     * 计算两个日期之间包含的所有月份
+     *
+     * @param beginTime
+     * @param endTime
+     * @return
+     * @throws ParseException
+     */
+    public static List<String> findMonthsStr(String beginTime, String endTime) throws ParseException {
+        List<String> monthsStrList = new ArrayList<>();
+        //格式化为年月
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+
+        Calendar min = Calendar.getInstance();
+        Calendar max = Calendar.getInstance();
+
+        min.setTime(sdf.parse(beginTime));
+        min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
+
+        max.setTime(sdf.parse(endTime));
+        max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
+
+        while (min.before(max)) {
+            monthsStrList.add(sdf.format(min.getTime()));
+            min.add(Calendar.MONTH, 1);
+        }
+        return monthsStrList;
+    }
+
+    /**
+     * 计算两个日期之间包含的所有年份
+     *
+     * @param beginTime
+     * @param endTime
+     * @return
+     */
+    public static List<String> findYearsStr(String beginTime, String endTime) {
+        List<String> yearsStrList = new ArrayList<>();
+        beginTime = beginTime.substring(0, 4);
+        endTime = endTime.substring(0, 4);
+        if (beginTime.equals(endTime)) {
+            yearsStrList.add(beginTime);
+        } else {
+            yearsStrList.add(beginTime);
+            for (int i = 1; i <= Integer.parseInt(endTime) - Integer.parseInt(beginTime); i++) {
+                yearsStrList.add(String.valueOf(Integer.parseInt(beginTime) + i));
+            }
+        }
+        return yearsStrList;
+    }
+
+    /**
+     * 格式化Excel时间
+     * @param day
+     * @return yyyy-MM-dd
+     */
+    public static String formatExcelDate(int day) {
+        Calendar calendar = new GregorianCalendar(1899,11,30);
+        Date gregorianDate = calendar.getTime();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        return simpleDateFormat.format(addDays(gregorianDate, day));
+    }
+
+    /**
+     * 转换Excel时间
+     * @param day
+     * @retur date
+     */
+    public static Date ExcelDate(int day) {
+        Calendar calendar = new GregorianCalendar(1899,11,30);
+        Date gregorianDate = calendar.getTime();
+        Date date = addDays(gregorianDate, day);
+
+        return date;
+    }
+
+    /**
+     * 获取时间戳
+     * @param date
+     * @return
+     */
+    public static Long getTimeStamp(Date date){
+        return date != null ? date.getTime() : 0L;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(DateUtils.addYears(DateTimeUtils.getFirstDayOfYear(),-3));;
+    }
+}

+ 8 - 5
nightFragrance-massage/src/main/resources/mapper/massage/TOrderMapper.xml

@@ -4,6 +4,8 @@
     <resultMap id="getAllMap" type="com.ylx.massage.domain.TOrder">
         <id column="c_id" property="cId"/>
         <result column="order_no" property="orderNo"/>
+        <result column="atlas_add" property="atlasAdd"/>
+        <result column="pay_type" property="payType"/>
         <result column="c_js_id" property="cJsId"/>
         <result column="c_open_id" property="cOpenId"/>
         <result column="c_goods" property="cGoods"
@@ -19,8 +21,7 @@
         <result column="dt_create_time" property="dtCreateTime"/>
         <association property="js" javaType="com.ylx.massage.domain.TJs">
             <id column="jsc_id" property="cOpenId"/>
-            <result column="jsc_bh_list" property="cBhList"
-                    typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result column="jsc_bh_list" property="cBhList"/>
             <result column="jsc_img_list" property="cImgList"
                     typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
             <result column="jsn_sex" property="nSex"/>
@@ -51,6 +52,8 @@
     <select id="getAll" resultMap="getAllMap">
         select t_order.c_id,
                t_order.order_no,
+               t_order.atlas_add,
+               t_order.pay_type,
                t_order.c_js_id,
                t_order.c_open_id,
                t_order.c_goods,
@@ -91,7 +94,7 @@
         from t_order
                  left join
              t_js on
-                 t_order.c_js_id = t_js.c_open_id
+                 t_order.c_js_id = t_js.id
                  left join
              t_wx_user on
                  t_wx_user.c_openid = t_order.c_open_id
@@ -100,10 +103,10 @@
             <if test="param.cId != null and param.cId != ''">
                 and t_order.c_id = #{ param.cId }
             </if>
-            <if test="param.order_no != null and param.order_no != ''">
+            <if test="param.orderNo != null and param.orderNo != ''">
                 and t_order.order_no = #{ param.orderNo }
             </if>
-            <if test="param.nStatus != null">
+            <if test="param.nStatus != null and param.nStatus != 100">
                 and t_order.n_status = #{ param.nStatus }
             </if>
             <if test="param.cJsId != null and param.cJsId != ''">

+ 1 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TRechargeMapper.xml

@@ -5,6 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.ylx.massage.domain.TRecharge">
         <id column="c_id" property="cId" />
+        <result column="recharge_no" property="rechargeNo" />
         <result column="c_open_id" property="cOpenId" />
         <result column="d_money" property="dMoney" />
         <result column="dt_create_time" property="dtCreateTime" />

Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 18
sql/ry-vue.sql


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff