wrj 1 рік тому
батько
коміт
6b51504346
57 змінених файлів з 2305 додано та 103 видалено
  1. 29 2
      nightFragrance-admin/src/main/java/com/ylx/web/controller/common/CommonController.java
  2. 30 10
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/PayController.java
  3. 11 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TAddressController.java
  4. 87 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TConsumptionLogController.java
  5. 56 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TJsController.java
  6. 0 1
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TLbtController.java
  7. 40 1
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java
  8. 30 20
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TTxRecordController.java
  9. 18 9
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WxController.java
  10. 127 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/YlxAlarmController.java
  11. 8 6
      nightFragrance-admin/src/main/resources/application-dev.yml
  12. 8 8
      nightFragrance-admin/src/main/resources/application-test.yml
  13. 5 0
      nightFragrance-common/src/main/java/com/ylx/common/core/domain/model/WxLoginUser.java
  14. 14 2
      nightFragrance-framework/src/main/java/com/ylx/framework/aspectj/LogAspect.java
  15. 2 1
      nightFragrance-framework/src/main/java/com/ylx/framework/config/SecurityConfig.java
  16. 126 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TConsumptionLog.java
  17. 18 2
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java
  18. 4 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TRecharge.java
  19. 22 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TTxRecord.java
  20. 7 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TWxUser.java
  21. 101 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TbFile.java
  22. 206 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/YlxAlarm.java
  23. 81 0
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/TWxUserVo.java
  24. 56 0
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/BillTypeEnum.java
  25. 3 2
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/JsStatusEnum.java
  26. 12 14
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnum.java
  27. 63 0
      nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnumVo.java
  28. 36 0
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TConsumptionLogMapper.java
  29. 4 1
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TWxUserMapper.java
  30. 36 0
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TbFileMapper.java
  31. 79 0
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/YlxAlarmMapper.java
  32. 15 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TConsumptionLogService.java
  33. 4 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TJsService.java
  34. 3 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TOrderService.java
  35. 5 1
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TRechargeService.java
  36. 1 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TTxRecordService.java
  37. 3 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TWxUserService.java
  38. 17 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TbFileService.java
  39. 63 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/YlxAlarmService.java
  40. 20 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TConsumptionLogServiceImpl.java
  41. 40 9
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java
  42. 48 7
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java
  43. 71 5
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TRechargeServiceImpl.java
  44. 70 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TTxRecordServiceImpl.java
  45. 22 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TWxUserServiceImpl.java
  46. 27 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TbFileServiceImpl.java
  47. 121 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/YlxAlarmServiceImpl.java
  48. 2 0
      nightFragrance-massage/src/main/java/com/ylx/massage/utils/BillNoUtil.java
  49. 46 0
      nightFragrance-massage/src/main/java/com/ylx/massage/utils/MassageUtil.java
  50. 2 0
      nightFragrance-massage/src/main/java/com/ylx/massage/utils/OrderNumberGenerator.java
  51. 38 0
      nightFragrance-massage/src/main/resources/mapper/massage/TConsumptionLogMapper.xml
  52. 6 0
      nightFragrance-massage/src/main/resources/mapper/massage/TOrderMapper.xml
  53. 119 0
      nightFragrance-massage/src/main/resources/mapper/massage/TWxUserMapper.xml
  54. 36 0
      nightFragrance-massage/src/main/resources/mapper/massage/TbFileMapper.xml
  55. 201 0
      nightFragrance-massage/src/main/resources/mapper/massage/YlxAlarmMapper.xml
  56. 4 0
      nightFragrance-system/src/main/java/com/ylx/system/domain/SysOperLog.java
  57. 2 2
      nightFragrance-system/src/main/resources/mapper/system/SysOperLogMapper.xml

+ 29 - 2
nightFragrance-admin/src/main/java/com/ylx/web/controller/common/CommonController.java

@@ -1,10 +1,13 @@
 package com.ylx.web.controller.common;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import cn.hutool.crypto.digest.DigestUtil;
+import com.ylx.massage.domain.TbFile;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -23,6 +26,7 @@ import com.ylx.common.utils.StringUtils;
 import com.ylx.common.utils.file.FileUploadUtils;
 import com.ylx.common.utils.file.FileUtils;
 import com.ylx.framework.config.ServerConfig;
+import com.ylx.massage.service.TbFileService;
 
 /**
  * 通用请求处理
@@ -39,6 +43,9 @@ public class CommonController
     @Autowired
     private ServerConfig serverConfig;
 
+    @Autowired
+    private TbFileService fileService;
+
     private static final String FILE_DELIMETER = ",";
 
     /**
@@ -75,7 +82,10 @@ public class CommonController
 
 
 
-
+    private String calculateMD5(MultipartFile file) throws IOException {
+        byte[] bytes = file.getBytes();
+        return DigestUtil.md5Hex(bytes);
+    }
 
 
 
@@ -87,18 +97,35 @@ public class CommonController
     @PostMapping("/upload")
     public AjaxResult uploadFile(MultipartFile file) throws Exception
     {
+        AjaxResult ajax = AjaxResult.success();
         try
         {
+            String md5 = calculateMD5(file);
+
+            TbFile dbFile = fileService.getByMd5(md5);
+            if(null != dbFile){
+                ajax.put("url", serverConfig.getUrl() + dbFile.getFileUrl());
+                ajax.put("fileName", dbFile.getFileUrl());
+                ajax.put("newFileName", FileUtils.getName(dbFile.getFileUrl()));
+                ajax.put("originalFilename", dbFile.getFileName());
+                return ajax;
+            }
+
             // 上传文件路径
             String filePath = RuoYiConfig.getUploadPath();
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.upload(filePath, file);
             String url = serverConfig.getUrl() + fileName;
-            AjaxResult ajax = AjaxResult.success();
             ajax.put("url", url);
             ajax.put("fileName", fileName);
             ajax.put("newFileName", FileUtils.getName(fileName));
             ajax.put("originalFilename", file.getOriginalFilename());
+
+            TbFile tbFile = new TbFile();
+            tbFile.setMd5(md5);
+            tbFile.setFileName(file.getOriginalFilename());
+            tbFile.setFileUrl(fileName);
+            fileService.save(tbFile);
             return ajax;
         }
         catch (Exception e)

+ 30 - 10
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/PayController.java

@@ -24,16 +24,19 @@ import com.ijpay.wxpay.enums.v3.TransferApiEnum;
 import com.ijpay.wxpay.model.v3.*;
 import com.ylx.common.config.WxPayConfig;
 import com.ylx.common.core.domain.R;
+import com.ylx.massage.domain.TRecharge;
+import com.ylx.massage.service.TRechargeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.ByteArrayInputStream;
+import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.security.cert.X509Certificate;
 import java.util.Collections;
@@ -50,6 +53,7 @@ import static com.ylx.common.constant.HttpStatus.SUCCESS;
 
 @RestController
 @Slf4j
+@RequestMapping("/wx/pay")
 @Api(tags = {"微信支付"})
 public class PayController {
 
@@ -57,15 +61,21 @@ public class PayController {
     @Autowired
     private WxPayConfig wxPayProperties;
 
+    @Resource
+    private TRechargeService rechargeService;
+
     String serialNo;
     String platSerialNo;
 
     /**
      * 小程序微信支付的第一步,统一下单
      */
-    @GetMapping("/pay")
-    @ApiOperation("AIPV3微信支付")
-    public R createUnifiedOrder(@RequestParam(value = "openId") String openId) throws Exception {
+    @PostMapping("/pay")
+    @ApiOperation("AIPV3微信支付充值")
+    public R createUnifiedOrder(@RequestBody TRecharge recharge) throws Exception {
+
+        TRecharge rechargeResp = rechargeService.recharge(recharge);
+
         String timeExpire = DateTimeZoneUtil.dateToTimeZone(System.currentTimeMillis() + 1000 * 60 * 3);
         UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel()
                 .setAppid(wxPayProperties.getAppId())
@@ -73,7 +83,7 @@ public class PayController {
                 //商品描述
                 .setDescription("充值")
                 //订单号
-                .setOut_trade_no(PayKit.generateStr())
+                .setOut_trade_no(rechargeResp.getRechargeNo())
                 //交易结束时间
                 .setTime_expire(timeExpire)
                 //附加数据
@@ -82,9 +92,9 @@ public class PayController {
                 //示例值:https://www.weixin.qq.com/wxpay/pay.php
                 .setNotify_url(wxPayProperties.getNotifyUrl())
                 //支付金额以分为单位
-                .setAmount(new Amount().setTotal(1))
+                .setAmount(new Amount().setTotal(recharge.getdMoney().multiply(new BigDecimal(100)).intValue()))
                 //交易人
-                .setPayer(new Payer().setOpenid(""));
+                .setPayer(new Payer().setOpenid(recharge.getcOpenId()));
 
         log.info("统一下单参数 {}", JSONUtil.toJsonStr(unifiedOrderModel));
         IJPayHttpResponse response = WxPayApi.v3(
@@ -143,6 +153,7 @@ public class PayController {
     @ResponseBody
     @ApiOperation("微信支付回调接口")
     public void payNotify(HttpServletRequest request, HttpServletResponse response) {
+        log.info("微信支付回调接口====================================>>>>微信支付回调接口");
         Map<String, String> map = new HashMap<>(12);
         try {
             String timestamp = request.getHeader("Wechatpay-Timestamp");
@@ -164,6 +175,9 @@ public class PayController {
                 response.setStatus(200);
                 map.put("code", "SUCCESS");
                 map.put("message", "SUCCESS");
+                // 处理业务逻辑
+                JSONObject jsonObject = new JSONObject(plainText);
+                TRecharge outTradeNo = rechargeService.increaseAmount(jsonObject.get("out_trade_no").toString());
             } else {
                 response.setStatus(500);
                 map.put("code", "ERROR");
@@ -176,22 +190,28 @@ public class PayController {
             log.error("系统异常", e);
         }
     }
+    @RequestMapping(value = "/test", method = {org.springframework.web.bind.annotation.RequestMethod.POST, org.springframework.web.bind.annotation.RequestMethod.GET})
+    @ResponseBody
+    @ApiOperation("测试")
+    public void test(HttpServletRequest request, HttpServletResponse response) {
+        System.out.println("test=======================>");
+    }
 
     @RequestMapping("/get")
     @ResponseBody
-    public String v3Get() {
+    public String v3Get() throws Exception {
         // 获取平台证书列表
         try {
             IJPayHttpResponse response = WxPayApi.v3(
                     RequestMethodEnum.GET,
                     WxDomainEnum.CHINA.toString(),
-                    CertAlgorithmTypeEnum.getCertSuffixUrl(CertAlgorithmTypeEnum.SM2.getCode()),
+                    CertAlgorithmTypeEnum.getCertSuffixUrl(CertAlgorithmTypeEnum.RSA.getCode()),
                     wxPayProperties.getMchId(),
                     getSerialNumber(),
                     null,
                     wxPayProperties.getCertKeyPath(),
                     "",
-                    AuthTypeEnum.SM2.getCode()
+                    AuthTypeEnum.RSA.getCode()
             );
             Map<String, List<String>> headers = response.getHeaders();
             log.info("请求头: {}", headers);

+ 11 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TAddressController.java

@@ -43,6 +43,17 @@ public class TAddressController extends BaseController {
         return R.ok(this.tAddressService.page(page, new QueryWrapper<>(tAddress)));
     }
 
+
+    @GetMapping("pc/getAddressList")
+    @ApiOperation("通讯地址列表")
+    public R getAddressList(Page<TAddress> page, TAddress tAddress) {
+        Page<TAddress> page1 = tAddressService.page(page, new LambdaQueryWrapper<TAddress>()
+                .like(TAddress::getUserName, tAddress.getUserName())
+                .orderByDesc(TAddress::getCreateTime));
+        return R.ok(page1);
+    }
+
+
     /**
      * 通过主键查询单条数据
      *

+ 87 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TConsumptionLogController.java

@@ -0,0 +1,87 @@
+package com.ylx.web.controller.massage;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.core.controller.BaseController;
+import com.ylx.massage.domain.TConsumptionLog;
+import com.ylx.massage.service.TConsumptionLogService;
+import org.springframework.web.bind.annotation.*;
+import com.ylx.common.core.domain.R;
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 个人钱包记录表(TConsumptionLog)表控制层
+ *
+ * @author makejava
+ * @since 2024-04-25 16:50:31
+ */
+@RestController
+@RequestMapping("tConsumptionLog")
+public class TConsumptionLogController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TConsumptionLogService tConsumptionLogService;
+
+    /**
+     * 分页查询所有数据
+     *
+     * @param page            分页对象
+     * @param tConsumptionLog 查询实体
+     * @return 所有数据
+     */
+    @GetMapping
+    public R selectAll(Page<TConsumptionLog> page, TConsumptionLog tConsumptionLog) {
+        LambdaQueryWrapper<TConsumptionLog> queryWrapper = new LambdaQueryWrapper<>();
+        return R.ok(this.tConsumptionLogService.page(page, queryWrapper));
+    }
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("{id}")
+    public R selectOne(@PathVariable Serializable id) {
+        return R.ok(this.tConsumptionLogService.getById(id));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param tConsumptionLog 实体对象
+     * @return 新增结果
+     */
+    @PostMapping
+    public R insert(@RequestBody TConsumptionLog tConsumptionLog) {
+        return R.ok(this.tConsumptionLogService.save(tConsumptionLog));
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param tConsumptionLog 实体对象
+     * @return 修改结果
+     */
+    @PutMapping
+    public R update(@RequestBody TConsumptionLog tConsumptionLog) {
+        return R.ok(this.tConsumptionLogService.updateById(tConsumptionLog));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param idList 主键结合
+     * @return 删除结果
+     */
+    @DeleteMapping
+    public R delete(@RequestParam("idList") List<Long> idList) {
+        return R.ok(this.tConsumptionLogService.removeByIds(idList));
+    }
+}
+

+ 56 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TJsController.java

@@ -12,7 +12,9 @@ import com.ylx.common.utils.ListUtils;
 import com.ylx.massage.domain.Location;
 import com.ylx.massage.domain.TJs;
 import com.ylx.massage.domain.vo.TJsVo;
+import com.ylx.massage.enums.JsStatusEnum;
 import com.ylx.massage.service.TJsService;
+import com.ylx.massage.service.TWxUserService;
 import com.ylx.massage.utils.LocationUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -45,6 +47,9 @@ public class TJsController extends BaseController {
     @Resource
     private LocationUtil locationUtil;
 
+    @Resource
+    private TWxUserService wxUserService;
+
 
     /**
      * 添加技师申请
@@ -91,6 +96,21 @@ public class TJsController extends BaseController {
         }
     }
 
+    @Log(title = "实时更新技师位置", businessType = BusinessType.UPDATE)
+    @RequestMapping(value = "wx/updateLocation", method = RequestMethod.POST)
+    @ApiOperation("实时更新技师位置")
+    public R updateLocation(@RequestBody TJs js) {
+        try {
+            return R.ok(jsService.updateLocation(js));
+        } catch (ServiceException s) {
+            log.error(s.toString());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error(e.toString());
+            return R.fail("系统异常");
+        }
+    }
+
     /**
      * 微信查询
      *
@@ -144,6 +164,10 @@ public class TJsController extends BaseController {
         LambdaQueryWrapper<TJs> mhCompanyLambdaQueryWrapper = new LambdaQueryWrapper<>();
         mhCompanyLambdaQueryWrapper.eq(null != js.getnTong(), TJs::getnTong, js.getnTong()).
                 like(StringUtils.isNotBlank(js.getcName()), TJs::getcName, js.getcName()).
+                like(StringUtils.isNotBlank(js.getcNickName()), TJs::getcNickName, js.getcNickName()).
+                like(StringUtils.isNotBlank(js.getcPhone()), TJs::getcPhone, js.getcPhone()).
+                eq(js.getnStatus() != null, TJs::getnStatus, js.getnStatus()).
+                eq(js.getnSex() != null, TJs::getnSex, js.getnSex()).
                 orderByDesc(TJs::getDtCreateTime);
         return jsService.page(page, mhCompanyLambdaQueryWrapper);
     }
@@ -172,6 +196,7 @@ public class TJsController extends BaseController {
             return R.fail("系统异常");
         }
     }
+
     @ApiOperation("根据OpenId查询技师")
     @RequestMapping(value = "/wx/getByOpenId", method = RequestMethod.POST)
     public R getByOpenId(@RequestBody TJs js) {
@@ -187,4 +212,35 @@ public class TJsController extends BaseController {
             return R.fail("系统异常");
         }
     }
+
+    @ApiOperation("审核")
+    @RequestMapping(value = "/auditing", method = RequestMethod.POST)
+    public R auditing(@RequestBody TJs js) {
+        try {
+            return R.ok(jsService.auditing(js));
+        } catch (ServiceException s) {
+            log.error(s.getMessage());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return R.fail("系统异常");
+        }
+    }
+
+    @ApiOperation("退回")
+    @RequestMapping(value = "/repulse", method = RequestMethod.POST)
+    public R repulse(@RequestBody TJs js) {
+        try {
+            LambdaQueryWrapper<TJs> mhCompanyLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            mhCompanyLambdaQueryWrapper.eq(TJs::getId, js.getId()).eq(TJs::getnTong, JsStatusEnum.JS_NOT_PASS.getCode());
+            js.setnTong(JsStatusEnum.JS_RETURN.getCode());
+            return R.ok(jsService.update(js, mhCompanyLambdaQueryWrapper));
+        } catch (ServiceException s) {
+            log.error(s.getMessage());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error(e.getMessage());
+            return R.fail("系统异常");
+        }
+    }
 }

+ 0 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TLbtController.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.annotation.Log;
-import com.ylx.common.constant.MassageConstants;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.enums.BusinessType;
 import com.ylx.common.exception.ServiceException;

+ 40 - 1
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -10,6 +10,7 @@ import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.TOrder;
 import com.ylx.massage.enums.Enumproject;
 import com.ylx.massage.enums.OrderStatusEnum;
+import com.ylx.massage.enums.OrderStatusEnumVo;
 import com.ylx.massage.service.TOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -150,6 +151,44 @@ public class TOrderController {
         }
     }
 
+    @Log(title = "到达订单位置", businessType = BusinessType.UPDATE)
+    @ApiOperation("到达订单位置")
+    @RequestMapping(value = "wx/reach", method = RequestMethod.POST)
+    public R reach(@RequestBody TOrder order) {
+        try {
+            LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(TOrder::getcId,order.getcId()).eq(TOrder::getnStatus,OrderStatusEnum.RECEIVED_ORDER.getCode());
+            order.setnStatus(OrderStatusEnum.ARRIVED.getCode());
+            return R.ok(orderService.update(order,wrapper));
+        } 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("系统异常");
+        }
+    }
+
+    @Log(title = "开始服务", businessType = BusinessType.UPDATE)
+    @ApiOperation("开始服务")
+    @RequestMapping(value = "wx/service", method = RequestMethod.POST)
+    public R service(@RequestBody TOrder order) {
+        try {
+            LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(TOrder::getcId,order.getcId()).eq(TOrder::getnStatus,OrderStatusEnum.ARRIVED.getCode());
+            order.setnStatus(OrderStatusEnum.SERVICE.getCode());
+            return R.ok(orderService.update(order,wrapper));
+        } 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("系统异常");
+        }
+    }
+
     /**
      * 确认订单
      *
@@ -235,7 +274,7 @@ public class TOrderController {
     @ApiOperation("订单状态")
     @RequestMapping(value = "/getStatus", method = RequestMethod.GET)
     public R getStatus() {
-        List<Enumproject> statusEnum = OrderStatusEnum.getStatusEnum();
+        List<Enumproject> statusEnum = OrderStatusEnumVo.getStatusEnum();
         return R.ok(statusEnum);
     }
 }

+ 30 - 20
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TTxRecordController.java

@@ -1,18 +1,14 @@
 package com.ylx.web.controller.massage;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
-import com.ylx.common.utils.uuid.IdUtils;
+import com.ylx.common.exception.ServiceException;
 import com.ylx.massage.domain.TTxRecord;
-import com.ylx.massage.domain.TWxUser;
-import com.ylx.massage.enums.TTxRecordEnum;
 import com.ylx.massage.service.TTxRecordService;
-import com.ylx.massage.service.TWxUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -20,7 +16,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -29,30 +24,45 @@ import java.util.List;
 @RestController
 @RequestMapping("api/tx/record")
 @Api(tags = {"提现记录"})
+@Slf4j
 public class TTxRecordController {
     @Resource
     private TTxRecordService recordService;
 
-    @Resource
-    private TWxUserService wxUserService;
 
     /**
      * 添加申请记录
-     *
+     * cash
      * @return
      */
     @ApiOperation("申请提现")
-    @RequestMapping(value = "wx/addOrUpdate", method = RequestMethod.POST)
-    public R addOrUpdate(@RequestBody TTxRecord record) {
-        if (StringUtils.isBlank(record.getcId())) {
-            record.setnStatus(TTxRecordEnum.PASS_ING.getCode());
-            record.setDtCreateTime(LocalDateTime.now());
-            UpdateWrapper<TWxUser> businessUpdateWrapper = new UpdateWrapper<>();
-            businessUpdateWrapper.lambda().eq(TWxUser::getcOpenid, record.getcOpenId());
-            businessUpdateWrapper.lambda().setSql(" d_balance = d_balance - " + record.getdPrice());
-            wxUserService.update(businessUpdateWrapper);
+    @RequestMapping(value = "wx/applicationCash", method = RequestMethod.POST)
+    public R applicationCash(@RequestBody TTxRecord record) {
+        try {
+            return R.ok(recordService.applicationCash(record));
+        } catch (ServiceException s) {
+            log.error(s.getMessage());
+            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("系统异常");
+        }
+    }
+
+    @ApiOperation("审核通过")
+    @RequestMapping(value = "wx/auditing", method = RequestMethod.POST)
+    public R auditing(@RequestBody TTxRecord record) {
+        try {
+            return R.ok(recordService.updateById(record));
+        } catch (ServiceException s) {
+            log.error(s.getMessage());
+            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("系统异常");
         }
-        return R.ok(recordService.saveOrUpdate(record));
     }
 
     /**

+ 18 - 9
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WxController.java

@@ -20,6 +20,7 @@ import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.enums.BusinessType;
 import com.ylx.framework.web.service.WxTokenService;
+import com.ylx.massage.domain.vo.TWxUserVo;
 import com.ylx.massage.utils.LocationUtil;
 import com.ylx.massage.utils.WxQrCodeUtil;
 import com.ylx.massage.utils.WxUtil;
@@ -170,10 +171,6 @@ public class WxController extends BaseController {
     }
 
 
-
-
-
-
     /**
      * 获取用户信息
      *
@@ -203,7 +200,7 @@ public class WxController extends BaseController {
     @Log(title = "小程序登录", businessType = BusinessType.OTHER)
     @PostMapping("/login")
     public R<Object> login(@RequestParam("code") String code, @RequestParam("encryptedData") String encryptedData,
-                                @RequestParam("iv") String iv) {
+                           @RequestParam("iv") String iv) {
         try {
             // 调用微信 API 获取用户的 openid 和 session_key
             WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
@@ -214,7 +211,7 @@ public class WxController extends BaseController {
             String phoneNumber = phoneInfo.getPhoneNumber();
 
             // 调用微信 API 获取用户的详细信息
-            WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(session.getSessionKey(),encryptedData,iv);
+            WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(session.getSessionKey(), encryptedData, iv);
             // 获取用户昵称
             String nickName = userInfo.getNickName();
             // 获取用户头像
@@ -228,7 +225,7 @@ public class WxController extends BaseController {
 
             // 将用户信息保存到数据库中
             LambdaQueryWrapper<TWxUser> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            objectLambdaQueryWrapper.eq(TWxUser::getcOpenid,openid);
+            objectLambdaQueryWrapper.eq(TWxUser::getcOpenid, openid);
             TWxUser user = wxUserService.getOne(objectLambdaQueryWrapper);
             if (user == null) {
                 user = new TWxUser();
@@ -274,7 +271,7 @@ public class WxController extends BaseController {
             }
         } catch (Exception e) {
             // 异常处理,记录日志并返回友好的错误信息
-             log.error("更新用户信息异常", e);
+            log.error("更新用户信息异常", e);
             return R.fail("更新用户信息异常,请稍后尝试");
         }
     }
@@ -311,6 +308,18 @@ public class WxController extends BaseController {
         }
     }
 
-
+    /**
+     * 微信用户列表
+     */
+    @GetMapping("pc/getUserList")
+    @ApiOperation("微信用户列表")
+    public R<Page<TWxUser>> getUserList(Page<TWxUser> page, TWxUser user) {
+
+        Page<TWxUser> pageSelect = wxUserService.page(page, new LambdaQueryWrapper<TWxUser>()
+                .like(StringUtils.isNotBlank(user.getcNickName()), TWxUser::getcNickName, user.getcNickName())
+                .like(StringUtils.isNotBlank(user.getcPhone()), TWxUser::getcPhone, user.getcPhone())
+                .orderByDesc(TWxUser::getCreateTime));
+        return R.ok(pageSelect);
+    }
 
 }

+ 127 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/YlxAlarmController.java

@@ -0,0 +1,127 @@
+package com.ylx.web.controller.massage;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.common.annotation.Log;
+import com.ylx.common.core.domain.R;
+import com.ylx.common.enums.BusinessType;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.common.utils.StringUtils;
+import com.ylx.massage.domain.YlxAlarm;
+import com.ylx.massage.service.YlxAlarmService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * 报警记录表(YlxAlarm)表控制层
+ *
+ * @author makejava
+ * @since 2024-04-28 09:19:04
+ */
+@RestController
+@RequestMapping("ylxAlarm")
+@Api(tags = {"报警记录"})
+public class YlxAlarmController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private YlxAlarmService ylxAlarmService;
+
+    /**
+     * 分页查询
+     *
+     * @param ylxAlarm    筛选条件
+     * @param pageRequest 分页对象
+     * @return 查询结果
+     */
+    @GetMapping("getAlarmList")
+    @ApiOperation("Pc报警列表")
+    public R queryByPage(Page<YlxAlarm> page, YlxAlarm ylxAlarm) {
+        LambdaQueryWrapper<YlxAlarm> alarmLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        alarmLambdaQueryWrapper.eq(StringUtils.isNotBlank(ylxAlarm.getJsId()), YlxAlarm::getJsId, ylxAlarm.getJsId()).
+                eq(StringUtils.isNotBlank(ylxAlarm.getOpenId()), YlxAlarm::getOpenId, ylxAlarm.getOpenId()).
+                eq(null != ylxAlarm.getAlarmStatus(), YlxAlarm::getAlarmStatus, ylxAlarm.getAlarmStatus()).
+                like(StringUtils.isNotBlank(ylxAlarm.getJsName()), YlxAlarm::getJsName, ylxAlarm.getJsName()).
+                like(StringUtils.isNotBlank(ylxAlarm.getJsPhone()), YlxAlarm::getJsPhone, ylxAlarm.getJsPhone()).
+                like(StringUtils.isNotBlank(ylxAlarm.getUserPhone()), YlxAlarm::getUserPhone, ylxAlarm.getUserPhone()).
+                like(StringUtils.isNotBlank(ylxAlarm.getUserName()), YlxAlarm::getUserName, ylxAlarm.getUserName()).orderByDesc(YlxAlarm::getCreateTime);
+        // 获取查询返回结果
+        Page<YlxAlarm> pageSelect = ylxAlarmService.page(page, alarmLambdaQueryWrapper);
+        return R.ok(pageSelect);
+    }
+
+    /**
+     * 通过主键查询单条数据
+     *
+     * @param id 主键
+     * @return 单条数据
+     */
+    @GetMapping("{id}")
+    public ResponseEntity<YlxAlarm> queryById(@PathVariable("id") String id) {
+        return ResponseEntity.ok(this.ylxAlarmService.queryById(id));
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param ylxAlarm 实体
+     * @return 新增结果
+     */
+    @PostMapping("/addAlarm")
+    @ApiOperation("添加报警记录")
+    @Log(title = "添加报警记录", businessType = BusinessType.INSERT)
+    public R<YlxAlarm> addAlarm(@RequestBody YlxAlarm ylxAlarm) {
+        return R.ok(this.ylxAlarmService.addAlarm(ylxAlarm));
+    }
+
+
+
+    @PostMapping("/handleAlarm")
+    @ApiOperation("已处理")
+    @Log(title = "处理报警记录", businessType = BusinessType.UPDATE)
+    public R handleAlarm(@RequestBody YlxAlarm ylxAlarm) {
+        if(StringUtils.isBlank(ylxAlarm.getId())){
+            throw new ServiceException("id不能为空");
+        }
+        ylxAlarm.setAlarmStatus(1);
+        return R.ok(ylxAlarmService.updateById(ylxAlarm));
+    }
+
+
+    @PostMapping("/deleteAlarm")
+    @ApiOperation("删除")
+    @Log(title = "处理报警记录", businessType = BusinessType.UPDATE)
+    public R deleteAlarm(@RequestBody YlxAlarm ylxAlarm) {
+        return R.ok(ylxAlarmService.removeById(ylxAlarm.getId()));
+    }
+
+    /**
+     * 编辑数据
+     *
+     * @param ylxAlarm 实体
+     * @return 编辑结果
+     */
+    @PutMapping
+    public ResponseEntity<YlxAlarm> edit(YlxAlarm ylxAlarm) {
+        return ResponseEntity.ok(this.ylxAlarmService.update(ylxAlarm));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param id 主键
+     * @return 删除是否成功
+     */
+    @DeleteMapping
+    public ResponseEntity<Boolean> deleteById(String id) {
+        return ResponseEntity.ok(this.ylxAlarmService.deleteById(id));
+    }
+
+}
+

+ 8 - 6
nightFragrance-admin/src/main/resources/application-dev.yml

@@ -195,21 +195,23 @@ swagger:
 wx:
   base-url: https://api.weixin.qq.com/
   # AppID(小程序ID)
+#  app-id: wxb2ae0f4ee11e8705
   app-id: wxe8661ef542cd963c
   # AppSecret(小程序密钥)
+#  app-secret: 28504227c2662cfb1b39a5baf750bb59
   app-secret: 7439a36812c1850d060567bce51159ec
   # 商户号
-  mch-id: ""
+  mch-id: 1675015090
   # 商户秘钥
-  mch-key: ""
+  mch-key: 39C9AIJ1RQKT3I8V16BYZ6LLBI0H30NB
   # 异步回调地址
-  notify-url: ""
+  notify-url: https://6e37252b.r23.cpolar.top/wx/pay/payNotify
   # 证书地址
-  cert-path: ""
+  cert-path: D:/1675015090_20240424_cert/apiclient_cert.pem
   # 证书秘钥地址
-  cert-key-path: ""
+  cert-key-path: D:/1675015090_20240424_cert/apiclient_key.pem
   # 微信平台证书
-  plat-form-path: ""
+  plat-form-path: D:/1675015090_20240424_cert/plateForm.pem
 
   msgDataFormat: JSON
 # 防止XSS攻击

+ 8 - 8
nightFragrance-admin/src/main/resources/application-test.yml

@@ -195,21 +195,21 @@ swagger:
 wx:
   base-url: https://api.weixin.qq.com/
   # AppID(小程序ID)
-  app-id: wxe8661ef542cd963c
+  app-id: wxb2ae0f4ee11e8705
   # AppSecret(小程序密钥)
-  app-secret: 7439a36812c1850d060567bce51159ec
+  app-secret: 28504227c2662cfb1b39a5baf750bb59
   # 商户号
-  mch-id: ""
+  mch-id: 1675015090
   # 商户秘钥
-  mch-key: ""
+  mch-key: 39C9AIJ1RQKT3I8V16BYZ6LLBI0H30NB
   # 异步回调地址
-  notify-url: ""
+  notify-url: https://6e37252b.r23.cpolar.top/wx/pay/payNotify
   # 证书地址
-  cert-path: ""
+  cert-path: D:/1675015090_20240424_cert/apiclient_cert.pem
   # 证书秘钥地址
-  cert-key-path: ""
+  cert-key-path: D:/1675015090_20240424_cert/apiclient_key.pem
   # 微信平台证书
-  plat-form-path: ""
+  plat-form-path: D:/1675015090_20240424_cert/plateForm.pem
 
   msgDataFormat: JSON
 # 防止XSS攻击

+ 5 - 0
nightFragrance-common/src/main/java/com/ylx/common/core/domain/model/WxLoginUser.java

@@ -3,6 +3,7 @@ package com.ylx.common.core.domain.model;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -123,6 +124,10 @@ public class WxLoginUser implements UserDetails
      */
     private String cUpUser;
 
+
+    @ApiModelProperty("角色:0普通,1技师")
+    private Integer role;
+
     /**
      * 默认地址
      */

+ 14 - 2
nightFragrance-framework/src/main/java/com/ylx/framework/aspectj/LogAspect.java

@@ -14,6 +14,7 @@ import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.NamedThreadLocal;
 import org.springframework.stereotype.Component;
 import org.springframework.validation.BindingResult;
@@ -42,6 +43,9 @@ import com.ylx.system.domain.SysOperLog;
 @Component
 public class LogAspect
 {
+    // 令牌自定义标识
+    @Value("${token.header}")
+    private String header;
     private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
 
     /** 排除敏感属性字段 */
@@ -110,8 +114,13 @@ public class LogAspect
                     operLog.setDeptName(currentUser.getDept().getDeptName());
                 }
             }else {
-                WxLoginUser WxLoginUser = SecurityUtils.getWxLoginUser();
-                operLog.setOperName(WxLoginUser.getCOpenid());
+                try {
+                    WxLoginUser WxLoginUser = SecurityUtils.getWxLoginUser();
+                    operLog.setOperName(WxLoginUser.getCOpenid());
+                    operLog.setOperatorType(2);
+                } catch (Exception ex) {
+                    log.info("未登录");
+                }
             }
 
             if (e != null)
@@ -123,6 +132,9 @@ public class LogAspect
             String className = joinPoint.getTarget().getClass().getName();
             String methodName = joinPoint.getSignature().getName();
             operLog.setMethod(className + "." + methodName + "()");
+            HttpServletRequest request = ServletUtils.getRequest();
+
+            operLog.setHeat(ServletUtils.getRequest().getHeader(header));
             // 设置请求方式
             operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
             // 处理设置注解上的参数

+ 2 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/config/SecurityConfig.java

@@ -113,7 +113,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers("/login", "/register", "/captchaImage","/wx/login",
                         "/api/lbt/v1/getAll", "/api/js/v1/select", "/api/xiangmu/v1/wx/getAll", "/api/order/v1/getStatus",
-                        "/api/xiangmu/v1/getByid", "/api/js/v1/wx/getByid","/api/js/v1/wx/select", "/api/recharge/v1/test").permitAll()
+                        "/api/xiangmu/v1/getByid", "/api/js/v1/wx/getByid","/api/js/v1/wx/select", "/api/recharge/v1/test",
+                        "/wx/pay/payNotify").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 126 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TConsumptionLog.java

@@ -0,0 +1,126 @@
+package com.ylx.massage.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 个人钱包记录表(TConsumptionLog)表实体类
+ *
+ * @author makejava
+ * @since 2024-04-25 16:50:31
+ */
+@SuppressWarnings("serial")
+@Data
+@ApiModel(value = "TConsumptionLog", description = "余额记录")
+public class TConsumptionLog extends Model<TConsumptionLog> {
+    //id
+    private String id;
+    //金额
+    private BigDecimal amount;
+    //业务类型 1充值,2余额支付,3技师收益,4技师提现
+    private Integer billType;
+    //业务单号
+    private String billNo;
+    //openId
+    private String openId;
+    //备注
+    private String note;
+    //系统创建时间
+    private Date createTime;
+    //系统修改时间
+    private Date updateTime;
+    //是否删除0否1是
+    @TableLogic
+    private Integer isDelete;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public BigDecimal getAmount() {
+        return amount;
+    }
+
+    public void setAmount(BigDecimal amount) {
+        this.amount = amount;
+    }
+
+    public Integer getBillType() {
+        return billType;
+    }
+
+    public void setBillType(Integer billType) {
+        this.billType = billType;
+    }
+
+    public String getBillNo() {
+        return billNo;
+    }
+
+    public void setBillNo(String billNo) {
+        this.billNo = billNo;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    /**
+     * 获取主键值
+     *
+     * @return 主键值
+     */
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+}
+

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

@@ -47,6 +47,22 @@ public class TOrder implements Serializable {
     @ApiModelProperty("订单号")
     private String orderNo;
 
+    @TableField("parent_no")
+    @ApiModelProperty("父订单号")
+    private String parentNo;
+
+    @TableField("tape")
+    @ApiModelProperty("音频")
+    private String tape;
+
+    @TableField("fare")
+    @ApiModelProperty("车费")
+    private String fare;
+
+    @TableField("distance")
+    @ApiModelProperty("距离")
+    private BigDecimal distance;
+
     @TableField("pay_type")
     @ApiModelProperty("支付类型:1微信支付 2:余额支付")
     private Integer payType;
@@ -72,10 +88,10 @@ public class TOrder implements Serializable {
     private BigDecimal dTotalMoney;
 
     /**
-     * 订单状态	待接单 0	服务中 1	待评价(已完成) 2	待付款 -1	已取消 -2	已拒绝 -3	已完成(已评价) 3
+     * 订单状态	订单状态 待接单 0 已接单 1 已到达 2 服务中 3 待评价(已完成) 4 待付款 -1 已取消 -2 已拒绝 -3 已完成(已评价)5
      */
     @TableField("n_status")
-    @ApiModelProperty("订单状态\t待接单 0\t服务中 1\t待评价(已完成) 2\t待付款 -1\t已取消 -2\t已拒绝 -3\t已完成(已评价) 3")
+    @ApiModelProperty("订单状态 待接单 0 已接单 1 已到达 2 服务中 3 待评价(已完成) 4 待付款 -1 已取消 -2 已拒绝 -3 已完成(已评价)5")
     private Integer nStatus;
 
     /**

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

@@ -39,6 +39,10 @@ public class TRecharge implements Serializable {
     @ApiModelProperty("用户openid")
     private String cOpenId;
 
+    @TableField("pay_status")
+    @ApiModelProperty("支付状态 \\r\\n-1:待支付\\r\\n-2:退款\\r\\n1:已支付")
+    private Integer payStatus;
+
     /**
      * 充值单号
      */

+ 22 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TTxRecord.java

@@ -35,6 +35,13 @@ public class TTxRecord implements Serializable {
     @ApiModelProperty("cId")
     private String cId;
 
+    /**
+     * 提现单号
+     */
+    @TableField("cash_no")
+    @ApiModelProperty("提现单号")
+    private String cashNo;
+
     /**
      * 提现用户
      */
@@ -70,6 +77,21 @@ public class TTxRecord implements Serializable {
     @ApiModelProperty("姓名")
     private String cName;
 
+    /**
+     * 开户行
+     */
+    @TableField("opening_bank")
+    @ApiModelProperty("开户行")
+    private String openingBank;
+
+    /**
+     * 银行账号
+     */
+    @TableField("bank_account")
+    @ApiModelProperty("银行账号")
+    private String bankAccount;
+
+
     /**
      * 提现图片
      */

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

@@ -38,6 +38,9 @@ public class TWxUser implements Serializable {
     @ApiModelProperty("微信小程序openId")
     private String cOpenid;
 
+    @TableField("role")
+    @ApiModelProperty("角色:0普通,1技师")
+    private Integer role;
     /**
      * 微信小程序登录会话密钥
      */
@@ -129,6 +132,10 @@ public class TWxUser implements Serializable {
     @ApiModelProperty("默认地址")
     private String cMrAddressId;
 
+    @TableField("create_time")
+    @ApiModelProperty("系统创建时间")
+    private String createTime;
+
     @ApiModelProperty("是否删除0否1是")
     @TableLogic
     private Integer isDelete;

+ 101 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TbFile.java

@@ -0,0 +1,101 @@
+package com.ylx.massage.domain;
+
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * (TbFile)表实体类
+ *
+ * @author makejava
+ * @since 2024-04-27 17:12:45
+ */
+@SuppressWarnings("serial")
+public class TbFile extends Model<TbFile> {
+    //文件id
+    private String id;
+    //文件md5值
+    private String md5;
+    //虚拟文件路径
+    private String fileUrl;
+    //文件名
+    private String fileName;
+    //系统创建时间
+    private Date createTime;
+    //系统修改时间
+    private Date updateTime;
+    //是否删除0否1是
+    @TableLogic
+    private Integer isDelete;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getMd5() {
+        return md5;
+    }
+
+    public void setMd5(String md5) {
+        this.md5 = md5;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+    /**
+     * 获取主键值
+     *
+     * @return 主键值
+     */
+    @Override
+    public Serializable pkVal() {
+        return this.id;
+    }
+}
+

+ 206 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/YlxAlarm.java

@@ -0,0 +1,206 @@
+package com.ylx.massage.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 报警记录表(YlxAlarm)实体类
+ *
+ * @author makejava
+ * @since 2024-04-28 09:19:05
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName(value = "ylx_alarm",autoResultMap = true)
+@ApiModel(value = "YlxAlarm", description = "报警记录")
+public class YlxAlarm implements Serializable {
+    private static final long serialVersionUID = -78310583967774907L;
+    /**
+     * id
+     */
+    @TableId("id")
+    @ApiModelProperty("id")
+    private String id;
+    /**
+     * 客户姓名
+     */
+    @ApiModelProperty("客户姓名")
+    private String userName;
+
+
+    @ApiModelProperty("订单号")
+    private String orderNo;
+    /**
+     * 客户电话
+     */
+    @ApiModelProperty("客户电话")
+    private String userPhone;
+    /**
+     * 地点
+     */
+    @ApiModelProperty("地点")
+    private String address;
+    /**
+     * 技师姓名
+     */
+    @ApiModelProperty("技师姓名")
+    private String jsName;
+    /**
+     * 技师电话
+     */
+    @ApiModelProperty("技师电话")
+    private String jsPhone;
+    /**
+     * 技师id
+     */
+    @ApiModelProperty("技师id")
+    private String jsId;
+    /**
+     * 用户openId
+     */
+    @ApiModelProperty("用户openId")
+    private String openId;
+    /**
+     * 0待处理;1已处理
+     */
+    @ApiModelProperty("0待处理;1已处理")
+    private Integer alarmStatus;
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String note;
+    /**
+     * 系统创建时间
+     */
+    @ApiModelProperty("系统创建时间")
+    private Date createTime;
+    /**
+     * 系统修改时间
+     */
+    @ApiModelProperty("系统修改时间")
+    private Date updateTime;
+    /**
+     * 是否删除0否1是
+     */
+    @ApiModelProperty("是否删除0否1是")
+    @TableLogic
+    private Integer isDelete;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserPhone() {
+        return userPhone;
+    }
+
+    public void setUserPhone(String userPhone) {
+        this.userPhone = userPhone;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getJsName() {
+        return jsName;
+    }
+
+    public void setJsName(String jsName) {
+        this.jsName = jsName;
+    }
+
+    public String getJsPhone() {
+        return jsPhone;
+    }
+
+    public void setJsPhone(String jsPhone) {
+        this.jsPhone = jsPhone;
+    }
+
+    public String getJsId() {
+        return jsId;
+    }
+
+    public void setJsId(String jsId) {
+        this.jsId = jsId;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public Integer getAlarmStatus() {
+        return alarmStatus;
+    }
+
+    public void setAlarmStatus(Integer alarmStatus) {
+        this.alarmStatus = alarmStatus;
+    }
+
+    public String getNote() {
+        return note;
+    }
+
+    public void setNote(String note) {
+        this.note = note;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Integer getIsDelete() {
+        return isDelete;
+    }
+
+    public void setIsDelete(Integer isDelete) {
+        this.isDelete = isDelete;
+    }
+
+}
+

+ 81 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/TWxUserVo.java

@@ -0,0 +1,81 @@
+package com.ylx.massage.domain.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.ylx.massage.domain.TAddress;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 微信用户表
+ */
+@Getter
+@Setter
+@Accessors(chain = true)
+@TableName(value = "t_wx_user",autoResultMap = true)
+@ApiModel(value = "TWxUser", description = "微信用户表")
+public class TWxUserVo extends TAddress implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 微信小程序openId
+     */
+    @TableField("c_openid")
+    @ApiModelProperty("微信小程序openId")
+    private String cOpenid;
+
+    /**
+     * 电话号码
+     */
+    @TableField("c_phone")
+    @ApiModelProperty("电话号码")
+    private String cPhone;
+
+    /**
+     * 昵称
+     */
+    @TableField("c_nick_name")
+    @ApiModelProperty("昵称")
+    private String cNickName;
+
+    /**
+     * 消费金额
+     */
+    @TableField("d_money")
+    @ApiModelProperty("消费金额")
+    private BigDecimal dMoney;
+
+    /**
+     * 下单次数
+     */
+    @TableField("n_num")
+    @ApiModelProperty("下单次数")
+    private Integer nNum;
+
+    /**
+     * 当前余额
+     */
+    @TableField("d_balance")
+    @ApiModelProperty("当前余额")
+    private BigDecimal dBalance;
+
+    /**
+     * 总收益
+     */
+    @TableField("d_all_money")
+    @ApiModelProperty("总收益")
+    private BigDecimal dAllMoney;
+
+}

+ 56 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/enums/BillTypeEnum.java

@@ -0,0 +1,56 @@
+package com.ylx.massage.enums;
+
+import com.ylx.common.utils.StringUtils;
+import lombok.Getter;
+import org.apache.commons.compress.utils.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author jianlong
+ * @date 2024-03-27 11:51
+ * 业务类型枚举
+ */
+@Getter
+public enum BillTypeEnum {
+
+    //进行中(待接单,已接单,已到达,服务中)
+    RECHARGE(1, "充值"),
+    BALANCE_PAYMENT(2, "余额支付"),
+    INCOME(3, "技师收益"),
+    WITHDRAWAL(4, "技师提现");
+
+
+
+    private final Integer code;
+    private final String info;
+
+    BillTypeEnum(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+    public static List<Enumproject> getStatusEnum() {
+
+        ArrayList<Enumproject> objects = Lists.newArrayList();
+        for (BillTypeEnum value : BillTypeEnum.values()) {
+            Enumproject enumproject = new Enumproject();
+            enumproject.setInfo(value.getInfo());
+            enumproject.setCode(value.getCode());
+            objects.add(enumproject);
+
+        }
+        return objects;
+    }
+
+    public static String getDescByCode(Integer code) {
+        for (BillTypeEnum value : BillTypeEnum.values()) {
+            if(value.getCode().equals(code)){
+                return value.getInfo();
+            }
+        }
+        return StringUtils.EMPTY;
+    }
+
+}

+ 3 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/enums/JsStatusEnum.java

@@ -16,8 +16,9 @@ public enum JsStatusEnum {
     POST_NOT_ON_DUTY(-1, "未上岗"),
 
     /*** 技师审核状态*/
-    JS_NOT_PASS(0, "未通过"),
-    JS_PASS(1, "已通过");
+    JS_NOT_PASS(0, "待审核"),
+    JS_PASS(1, "已通过"),
+    JS_RETURN(2, "已退回");
 
 
     private final Integer code;

+ 12 - 14
nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnum.java

@@ -1,6 +1,7 @@
 package com.ylx.massage.enums;
 
 import com.ylx.common.utils.StringUtils;
+import lombok.Getter;
 import org.apache.commons.compress.utils.Lists;
 
 import java.util.ArrayList;
@@ -11,16 +12,21 @@ import java.util.List;
  * @date 2024-03-27 11:51
  * 订单状态枚举
  */
+@Getter
 public enum OrderStatusEnum {
 
     ALL(100, "全部"),
-//    WAIT_JD(0, "待接单"),
-    SERVICE(1, "进行中"),
-    WAIT_EVALUATE(2, "待评价"),
-    COMPLETE(3, "已完成"),
+
+    //进行中(待接单,已接单,已到达,服务中)
+    WAIT_JD(0, "待接单"),
+    RECEIVED_ORDER(1, "已接单"),
+    ARRIVED(2, "已到达"),
+    SERVICE(3, "服务中"),
+    WAIT_EVALUATE(4, "待评价"),
+    COMPLETE(5, "已完成"),
     WAIT_PAY(-1, "待付款"),
-    CANCEL(-2, "已取消");
-//    REFUSE(-3, "已拒绝");
+    CANCEL(-2, "已取消"),
+    REFUSE(-3, "已拒绝");
 
 
     private final Integer code;
@@ -53,12 +59,4 @@ public enum OrderStatusEnum {
         return StringUtils.EMPTY;
     }
 
-    public Integer getCode() {
-        return code;
-    }
-
-    public String getInfo() {
-        return info;
-    }
-
 }

+ 63 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/enums/OrderStatusEnumVo.java

@@ -0,0 +1,63 @@
+package com.ylx.massage.enums;
+
+import com.ylx.common.utils.StringUtils;
+import lombok.Getter;
+import org.apache.commons.compress.utils.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author jianlong
+ * @date 2024-03-27 11:51
+ * 订单状态枚举
+ */
+@Getter
+public enum OrderStatusEnumVo {
+
+    ALL(100, "全部",""),
+
+    //进行中(待接单,已接单,已到达,服务中 0123)
+    SERVICE(10, "进行中","    WAIT_JD(0, \"待接单\"),\n" +
+            "    RECEIVED_ORDER(1, \"已接单\"),\n" +
+            "    ARRIVED(2, \"已到达\"),\n" +
+            "    SERVICE(3, \"服务中\"),"),
+    WAIT_EVALUATE(4, "待评价",""),
+    COMPLETE(5, "已完成",""),
+    WAIT_PAY(-1, "待付款",""),
+    CANCEL(-10, "已取消","已取消-2,已拒绝-3");
+
+
+    private final Integer code;
+    private final String info;
+    private final String desc;
+
+    OrderStatusEnumVo(Integer code, String info, String desc) {
+        this.code = code;
+        this.info = info;
+        this.desc = desc;
+    }
+
+    public static List<Enumproject> getStatusEnum() {
+
+        ArrayList<Enumproject> objects = Lists.newArrayList();
+        for (OrderStatusEnumVo value : OrderStatusEnumVo.values()) {
+            Enumproject enumproject = new Enumproject();
+            enumproject.setInfo(value.getInfo());
+            enumproject.setCode(value.getCode());
+            objects.add(enumproject);
+
+        }
+        return objects;
+    }
+
+    public static String getDescByCode(Integer code) {
+        for (OrderStatusEnumVo value : OrderStatusEnumVo.values()) {
+            if(value.getCode().equals(code)){
+                return value.getInfo();
+            }
+        }
+        return StringUtils.EMPTY;
+    }
+
+}

+ 36 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TConsumptionLogMapper.java

@@ -0,0 +1,36 @@
+package com.ylx.massage.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.massage.domain.TConsumptionLog;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * 个人钱包记录表(TConsumptionLog)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-04-25 16:50:31
+ */
+public interface TConsumptionLogMapper extends BaseMapper<TConsumptionLog> {
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TConsumptionLog> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TConsumptionLog> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TConsumptionLog> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TConsumptionLog> entities);
+
+}
+

+ 4 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TWxUserMapper.java

@@ -1,13 +1,16 @@
 package com.ylx.massage.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ylx.massage.domain.vo.TWxUserVo;
 import org.apache.ibatis.annotations.Mapper;
 import com.ylx.massage.domain.TWxUser;
+import org.apache.ibatis.annotations.Param;
 
 /**
  *  Mapper 接口
  */
 @Mapper
 public interface TWxUserMapper extends BaseMapper<TWxUser> {
-
+    Page<TWxUserVo> selectTWxUserList(@Param("page") Page<TWxUserVo> page, @Param("user") TWxUserVo user);
 }

+ 36 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TbFileMapper.java

@@ -0,0 +1,36 @@
+package com.ylx.massage.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.massage.domain.TbFile;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (TbFile)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-04-27 17:12:45
+ */
+public interface TbFileMapper extends BaseMapper<TbFile> {
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TbFile> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<TbFile> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<TbFile> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<TbFile> entities);
+
+}
+

+ 79 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/YlxAlarmMapper.java

@@ -0,0 +1,79 @@
+package com.ylx.massage.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.massage.domain.YlxAlarm;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.Pageable;
+
+import java.util.List;
+
+/**
+ * 报警记录表(YlxAlarm)表数据库访问层
+ *
+ * @author makejava
+ * @since 2024-04-28 09:19:04
+ */
+public interface YlxAlarmMapper extends BaseMapper<YlxAlarm> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    YlxAlarm queryById(String id);
+
+    /**
+     * 查询指定行数据
+     *
+     * @param ylxAlarm 查询条件
+     * @param pageable 分页对象
+     * @return 对象列表
+     */
+    List<YlxAlarm> queryAllByLimit(YlxAlarm ylxAlarm, @Param("pageable") Pageable pageable);
+
+    /**
+     * 统计总行数
+     *
+     * @param ylxAlarm 查询条件
+     * @return 总行数
+     */
+    long count(YlxAlarm ylxAlarm);
+
+
+    /**
+     * 批量新增数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<YlxAlarm> 实例对象列表
+     * @return 影响行数
+     */
+    int insertBatch(@Param("entities") List<YlxAlarm> entities);
+
+    /**
+     * 批量新增或按主键更新数据(MyBatis原生foreach方法)
+     *
+     * @param entities List<YlxAlarm> 实例对象列表
+     * @return 影响行数
+     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常,请自行校验入参
+     */
+    int insertOrUpdateBatch(@Param("entities") List<YlxAlarm> entities);
+
+    /**
+     * 修改数据
+     *
+     * @param ylxAlarm 实例对象
+     * @return 影响行数
+     */
+    int update(YlxAlarm ylxAlarm);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 影响行数
+     */
+    int deleteById(String id);
+
+}
+

+ 15 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TConsumptionLogService.java

@@ -0,0 +1,15 @@
+package com.ylx.massage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.massage.domain.TConsumptionLog;
+
+/**
+ * 个人钱包记录表(TConsumptionLog)表服务接口
+ *
+ * @author makejava
+ * @since 2024-04-25 16:50:31
+ */
+public interface TConsumptionLogService extends IService<TConsumptionLog> {
+
+}
+

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

@@ -19,4 +19,8 @@ public interface TJsService extends IService<TJs> {
     TJs getByJsId(String s, String openId);
 
     boolean wxUpdateJs(TJs js);
+
+    boolean auditing(TJs js);
+
+    boolean updateLocation(TJs js);
 }

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TOrderService.java

@@ -38,6 +38,9 @@ public interface TOrderService extends IService<TOrder> {
      */
     public Boolean cancle(TOrder order);
 
+
+    public TOrder getByNo(String orderNo);
+
     /**
      * 分页查询领取数据
      * @param page

+ 5 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/TRechargeService.java

@@ -10,5 +10,9 @@ import com.ylx.massage.domain.TWxUser;
  */
 public interface TRechargeService extends IService<TRecharge> {
 
-    R recharge(TRecharge recharge);
+    TRecharge recharge(TRecharge recharge);
+
+
+
+    TRecharge increaseAmount(String rechargeNo);
 }

+ 1 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TTxRecordService.java

@@ -9,4 +9,5 @@ import com.ylx.massage.domain.TTxRecord;
  */
 public interface TTxRecordService extends IService<TTxRecord> {
 
+    TTxRecord applicationCash(TTxRecord record);
 }

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TWxUserService.java

@@ -1,7 +1,9 @@
 package com.ylx.massage.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.massage.domain.TWxUser;
+import com.ylx.massage.domain.vo.TWxUserVo;
 
 
 /**
@@ -11,4 +13,5 @@ public interface TWxUserService extends IService<TWxUser> {
 
     public TWxUser getByOpenId(String openId);
 
+    Page<TWxUserVo> getUserList(Page<TWxUserVo> page, TWxUserVo user);
 }

+ 17 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TbFileService.java

@@ -0,0 +1,17 @@
+package com.ylx.massage.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.massage.domain.TbFile;
+
+/**
+ * (TbFile)表服务接口
+ *
+ * @author makejava
+ * @since 2024-04-27 17:12:46
+ */
+public interface TbFileService extends IService<TbFile> {
+
+    TbFile getByMd5(String md5);
+}
+

+ 63 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/YlxAlarmService.java

@@ -0,0 +1,63 @@
+package com.ylx.massage.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.massage.domain.YlxAlarm;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+
+/**
+ * 报警记录表(YlxAlarm)表服务接口
+ *
+ * @author makejava
+ * @since 2024-04-28 09:19:05
+ */
+public interface YlxAlarmService extends IService<YlxAlarm> {
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    YlxAlarm queryById(String id);
+
+    /**
+     * 分页查询
+     *
+     * @param ylxAlarm    筛选条件
+     * @param pageRequest 分页对象
+     * @return 查询结果
+     */
+    Page<YlxAlarm> queryByPage(YlxAlarm ylxAlarm, PageRequest pageRequest);
+
+    /**
+     * 新增数据
+     *
+     * @param ylxAlarm 实例对象
+     * @return 实例对象
+     */
+
+    /**
+     * 修改数据
+     *
+     * @param ylxAlarm 实例对象
+     * @return 实例对象
+     */
+    YlxAlarm update(YlxAlarm ylxAlarm);
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    boolean deleteById(String id);
+
+    /**
+     * 添加报警记录
+     * @param ylxAlarm
+     * @return
+     */
+    YlxAlarm addAlarm(YlxAlarm ylxAlarm);
+}

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TConsumptionLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.ylx.massage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.massage.domain.TConsumptionLog;
+import com.ylx.massage.mapper.TConsumptionLogMapper;
+import com.ylx.massage.service.TConsumptionLogService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 个人钱包记录表(TConsumptionLog)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-04-25 16:50:31
+ */
+@Service("tConsumptionLogService")
+public class TConsumptionLogServiceImpl extends ServiceImpl<TConsumptionLogMapper, TConsumptionLog> implements TConsumptionLogService {
+
+
+}
+

+ 40 - 9
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java

@@ -9,20 +9,15 @@ 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.StringUtils;
-import com.ylx.massage.domain.TCollect;
-import com.ylx.massage.domain.TComment;
-import com.ylx.massage.domain.TJs;
-import com.ylx.massage.domain.TXiangmu;
+import com.ylx.massage.domain.*;
 import com.ylx.massage.domain.vo.TJsVo;
 import com.ylx.massage.enums.JsStatusEnum;
 import com.ylx.massage.mapper.TJsMapper;
-import com.ylx.massage.service.TCollectService;
-import com.ylx.massage.service.TCommentService;
-import com.ylx.massage.service.TJsService;
-import com.ylx.massage.service.TXiangmuService;
+import com.ylx.massage.service.*;
 import com.ylx.massage.utils.LocationUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
@@ -53,6 +48,9 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
     @Resource
     private TCommentService commentService;
 
+    @Resource
+    private TWxUserService wxUserService;
+
     @Override
     public Page<TJs> getAll(Page<TJs> page, TJsVo param) {
         return mapper.getAll(page, param);
@@ -92,6 +90,39 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         return this.updateById(js);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean auditing(TJs js) {
+        LambdaQueryWrapper<TJs> jsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        jsLambdaQueryWrapper.eq(TJs::getId, js.getId()).eq(TJs::getnTong, JsStatusEnum.JS_NOT_PASS.getCode());
+        js.setnTong(JsStatusEnum.JS_PASS.getCode());
+
+        LambdaQueryWrapper<TWxUser> wxLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        wxLambdaQueryWrapper.eq(TWxUser::getcOpenid, js.getcOpenId());
+        TWxUser tWxUser = new TWxUser();
+        tWxUser.setRole(1);
+        wxUserService.update(tWxUser, wxLambdaQueryWrapper);
+        return this.update(js, jsLambdaQueryWrapper);
+    }
+
+    @Override
+    public boolean updateLocation(TJs js) {
+
+        if (StringUtils.isBlank(js.getcOpenId())) {
+            throw new ServiceException("技师OpenID不能为空");
+        }
+        if (StringUtils.isBlank(js.getcAddress())) {
+            throw new ServiceException("地址不能为空");
+        }
+        JSONObject jsonObject = new JSONObject(js.getcAddress());
+        Object latitude = jsonObject.get("latitude");
+        Object longitude = jsonObject.get("longitude");
+        locationUtil.geoAdd(js.getcOpenId(), Double.parseDouble(longitude.toString()), Double.parseDouble(latitude.toString()));
+        LambdaQueryWrapper<TJs> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        objectLambdaQueryWrapper.eq(TJs::getcOpenId, js.getcOpenId());
+        return this.update(js, objectLambdaQueryWrapper);
+
+    }
     @Override
     public TJs getByJsId(String jsId, String openId) {
         if (jsId == null || jsId.trim().isEmpty()) {
@@ -118,7 +149,7 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
         LambdaQueryWrapper<TComment> commentLambdaQueryWrapper = new LambdaQueryWrapper<>();
         commentLambdaQueryWrapper.eq(TComment::getcJsid, jsId);
         List<TComment> list = commentService.list(commentLambdaQueryWrapper);
-        if(CollectionUtil.isNotEmpty(list)){
+        if (CollectionUtil.isNotEmpty(list)) {
             js.setComments(list);
         }
         //是否收藏

+ 48 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -3,6 +3,7 @@ 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.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -11,10 +12,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.constant.MassageConstants;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.massage.domain.*;
+import com.ylx.massage.enums.BillTypeEnum;
 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.MassageUtil;
 import com.ylx.massage.utils.OrderNumberGenerator;
 import org.apache.commons.compress.utils.Lists;
 import org.springframework.stereotype.Service;
@@ -53,6 +56,10 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     @Resource
     private TAddressService addressService;
 
+    @Resource
+    private TConsumptionLogService consumptionLogService;
+
+
 //    @Resource
 //    private TInfoService infoService;
 
@@ -70,6 +77,13 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         if (order.getcGoods().isEmpty()) {
             throw new ServiceException("请选择项目");
         }
+        //计算车费
+        if (order.getDistance() != null) {
+            BigDecimal bigDecimal = MassageUtil.calculateTaxiFare(order.getDistance());
+            order.setFare(bigDecimal.setScale(MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP).toString());
+//            throw new ServiceException("距离不能为空");
+        }
+
         //获取用户默认地址
         TAddress address = addressService.getByOpenId(order.getcOpenId());
         if (address == null) {
@@ -118,6 +132,14 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             paramUser.setnNum(user.getnNum() + MassageConstants.INTEGER_ZERO);
             paramUser.setId(user.getId());
             wxUserService.updateById(paramUser);
+            //增加消费记录
+            TConsumptionLog tConsumptionLog = new TConsumptionLog();
+            tConsumptionLog.setAmount(orderNew.getdTotalMoney().negate());
+            tConsumptionLog.setBillNo(orderNew.getOrderNo());
+            tConsumptionLog.setOpenId(orderNew.getcOpenId());
+            tConsumptionLog.setBillType(BillTypeEnum.BALANCE_PAYMENT.getCode());
+            tConsumptionLog.setNote("余额支付");
+            consumptionLogService.save(tConsumptionLog);
             // 更新项目数据
             JSONArray objects = orderNew.getcGoods();
             objects.forEach(item -> {
@@ -130,10 +152,14 @@ 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.SERVICE.getCode());
+            orderParam.setnStatus(OrderStatusEnum.WAIT_JD.getCode());
+            //加钟的订单支付完直接服务中
+            if (StringUtils.isNotBlank(order.getParentNo())) {
+                orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
+            }
+//            orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
             //更新及技师状态
-            updateJs (orderNew);
+            updateJs(orderNew);
             return updateById(orderParam);
         }
     }
@@ -176,7 +202,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);
     }
 
@@ -211,6 +237,15 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         jsUser.setdAllMoney(jsUser.getdAllMoney().add(multiply));
         wxUserService.updateById(jsUser);
 
+        //增加消费记录
+        TConsumptionLog tConsumptionLog = new TConsumptionLog();
+        tConsumptionLog.setAmount(multiply);
+        tConsumptionLog.setBillNo(orderNew.getOrderNo());
+        tConsumptionLog.setOpenId(jsUser.getcOpenid());
+        tConsumptionLog.setBillType(BillTypeEnum.INCOME.getCode());
+        tConsumptionLog.setNote("技师收益");
+        consumptionLogService.save(tConsumptionLog);
+
 //        // 如果该技师有推荐人员
 //        if(StringUtils.isNotBlank(jsUser.getcUpUser())){
 //            // 获取技师上级对应的用户
@@ -285,6 +320,12 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 
     }
 
+    @Override
+    public TOrder getByNo(String orderNo) {
+        LambdaQueryWrapper<TOrder> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        return this.getOne(objectLambdaQueryWrapper.eq(TOrder::getOrderNo, orderNo));
+    }
+
     private TOrder gettOrder(TOrder order) {
         LambdaUpdateWrapper<TOrder> objectLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
         objectLambdaUpdateWrapper.eq(TOrder::getOrderNo, order.getOrderNo());
@@ -317,15 +358,15 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         TOrder orderNew = this.getById(order);
 
         // 检查订单对应的技师是否存在
-        updateJs (orderNew);
+//        updateJs (orderNew);
         // 更新订单状态
         TOrder orderParam = new TOrder();
         orderParam.setcId(order.getcId());
-        orderParam.setnStatus(OrderStatusEnum.SERVICE.getCode());
+        orderParam.setnStatus(OrderStatusEnum.RECEIVED_ORDER.getCode());
         this.updateById(orderParam);
     }
 
-    private void updateJs (TOrder orderNew) {
+    private void updateJs(TOrder orderNew) {
         TJs js = jsService.getById(orderNew.getcJsId());
         if (js == null) {
             throw new IllegalStateException("无法找到对应的技师");

+ 71 - 5
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TRechargeServiceImpl.java

@@ -1,26 +1,53 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ijpay.core.IJPayHttpResponse;
+import com.ijpay.core.enums.RequestMethodEnum;
+import com.ijpay.core.kit.PayKit;
+import com.ijpay.core.kit.WxPayKit;
+import com.ijpay.core.utils.DateTimeZoneUtil;
+import com.ijpay.wxpay.WxPayApi;
+import com.ijpay.wxpay.enums.WxDomainEnum;
+import com.ijpay.wxpay.enums.v3.BasePayApiEnum;
+import com.ijpay.wxpay.model.v3.Amount;
+import com.ijpay.wxpay.model.v3.Payer;
+import com.ijpay.wxpay.model.v3.UnifiedOrderModel;
+import com.ylx.common.config.WxPayConfig;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.common.utils.StringUtils;
+import com.ylx.massage.domain.TConsumptionLog;
 import com.ylx.massage.domain.TRecharge;
 import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.mapper.TRechargeMapper;
+import com.ylx.massage.service.TConsumptionLogService;
 import com.ylx.massage.service.TRechargeService;
 import com.ylx.massage.service.TWxUserService;
 import com.ylx.massage.utils.OrderNumberGenerator;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Map;
+
+import static com.ylx.common.constant.HttpStatus.SUCCESS;
 
 
 /**
  * 充值记录表 服务实现类
  */
 @Service
+@Slf4j
 public class TRechargeServiceImpl extends ServiceImpl<TRechargeMapper, TRecharge> implements TRechargeService {
 
     @Resource
@@ -28,24 +55,63 @@ public class TRechargeServiceImpl extends ServiceImpl<TRechargeMapper, TRecharge
 
     @Resource
     private OrderNumberGenerator generator;
+
+    @Resource
+    private TConsumptionLogService consumptionLogService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R recharge(TRecharge recharge) {
-
+    public TRecharge recharge(TRecharge recharge) {
         //增加充值记录
-        if(StringUtils.isBlank(recharge.getcOpenId())){
+        if (StringUtils.isBlank(recharge.getcOpenId())) {
             throw new ServiceException("openId不能为空");
         }
+        if (null == recharge.getdMoney() || recharge.getdMoney().compareTo(BigDecimal.ZERO) <= 0) {
+            throw new ServiceException("充值金额不能为空");
+        }
+        LambdaQueryWrapper<TRecharge> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TRecharge::getcOpenId, recharge.getcOpenId()).eq(TRecharge::getPayStatus, -1).eq(TRecharge::getdMoney, recharge.getdMoney());
+        TRecharge one = getOne(queryWrapper);
+        if (one != null) {
+            log.info("未支付的充值记录,{}",one.getRechargeNo());
+            return one;
+        }
         recharge.setRechargeNo(generator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_RECHAR));
         recharge.setDtCreateTime(LocalDateTime.now());
         save(recharge);
-
         //todo 调用微信支付成功后增加账户金额
+        return recharge;
+    }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TRecharge increaseAmount(String rechargeNo) {
+        //增加个人账户金额
+        TRecharge recharge = getByRechargeNo(rechargeNo);
+        if(recharge == null){
+            log.error("未支付的充值记录不存在,单号:{}",rechargeNo);
+            return null;
+        }
+        //修改充值状态
+        recharge.setPayStatus(1);
+        this.updateById(recharge);
         //增加个人账户金额
         TWxUser user = wxUserService.getByOpenId(recharge.getcOpenId());
         user.setdBalance(user.getdBalance().add(recharge.getdMoney()));
         wxUserService.updateById(user);
-        return R.ok();
+        //增加消费记录
+        TConsumptionLog tConsumptionLog = new TConsumptionLog();
+        tConsumptionLog.setAmount(recharge.getdMoney());
+        tConsumptionLog.setBillNo(rechargeNo);
+        tConsumptionLog.setOpenId(recharge.getcOpenId());
+        tConsumptionLog.setBillType(1);
+        tConsumptionLog.setNote("微信充值");
+        consumptionLogService.save(tConsumptionLog);
+        log.info("微信充值成功,充值单号:{},充值金额:{},充值OpenId:{}",rechargeNo,recharge.getdMoney(),user.getcOpenid());
+        return recharge;
+    }
+
+    private TRecharge getByRechargeNo(String rechargeNo) {
+        return getOne(new LambdaQueryWrapper<TRecharge>().eq(TRecharge::getRechargeNo, rechargeNo).eq(TRecharge::getPayStatus, -1));
     }
 }

+ 70 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TTxRecordServiceImpl.java

@@ -1,10 +1,27 @@
 package com.ylx.massage.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.exception.ServiceException;
+import com.ylx.massage.domain.TConsumptionLog;
+import com.ylx.massage.domain.TJs;
 import com.ylx.massage.domain.TTxRecord;
+import com.ylx.massage.domain.TWxUser;
+import com.ylx.massage.enums.TTxRecordEnum;
 import com.ylx.massage.mapper.TTxRecordMapper;
+import com.ylx.massage.service.TConsumptionLogService;
+import com.ylx.massage.service.TJsService;
 import com.ylx.massage.service.TTxRecordService;
+import com.ylx.massage.service.TWxUserService;
+import com.ylx.massage.utils.OrderNumberGenerator;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 
 /**
@@ -13,4 +30,57 @@ import org.springframework.stereotype.Service;
 @Service
 public class TTxRecordServiceImpl extends ServiceImpl<TTxRecordMapper, TTxRecord> implements TTxRecordService {
 
+    @Resource
+    private TWxUserService wxUserService;
+
+    @Resource
+    private OrderNumberGenerator orderNumberGenerator;
+
+    @Resource
+    private TConsumptionLogService consumptionLogService;
+
+    @Resource
+    private TJsService jsService;
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TTxRecord applicationCash(TTxRecord record) {
+        if(StringUtils.isBlank(record.getcOpenId())){
+            throw new ServiceException("OpenID不能为空");
+        }
+        if(StringUtils.isBlank(record.getOpeningBank())){
+            throw new ServiceException("开户行不能为空");
+        }
+        if(StringUtils.isBlank(record.getBankAccount())){
+            throw new ServiceException("银行账号不能为空");
+        }
+        if(null == record.getdPrice() || record.getdPrice().compareTo(BigDecimal.ZERO) <= 0){
+            throw new ServiceException("体现金额不能为空");
+        }
+
+        LambdaQueryWrapper<TJs> mhCompanyLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        mhCompanyLambdaQueryWrapper.eq(TJs::getcOpenId, record.getcOpenId());
+        TJs js = jsService.getOne(mhCompanyLambdaQueryWrapper);
+
+        record.setcName(js.getcName());
+        record.setcPhone(js.getcPhone());
+        record.setnStatus(TTxRecordEnum.PASS_ING.getCode());
+        record.setDtCreateTime(LocalDateTime.now());
+        record.setCashNo(orderNumberGenerator.generateNextOrderNumber(OrderNumberGenerator.KEY_PREFIX_CASH));
+        UpdateWrapper<TWxUser> businessUpdateWrapper = new UpdateWrapper<>();
+        businessUpdateWrapper.lambda().eq(TWxUser::getcOpenid, record.getcOpenId());
+        businessUpdateWrapper.lambda().setSql(" d_balance = d_balance - " + record.getdPrice());
+        wxUserService.update(businessUpdateWrapper);
+
+        //余额记录
+        TConsumptionLog tConsumptionLog = new TConsumptionLog();
+        tConsumptionLog.setAmount(record.getdPrice().negate());
+        tConsumptionLog.setBillNo(record.getCashNo());
+        tConsumptionLog.setOpenId(record.getcOpenId());
+        tConsumptionLog.setBillType(4);
+        tConsumptionLog.setNote("提现");
+        consumptionLogService.save(tConsumptionLog);
+
+        this.save(record);
+        return record;
+    }
 }

+ 22 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TWxUserServiceImpl.java

@@ -1,13 +1,19 @@
 package com.ylx.massage.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.common.utils.StringUtils;
 import com.ylx.massage.domain.TWxUser;
+import com.ylx.massage.domain.vo.TWxUserVo;
 import com.ylx.massage.mapper.TWxUserMapper;
 import com.ylx.massage.service.TWxUserService;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 
 
 /**
@@ -22,4 +28,20 @@ public class TWxUserServiceImpl extends ServiceImpl<TWxUserMapper, TWxUser> impl
         wrapper.eq(TWxUser::getcOpenid,openId);
         return getOne(wrapper);
     }
+
+    @Override
+    public Page<TWxUserVo> getUserList(Page<TWxUserVo> page, TWxUserVo user) {
+
+        Page<TWxUserVo> tWxUserVoPage = baseMapper.selectTWxUserList(page, user);
+        List<TWxUserVo> records = tWxUserVoPage.getRecords();
+        if(CollectionUtil.isNotEmpty(records)){
+            records.forEach(item->{
+                if(StringUtils.isBlank(item.getCPhone())){
+                    item.setCPhone(Optional.ofNullable(item.getPhone()).orElse(StringUtils.EMPTY));
+                }
+            });
+            tWxUserVoPage.setRecords(records);
+        }
+        return tWxUserVoPage;
+    }
 }

+ 27 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TbFileServiceImpl.java

@@ -0,0 +1,27 @@
+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.massage.domain.TbFile;
+import com.ylx.massage.mapper.TbFileMapper;
+import org.springframework.stereotype.Service;
+import com.ylx.massage.service.TbFileService;
+
+/**
+ * (TbFile)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-04-27 17:12:46
+ */
+@Service("tbFileService")
+public class TbFileServiceImpl extends ServiceImpl<TbFileMapper, TbFile> implements TbFileService {
+
+    @Override
+    public TbFile getByMd5(String md5) {
+        LambdaQueryWrapper<TbFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TbFile::getMd5,md5);
+        return this.getOne(queryWrapper);
+    }
+}
+

+ 121 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/YlxAlarmServiceImpl.java

@@ -0,0 +1,121 @@
+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.exception.ServiceException;
+import com.ylx.common.utils.StringUtils;
+import com.ylx.massage.domain.TJs;
+import com.ylx.massage.domain.TOrder;
+import com.ylx.massage.domain.YlxAlarm;
+import com.ylx.massage.mapper.YlxAlarmMapper;
+import com.ylx.massage.service.TJsService;
+import com.ylx.massage.service.TOrderService;
+import com.ylx.massage.service.YlxAlarmService;
+import org.springframework.stereotype.Service;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+
+import javax.annotation.Resource;
+
+/**
+ * 报警记录表(YlxAlarm)表服务实现类
+ *
+ * @author makejava
+ * @since 2024-04-28 09:19:05
+ */
+@Service("ylxAlarmService")
+public class YlxAlarmServiceImpl extends ServiceImpl<YlxAlarmMapper, YlxAlarm> implements YlxAlarmService {
+    @Resource
+    private YlxAlarmMapper ylxAlarmDao;
+
+    @Resource
+    private TOrderService orderService;
+
+    @Resource
+    private TJsService jsService;
+
+    /**
+     * 通过ID查询单条数据
+     *
+     * @param id 主键
+     * @return 实例对象
+     */
+    @Override
+    public YlxAlarm queryById(String id) {
+        return this.ylxAlarmDao.queryById(id);
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param ylxAlarm    筛选条件
+     * @param pageRequest 分页对象
+     * @return 查询结果
+     */
+    @Override
+    public Page<YlxAlarm> queryByPage(YlxAlarm ylxAlarm, PageRequest pageRequest) {
+        long total = this.ylxAlarmDao.count(ylxAlarm);
+        return new PageImpl<>(this.ylxAlarmDao.queryAllByLimit(ylxAlarm, pageRequest), pageRequest, total);
+    }
+
+    /**
+     * 新增数据
+     *
+     * @param ylxAlarm 实例对象
+     * @return 实例对象
+     */
+
+    /**
+     * 修改数据
+     *
+     * @param ylxAlarm 实例对象
+     * @return 实例对象
+     */
+    @Override
+    public YlxAlarm update(YlxAlarm ylxAlarm) {
+        this.ylxAlarmDao.update(ylxAlarm);
+        return this.queryById(ylxAlarm.getId());
+    }
+
+    /**
+     * 通过主键删除数据
+     *
+     * @param id 主键
+     * @return 是否成功
+     */
+    @Override
+    public boolean deleteById(String id) {
+        return this.ylxAlarmDao.deleteById(id) > 0;
+    }
+
+    @Override
+    public YlxAlarm addAlarm(YlxAlarm ylxAlarm) {
+        if(StringUtils.isBlank(ylxAlarm.getOrderNo())){
+            throw new ServiceException("订单号不能为空");
+        }
+        LambdaQueryWrapper<YlxAlarm> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(YlxAlarm::getOrderNo,ylxAlarm.getOrderNo());
+        YlxAlarm one = this.getOne(queryWrapper);
+        if(one != null){
+            throw new ServiceException("该订单已报警");
+        }
+        TOrder order = orderService.getByNo(ylxAlarm.getOrderNo());
+        if(order!=null){
+            YlxAlarm ylxAlarm1 = new YlxAlarm();
+            TJs js = jsService.getById(order.getcJsId());
+            ylxAlarm1.setJsId(order.getcJsId());
+            ylxAlarm1.setOrderNo(order.getOrderNo());
+            ylxAlarm1.setJsName(js.getcName());
+            ylxAlarm1.setJsPhone(js.getcPhone());
+            ylxAlarm1.setUserName(order.getcName());
+            ylxAlarm1.setUserPhone(order.getcPhone());
+            ylxAlarm1.setAddress(order.getcAddress());
+            ylxAlarm1.setOpenId(order.getcOpenId());
+            this.save(ylxAlarm1);
+            return ylxAlarm1;
+        }
+        return ylxAlarm;
+    }
+}

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/BillNoUtil.java

@@ -5,6 +5,8 @@ import com.ylx.common.core.redis.RedisCache;
 import org.apache.commons.lang3.StringUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DateFormat;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;

+ 46 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/MassageUtil.java

@@ -0,0 +1,46 @@
+package com.ylx.massage.utils;
+
+
+import com.ylx.common.core.redis.RedisCache;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * @author jianlong
+ * @date 2024-04-15 14:38
+ */
+
+public class  MassageUtil {
+
+//    public static void main(String[] args) {
+//        // 测试计算4.04公里的费用
+//        BigDecimal totalCost = calculateTaxiFare(BigDecimal.valueOf(4.04));
+//        System.out.println("全程4.04公里的费用为: " + totalCost + "元");
+//    }
+
+    /**
+     * 计算出租车费用
+     * @param distance 全程距离(公里)
+     * @return 费用总额(元)
+     */
+    public static BigDecimal calculateTaxiFare(BigDecimal distance) {
+        final BigDecimal BASE_FARE = new BigDecimal("9.3"); // 起步价
+        final BigDecimal ADDITIONAL_FARE_PER_KM = new BigDecimal("2.4"); // 超出起步价后每公里费用
+        final BigDecimal BASE_DISTANCE_KM = new BigDecimal("3"); // 起步距离(公里)
+
+        // 计算超出起步价的公里数,注意应该向上取整,因为不足1公里也要按1公里计费
+        BigDecimal extraKms = distance.subtract(BASE_DISTANCE_KM).setScale(0, RoundingMode.UP);
+
+        // 计算总费用
+
+        BigDecimal totalFare = BASE_FARE;
+        if(extraKms.compareTo(BigDecimal.ZERO) > 0) {
+            totalFare= totalFare.add(extraKms.multiply(ADDITIONAL_FARE_PER_KM));
+        }
+
+        return totalFare;
+    }
+}

+ 2 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/utils/OrderNumberGenerator.java

@@ -15,6 +15,8 @@ public class OrderNumberGenerator {
     public static final String KEY_PREFIX_ORDER = "YORDER";
 
     public static final String KEY_PREFIX_RECHAR = "RECHAR";
+
+    public static final String KEY_PREFIX_CASH = "CASH";
     private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
 
     private final StringRedisTemplate stringRedisTemplate;

+ 38 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TConsumptionLogMapper.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.massage.mapper.TConsumptionLogMapper">
+
+    <resultMap type="com.ylx.massage.domain.TConsumptionLog" id="TConsumptionLogMap">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="amount" column="amount" jdbcType="NUMERIC"/>
+        <result property="billType" column="bill_type" jdbcType="INTEGER"/>
+        <result property="billNo" column="bill_no" jdbcType="VARCHAR"/>
+        <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+        <result property="note" column="note" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!-- 批量插入 -->
+    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into ry-vue.t_consumption_log(amountbill_typebill_noopen_idnotecreate_timeupdate_timeis_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.amount}#{entity.billType}#{entity.billNo}#{entity.openId}#{entity.note}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+    </insert>
+    <!-- 批量插入或按主键更新 -->
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into ry-vue.t_consumption_log(amountbill_typebill_noopen_idnotecreate_timeupdate_timeis_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.amount}#{entity.billType}#{entity.billNo}#{entity.openId}#{entity.note}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+        on duplicate key update
+        amount = values(amount) bill_type = values(bill_type) bill_no = values(bill_no) open_id = values(open_id) note =
+        values(note) create_time = values(create_time) update_time = values(update_time) is_delete = values(is_delete)
+    </insert>
+
+</mapper>
+

+ 6 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TOrderMapper.xml

@@ -7,6 +7,9 @@
         <result column="atlas_add" property="atlasAdd"/>
         <result column="pay_type" property="payType"/>
         <result column="c_js_id" property="cJsId"/>
+        <result column="tape" property="tape"/>
+        <result column="fare" property="fare"/>
+        <result column="parent_no" property="parentNo"/>
         <result column="c_open_id" property="cOpenId"/>
         <result column="c_goods" property="cGoods"
                 typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
@@ -55,6 +58,9 @@
                t_order.atlas_add,
                t_order.pay_type,
                t_order.c_js_id,
+               t_order.tape,
+               t_order.fare,
+               t_order.parent_no,
                t_order.c_open_id,
                t_order.c_goods,
                t_order.d_total_money,

+ 119 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TWxUserMapper.xml

@@ -2,4 +2,123 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ylx.massage.mapper.TWxUserMapper">
 
+    <resultMap type="TWxUserVo" id="TWxUserResult">
+        <result property="id"    column="id"    />
+        <result property="cOpenid"    column="c_openid"    />
+        <result property="cPhone"    column="c_phone"    />
+        <result property="cNickName"    column="c_nick_name"    />
+        <result property="dMoney"    column="d_money"    />
+        <result property="nNum"    column="n_num"    />
+        <result property="dBalance"    column="d_balance"    />
+        <result property="dAllMoney"    column="d_all_money"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="isDelete"    column="is_delete"    />
+        <result property="openid"    column="openid"    />
+        <result property="phone"    column="phone"    />
+        <result property="userName"    column="user_name"    />
+        <result property="atlasAdd"    column="atlas_add"    />
+        <result property="longitude"    column="longitude"    />
+        <result property="latitude"    column="latitude"    />
+        <result property="type"    column="type"    />
+        <result property="address"    column="address"    />
+    </resultMap>
+
+    <sql id="selectTWxUserVo">
+        select u.id, u.c_openid, u.c_icon, u.c_phone, u.c_unionid, u.c_nick_name, u.d_money, u.n_num, u.c_address_list, u.d_balance, u.d_all_money, u.c_scan_img, u.c_up_user, u.c_mr_address_id, u.create_time, u.update_time, u.is_delete,
+               a.openid, a.phone, a.user_name, a.atlas_add, a.type, a.address
+               FROM
+            t_wx_user u
+                LEFT JOIN (select * from t_address where is_delete = 0 and type = 1) a ON u.c_openid = a.openid
+    </sql>
+    <select id="selectTWxUserList" parameterType="TWxUser" resultMap="TWxUserResult">
+        <include refid="selectTWxUserVo"/>
+        <where>
+            u.is_delete = 0
+        </where>
+    </select>
+
+    <select id="selectTWxUserById" parameterType="String" resultMap="TWxUserResult">
+        <include refid="selectTWxUserVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertTWxUser" parameterType="TWxUser">
+        insert into t_wx_user
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="cOpenid != null and cOpenid != ''">c_openid,</if>
+            <if test="cSessionKey != null">c_session_key,</if>
+            <if test="cIcon != null">c_icon,</if>
+            <if test="cPhone != null">c_phone,</if>
+            <if test="cUnionid != null">c_unionid,</if>
+            <if test="cNickName != null">c_nick_name,</if>
+            <if test="dMoney != null">d_money,</if>
+            <if test="nNum != null">n_num,</if>
+            <if test="cAddressList != null">c_address_list,</if>
+            <if test="dBalance != null">d_balance,</if>
+            <if test="dAllMoney != null">d_all_money,</if>
+            <if test="cScanImg != null">c_scan_img,</if>
+            <if test="cUpUser != null">c_up_user,</if>
+            <if test="cMrAddressId != null">c_mr_address_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="isDelete != null">is_delete,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="cOpenid != null and cOpenid != ''">#{cOpenid},</if>
+            <if test="cSessionKey != null">#{cSessionKey},</if>
+            <if test="cIcon != null">#{cIcon},</if>
+            <if test="cPhone != null">#{cPhone},</if>
+            <if test="cUnionid != null">#{cUnionid},</if>
+            <if test="cNickName != null">#{cNickName},</if>
+            <if test="dMoney != null">#{dMoney},</if>
+            <if test="nNum != null">#{nNum},</if>
+            <if test="cAddressList != null">#{cAddressList},</if>
+            <if test="dBalance != null">#{dBalance},</if>
+            <if test="dAllMoney != null">#{dAllMoney},</if>
+            <if test="cScanImg != null">#{cScanImg},</if>
+            <if test="cUpUser != null">#{cUpUser},</if>
+            <if test="cMrAddressId != null">#{cMrAddressId},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="isDelete != null">#{isDelete},</if>
+        </trim>
+    </insert>
+
+    <update id="updateTWxUser" parameterType="TWxUser">
+        update t_wx_user
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="cOpenid != null and cOpenid != ''">c_openid = #{cOpenid},</if>
+            <if test="cSessionKey != null">c_session_key = #{cSessionKey},</if>
+            <if test="cIcon != null">c_icon = #{cIcon},</if>
+            <if test="cPhone != null">c_phone = #{cPhone},</if>
+            <if test="cUnionid != null">c_unionid = #{cUnionid},</if>
+            <if test="cNickName != null">c_nick_name = #{cNickName},</if>
+            <if test="dMoney != null">d_money = #{dMoney},</if>
+            <if test="nNum != null">n_num = #{nNum},</if>
+            <if test="cAddressList != null">c_address_list = #{cAddressList},</if>
+            <if test="dBalance != null">d_balance = #{dBalance},</if>
+            <if test="dAllMoney != null">d_all_money = #{dAllMoney},</if>
+            <if test="cScanImg != null">c_scan_img = #{cScanImg},</if>
+            <if test="cUpUser != null">c_up_user = #{cUpUser},</if>
+            <if test="cMrAddressId != null">c_mr_address_id = #{cMrAddressId},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="isDelete != null">is_delete = #{isDelete},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTWxUserById" parameterType="String">
+        delete from t_wx_user where id = #{id}
+    </delete>
+
+    <delete id="deleteTWxUserByIds" parameterType="String">
+        delete from t_wx_user where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
 </mapper>

+ 36 - 0
nightFragrance-massage/src/main/resources/mapper/massage/TbFileMapper.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.massage.mapper.TbFileMapper">
+
+    <resultMap type="com.ylx.massage.domain.TbFile" id="TbFileMap">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="md5" column="MD5" jdbcType="VARCHAR"/>
+        <result property="fileUrl" column="file_url" jdbcType="VARCHAR"/>
+        <result property="fileName" column="file_name" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!-- 批量插入 -->
+    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into ry-vue.tb_file(MD5file_urlfile_namecreate_timeupdate_timeis_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.md5}#{entity.fileUrl}#{entity.fileName}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+    </insert>
+    <!-- 批量插入或按主键更新 -->
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into ry-vue.tb_file(MD5file_urlfile_namecreate_timeupdate_timeis_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.md5}#{entity.fileUrl}#{entity.fileName}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+        on duplicate key update
+        MD5 = values(MD5) file_url = values(file_url) file_name = values(file_name) create_time = values(create_time)
+        update_time = values(update_time) is_delete = values(is_delete)
+    </insert>
+
+</mapper>
+

+ 201 - 0
nightFragrance-massage/src/main/resources/mapper/massage/YlxAlarmMapper.xml

@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.massage.mapper.YlxAlarmMapper">
+
+    <resultMap type="com.ylx.massage.domain.YlxAlarm" id="YlxAlarmMap">
+        <result property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+        <result property="userPhone" column="user_phone" jdbcType="VARCHAR"/>
+        <result property="address" column="address" jdbcType="VARCHAR"/>
+        <result property="jsName" column="js_name" jdbcType="VARCHAR"/>
+        <result property="jsPhone" column="js_phone" jdbcType="VARCHAR"/>
+        <result property="jsId" column="js_id" jdbcType="VARCHAR"/>
+        <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+        <result property="alarmStatus" column="alarm_status" jdbcType="INTEGER"/>
+        <result property="note" column="note" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <!--查询单个-->
+    <select id="queryById" resultMap="YlxAlarmMap">
+        select id,user_name,user_phone,address,js_name,js_phone,js_id,open_id,alarm_status,note,create_time,update_time,is_delete
+        from ylx_alarm
+        where id = #{id}
+    </select>
+
+    <!--查询指定行数据-->
+    <select id="queryAllByLimit" resultMap="YlxAlarmMap">
+        select
+        id,user_name,user_phone,address,js_name,js_phone,js_id,open_id,alarm_status,note,create_time,update_time,is_delete
+        from ylx_alarm
+        <where>
+            <if test="id != null and id != ''">
+                and id = #{id}
+            </if>
+            <if test="userName != null and userName != ''">
+                and user_name = #{userName}
+            </if>
+            <if test="userPhone != null and userPhone != ''">
+                and user_phone = #{userPhone}
+            </if>
+            <if test="address != null and address != ''">
+                and address = #{address}
+            </if>
+            <if test="jsName != null and jsName != ''">
+                and js_name = #{jsName}
+            </if>
+            <if test="jsPhone != null and jsPhone != ''">
+                and js_phone = #{jsPhone}
+            </if>
+            <if test="jsId != null and jsId != ''">
+                and js_id = #{jsId}
+            </if>
+            <if test="openId != null and openId != ''">
+                and open_id = #{openId}
+            </if>
+            <if test="alarmStatus != null">
+                and alarm_status = #{alarmStatus}
+            </if>
+            <if test="note != null and note != ''">
+                and note = #{note}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+            <if test="updateTime != null">
+                and update_time = #{updateTime}
+            </if>
+            <if test="isDelete != null">
+                and is_delete = #{isDelete}
+            </if>
+        </where>
+        limit #{pageable.offset}, #{pageable.pageSize}
+    </select>
+
+    <!--统计总行数-->
+    <select id="count" resultType="java.lang.Long">
+        select count(1)
+        from ylx_alarm
+        <where>
+            <if test="id != null and id != ''">
+                and id = #{id}
+            </if>
+            <if test="userName != null and userName != ''">
+                and user_name = #{userName}
+            </if>
+            <if test="userPhone != null and userPhone != ''">
+                and user_phone = #{userPhone}
+            </if>
+            <if test="address != null and address != ''">
+                and address = #{address}
+            </if>
+            <if test="jsName != null and jsName != ''">
+                and js_name = #{jsName}
+            </if>
+            <if test="jsPhone != null and jsPhone != ''">
+                and js_phone = #{jsPhone}
+            </if>
+            <if test="jsId != null and jsId != ''">
+                and js_id = #{jsId}
+            </if>
+            <if test="openId != null and openId != ''">
+                and open_id = #{openId}
+            </if>
+            <if test="alarmStatus != null">
+                and alarm_status = #{alarmStatus}
+            </if>
+            <if test="note != null and note != ''">
+                and note = #{note}
+            </if>
+            <if test="createTime != null">
+                and create_time = #{createTime}
+            </if>
+            <if test="updateTime != null">
+                and update_time = #{updateTime}
+            </if>
+            <if test="isDelete != null">
+                and is_delete = #{isDelete}
+            </if>
+        </where>
+    </select>
+
+    <!--新增所有列-->
+
+    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into
+        ylx_alarm(user_name,user_phone,address,js_name,js_phone,js_id,open_id,alarm_status,note,create_time,update_time,is_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.userName}#{entity.userPhone}#{entity.address}#{entity.jsName}#{entity.jsPhone}#{entity.jsId}#{entity.openId}#{entity.alarmStatus}#{entity.note}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+    </insert>
+
+    <insert id="insertOrUpdateBatch" keyProperty="id" useGeneratedKeys="true">
+        insert into
+        ylx_alarm(user_name,user_phone,address,js_name,js_phone,js_id,open_id,alarm_status,note,create_time,update_time,is_delete)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.userName}#{entity.userPhone}#{entity.address}#{entity.jsName}#{entity.jsPhone}#{entity.jsId}#{entity.openId}#{entity.alarmStatus}#{entity.note}#{entity.createTime}#{entity.updateTime}#{entity.isDelete})
+        </foreach>
+        on duplicate key update
+        user_name = values(user_name)user_phone = values(user_phone)address = values(address)js_name =
+        values(js_name)js_phone = values(js_phone)js_id = values(js_id)open_id = values(open_id)alarm_status =
+        values(alarm_status)note = values(note)create_time = values(create_time)update_time =
+        values(update_time)is_delete = values(is_delete)
+    </insert>
+
+    <!--通过主键修改数据-->
+    <update id="update">
+        update ylx_alarm
+        <set>
+            <if test="userName != null and userName != ''">
+                user_name = #{userName},
+            </if>
+            <if test="userPhone != null and userPhone != ''">
+                user_phone = #{userPhone},
+            </if>
+            <if test="address != null and address != ''">
+                address = #{address},
+            </if>
+            <if test="jsName != null and jsName != ''">
+                js_name = #{jsName},
+            </if>
+            <if test="jsPhone != null and jsPhone != ''">
+                js_phone = #{jsPhone},
+            </if>
+            <if test="jsId != null and jsId != ''">
+                js_id = #{jsId},
+            </if>
+            <if test="openId != null and openId != ''">
+                open_id = #{openId},
+            </if>
+            <if test="alarmStatus != null">
+                alarm_status = #{alarmStatus},
+            </if>
+            <if test="note != null and note != ''">
+                note = #{note},
+            </if>
+            <if test="createTime != null">
+                create_time = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime},
+            </if>
+            <if test="isDelete != null">
+                is_delete = #{isDelete},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--通过主键删除-->
+    <delete id="deleteById">
+        delete
+        from ylx_alarm
+        where id = #{id}
+    </delete>
+
+</mapper>
+

+ 4 - 0
nightFragrance-system/src/main/java/com/ylx/system/domain/SysOperLog.java

@@ -5,12 +5,14 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ylx.common.annotation.Excel;
 import com.ylx.common.annotation.Excel.ColumnType;
 import com.ylx.common.core.domain.BaseEntity;
+import lombok.Data;
 
 /**
  * 操作日志记录表 oper_log
  *
  * @author ylx
  */
+@Data
 public class SysOperLog extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -34,6 +36,8 @@ public class SysOperLog extends BaseEntity
     @Excel(name = "请求方法")
     private String method;
 
+    @Excel(name = "heat")
+    private String heat;
     /** 请求方式 */
     @Excel(name = "请求方式")
     private String requestMethod;

+ 2 - 2
nightFragrance-system/src/main/resources/mapper/system/SysOperLogMapper.xml

@@ -30,8 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
 
 	<insert id="insertOperlog" parameterType="SysOperLog">
-		insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time)
-        values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate())
+		insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name,heat, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time)
+        values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{heat},#{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate())
 	</insert>
 
 	<select id="selectOperLogList" parameterType="SysOperLog" resultMap="SysOperLogResult">