From eaa86d0ec36bf87452bd746e39b797aab43fcc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E5=A4=A7=E5=8F=94?= <494979559@qq.com> Date: Mon, 22 Jul 2024 11:53:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=99=E9=A2=9D=E5=8F=98=E5=8A=A8=EF=BC=8C?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/constant/Constants.java | 13 ++ .../common/core/domain/entity/SmUser.java | 3 + .../main/resources/vm/java/controller.java.vm | 15 ++- .../src/main/resources/vm/java/mapper.java.vm | 35 +++--- .../main/resources/vm/java/service.java.vm | 22 ++-- .../resources/vm/java/serviceImpl.java.vm | 24 ++-- .../src/main/resources/vm/xml/mapper.xml.vm | 84 +++++++------ .../ss/device/service/DeviceService.java | 6 +- .../service/impl/DeviceServiceImpl.java | 24 +++- .../recordBalance/domain/RecordBalance.java | 44 +++++++ .../domain/RecordBalanceQuery.java | 11 ++ .../recordBalance/domain/RecordBalanceVO.java | 11 ++ .../mapper/RecordBalanceMapper.java | 64 ++++++++++ .../mapper/RecordBalanceMapper.xml | 82 +++++++++++++ .../service/RecordBalanceService.java | 75 ++++++++++++ .../impl/RecordBalanceServiceImpl.java | 115 ++++++++++++++++++ .../impl/TransactionBillServiceImpl.java | 8 +- .../ruoyi/ss/user/mapper/SmUserMapper.java | 3 +- .../com/ruoyi/ss/user/mapper/SmUserMapper.xml | 11 +- .../ruoyi/ss/user/service/ISmUserService.java | 21 +++- .../user/service/impl/SmUserServiceImpl.java | 28 ++++- .../controller/app/AppDeviceController.java | 4 +- .../ss/RecordBalanceController.java | 107 ++++++++++++++++ 23 files changed, 707 insertions(+), 103 deletions(-) create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalance.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceQuery.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceVO.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.xml create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/RecordBalanceService.java create mode 100644 smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/impl/RecordBalanceServiceImpl.java create mode 100644 smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordBalanceController.java diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java index c2313c1e..2ae8805b 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -207,4 +207,17 @@ public class Constants * accessSecret */ public static final String HEADER_ACCESS_SECRET = "accessSecret"; + + /** + * 设备不存在 + */ + public static final int DEVICE_NOT_FOUND = 0; + /** + * 设备未绑定 + */ + public static final int DEVICE_NOT_BIND = 1; + /** + * 设备已绑定 + */ + public static final int DEVICE_BINDED = 2; } diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java index 2ff26683..77890163 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/core/domain/entity/SmUser.java @@ -131,4 +131,7 @@ public class SmUser extends BaseEntity @ApiModelProperty("是否设备管理员") private Boolean deviceAdmin; + + @ApiModelProperty("服务费收取方式") + private String serviceType; } diff --git a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/controller.java.vm b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/controller.java.vm index bf889887..bbea209a 100644 --- a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/controller.java.vm +++ b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/controller.java.vm @@ -17,6 +17,8 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import ${packageName}.domain.${ClassName}; +import ${packageName}.domain.${ClassName}VO; +import ${packageName}.domain.${ClassName}Query; import ${packageName}.service.I${ClassName}Service; import com.ruoyi.common.utils.poi.ExcelUtil; #if($table.crud || $table.sub) @@ -26,7 +28,7 @@ import com.ruoyi.common.core.page.TableDataInfo; /** * ${functionName}Controller - * + * * @author ${author} * @date ${datetime} */ @@ -43,10 +45,11 @@ public class ${ClassName}Controller extends BaseController @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") @GetMapping("/list") #if($table.crud || $table.sub) - public TableDataInfo list(${ClassName} ${className}) + public TableDataInfo list(${ClassName}Query query) { startPage(); - List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + startOrderBy(); + List<${ClassName}VO> list = ${className}Service.select${ClassName}List(query); return getDataTable(list); } #elseif($table.tree) @@ -63,10 +66,10 @@ public class ${ClassName}Controller extends BaseController @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") @Log(title = "${functionName}", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, ${ClassName} ${className}) + public void export(HttpServletResponse response, ${ClassName}Query query) { - List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); - ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + List<${ClassName}VO> list = ${className}Service.select${ClassName}List(query); + ExcelUtil<${ClassName}VO> util = new ExcelUtil<${ClassName}VO>(${ClassName}VO.class); util.exportExcel(response, list, "${functionName}数据"); } diff --git a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/mapper.java.vm b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/mapper.java.vm index 7e7d7c26..f5eed4a3 100644 --- a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/mapper.java.vm +++ b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/mapper.java.vm @@ -2,37 +2,40 @@ package ${packageName}.mapper; import java.util.List; import ${packageName}.domain.${ClassName}; +import ${packageName}.domain.${ClassName}VO; +import ${packageName}.domain.${ClassName}Query; +import org.apache.ibatis.annotations.Param; #if($table.sub) import ${packageName}.domain.${subClassName}; #end /** * ${functionName}Mapper接口 - * + * * @author ${author} * @date ${datetime} */ -public interface ${ClassName}Mapper +public interface ${ClassName}Mapper { /** * 查询${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + public ${ClassName}VO select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); /** * 查询${functionName}列表 - * + * * @param ${className} ${functionName} * @return ${functionName}集合 */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + public List<${ClassName}VO> select${ClassName}List(@Param("query")${ClassName}Query ${className}); /** * 新增${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ @@ -40,15 +43,15 @@ public interface ${ClassName}Mapper /** * 修改${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ - public int update${ClassName}(${ClassName} ${className}); + public int update${ClassName}(@Param("data") ${ClassName} ${className}); /** * 删除${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ @@ -56,7 +59,7 @@ public interface ${ClassName}Mapper /** * 批量删除${functionName} - * + * * @param ${pkColumn.javaField}s 需要删除的数据主键集合 * @return 结果 */ @@ -65,24 +68,24 @@ public interface ${ClassName}Mapper /** * 批量删除${subTable.functionName} - * + * * @param ${pkColumn.javaField}s 需要删除的数据主键集合 * @return 结果 */ public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); - + /** * 批量新增${subTable.functionName} - * + * * @param ${subclassName}List ${subTable.functionName}列表 * @return 结果 */ public int batch${subClassName}(List<${subClassName}> ${subclassName}List); - + /** * 通过${functionName}主键删除${subTable.functionName}信息 - * + * * @param ${pkColumn.javaField} ${functionName}ID * @return 结果 */ diff --git a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/service.java.vm b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/service.java.vm index 264882b2..f86bfc05 100644 --- a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/service.java.vm +++ b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/service.java.vm @@ -2,34 +2,36 @@ package ${packageName}.service; import java.util.List; import ${packageName}.domain.${ClassName}; +import ${packageName}.domain.${ClassName}VO; +import ${packageName}.domain.${ClassName}Query; /** * ${functionName}Service接口 - * + * * @author ${author} * @date ${datetime} */ -public interface I${ClassName}Service +public interface I${ClassName}Service { /** * 查询${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + public ${ClassName}VO select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); /** * 查询${functionName}列表 - * + * * @param ${className} ${functionName} * @return ${functionName}集合 */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + public List<${ClassName}VO> select${ClassName}List(${ClassName}Query ${className}); /** * 新增${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ @@ -37,7 +39,7 @@ public interface I${ClassName}Service /** * 修改${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ @@ -45,7 +47,7 @@ public interface I${ClassName}Service /** * 批量删除${functionName} - * + * * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 * @return 结果 */ @@ -53,7 +55,7 @@ public interface I${ClassName}Service /** * 删除${functionName}信息 - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ diff --git a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/serviceImpl.java.vm b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/serviceImpl.java.vm index 14746e1a..958cf767 100644 --- a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/serviceImpl.java.vm +++ b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -17,47 +17,49 @@ import ${packageName}.domain.${subClassName}; #end import ${packageName}.mapper.${ClassName}Mapper; import ${packageName}.domain.${ClassName}; +import ${packageName}.domain.${ClassName}VO; +import ${packageName}.domain.${ClassName}Query; import ${packageName}.service.I${ClassName}Service; /** * ${functionName}Service业务层处理 - * + * * @author ${author} * @date ${datetime} */ @Service -public class ${ClassName}ServiceImpl implements I${ClassName}Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service { @Autowired private ${ClassName}Mapper ${className}Mapper; /** * 查询${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ @Override - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + public ${ClassName}VO select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) { return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); } /** * 查询${functionName}列表 - * + * * @param ${className} ${functionName} * @return ${functionName} */ @Override - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + public List<${ClassName}VO> select${ClassName}List(${ClassName}Query ${className}) { return ${className}Mapper.select${ClassName}List(${className}); } /** * 新增${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ @@ -83,7 +85,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service /** * 修改${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ @@ -107,7 +109,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service /** * 批量删除${functionName} - * + * * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 * @return 结果 */ @@ -125,7 +127,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service /** * 删除${functionName}信息 - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ @@ -144,7 +146,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service /** * 新增${subTable.functionName}信息 - * + * * @param ${className} ${functionName}对象 */ public void insert${subClassName}(${ClassName} ${className}) diff --git a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/xml/mapper.xml.vm b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/xml/mapper.xml.vm index 0ceb3d85..9eb1f9d3 100644 --- a/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/xml/mapper.xml.vm +++ b/smart-switch-ruoyi/smart-switch-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -3,8 +3,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - + + #foreach ($column in $columns) #end @@ -23,41 +23,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #end - select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + select + #foreach($column in $columns) + $column.columnName#if($foreach.count != $columns.size()),#end + #end + from ${tableName} - - -#foreach($column in $columns) -#set($queryType=$column.queryType) -#set($javaField=$column.javaField) -#set($javaType=$column.javaType) -#set($columnName=$column.columnName) -#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#if($column.query) -#if($column.queryType == "EQ") - and $columnName = #{$javaField} -#elseif($queryType == "NE") - and $columnName != #{$javaField} -#elseif($queryType == "GT") - and $columnName > #{$javaField} -#elseif($queryType == "GTE") - and $columnName >= #{$javaField} -#elseif($queryType == "LT") - and $columnName < #{$javaField} -#elseif($queryType == "LTE") - and $columnName <= #{$javaField} -#elseif($queryType == "LIKE") - and $columnName like concat('%', #{$javaField}, '%') -#elseif($queryType == "BETWEEN") - and $columnName between #{params.begin$AttrName} and #{params.end$AttrName} -#end -#end -#end + + - + - + insert into ${tableName} @@ -95,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #foreach($column in $columns) #if($column.columnName != $pkColumn.columnName) - $column.columnName = #{$column.javaField}, + $column.columnName = #{data.$column.javaField}, #end #end @@ -107,15 +115,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from ${tableName} where ${pkColumn.columnName} in + delete from ${tableName} where ${pkColumn.columnName} in #{${pkColumn.javaField}} #if($table.sub) - + - delete from ${subTableName} where ${subTableFkName} in + delete from ${subTableName} where ${subTableFkName} in #{${subTableFkclassName}} @@ -132,4 +140,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #end - \ No newline at end of file + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java index 1763b62c..757aa3e1 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/DeviceService.java @@ -143,10 +143,11 @@ public interface DeviceService /** * 设备是否已经被绑定 + * * @param mac * @return */ - boolean isBindByMac(String mac); + int bindCodeByMac(String mac); /** * ids查询列表 @@ -188,10 +189,11 @@ public interface DeviceService /** * 根据SN码查询设备是否已经绑定 + * * @param deviceNo * @return */ - boolean isBindBySn(String deviceNo); + int bindCodeBySn(String deviceNo); /** * 更新设备服务费 diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java index a241714d..fd2c6d8b 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.ss.device.service.impl; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.core.redis.enums.RedisLockKey; @@ -669,12 +670,23 @@ public class DeviceServiceImpl implements DeviceService * @return */ @Override - public boolean isBindByMac(String mac) { + public int bindCodeByMac(String mac) { if (StringUtils.isBlank(mac)) { - return false; + return Constants.DEVICE_NOT_FOUND; } DeviceVO device = deviceMapper.selectSimpleSmDeviceByMac(mac); - return device != null && device.getUserId() != null; + return isBindCode(device); + } + + private int isBindCode(DeviceVO device) { + if (device == null) { + return Constants.DEVICE_NOT_FOUND; + } + if (device.getUserId() == null) { + return Constants.DEVICE_NOT_BIND; + } else { + return Constants.DEVICE_BINDED; + } } /** @@ -684,12 +696,12 @@ public class DeviceServiceImpl implements DeviceService * @return */ @Override - public boolean isBindBySn(String deviceNo) { + public int bindCodeBySn(String deviceNo) { if (StringUtils.isBlank(deviceNo)) { - return false; + return Constants.DEVICE_NOT_FOUND; } DeviceVO device = deviceMapper.selectSimpleSmDeviceBySn(deviceNo); - return device != null && device.getUserId() != null; + return isBindCode(device); } /** diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalance.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalance.java new file mode 100644 index 00000000..e1443c99 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalance.java @@ -0,0 +1,44 @@ +package com.ruoyi.ss.recordBalance.domain; + +import java.math.BigDecimal; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 余额变动记录对象 ss_record_balance + * + * @author ruoyi + * @date 2024-07-22 + */ +@Data +public class RecordBalance extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + private Long id; + + /** 用户ID */ + @Excel(name = "用户ID") + private Long userId; + + /** 变动前余额(元) */ + @Excel(name = "变动前余额", readConverterExp = "元=") + private BigDecimal beforeBalance; + + /** 变动后余额(元) */ + @Excel(name = "变动后余额", readConverterExp = "元=") + private BigDecimal afterBalance; + + /** 变动原因 */ + @Excel(name = "变动原因") + private String reason; + + @ApiModelProperty("变化金额") + private BigDecimal amount; +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceQuery.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceQuery.java new file mode 100644 index 00000000..6e67879e --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceQuery.java @@ -0,0 +1,11 @@ +package com.ruoyi.ss.recordBalance.domain; + +import lombok.Data; + +/** + * @author wjh + * 2024/7/22 + */ +@Data +public class RecordBalanceQuery extends RecordBalance{ +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceVO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceVO.java new file mode 100644 index 00000000..9b9daf3a --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/domain/RecordBalanceVO.java @@ -0,0 +1,11 @@ +package com.ruoyi.ss.recordBalance.domain; + +import lombok.Data; + +/** + * @author wjh + * 2024/7/22 + */ +@Data +public class RecordBalanceVO extends RecordBalance{ +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.java new file mode 100644 index 00000000..775e9e8e --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.ss.recordBalance.mapper; + +import java.util.List; +import com.ruoyi.ss.recordBalance.domain.RecordBalance; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceVO; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceQuery; +import org.apache.ibatis.annotations.Param; + +/** + * 余额变动记录Mapper接口 + * + * @author ruoyi + * @date 2024-07-22 + */ +public interface RecordBalanceMapper +{ + /** + * 查询余额变动记录 + * + * @param id 余额变动记录主键 + * @return 余额变动记录 + */ + public RecordBalanceVO selectRecordBalanceById(Long id); + + /** + * 查询余额变动记录列表 + * + * @param recordBalance 余额变动记录 + * @return 余额变动记录集合 + */ + public List selectRecordBalanceList(@Param("query")RecordBalanceQuery recordBalance); + + /** + * 新增余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + public int insertRecordBalance(RecordBalance recordBalance); + + /** + * 修改余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + public int updateRecordBalance(@Param("data") RecordBalance recordBalance); + + /** + * 删除余额变动记录 + * + * @param id 余额变动记录主键 + * @return 结果 + */ + public int deleteRecordBalanceById(Long id); + + /** + * 批量删除余额变动记录 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteRecordBalanceByIds(Long[] ids); +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.xml new file mode 100644 index 00000000..6a1ac5c9 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/mapper/RecordBalanceMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + select + srb.id, + srb.user_id, + srb.before_balance, + srb.after_balance, + srb.reason, + srb.create_time, + srb.amount + from ss_record_balance srb + + + + and srb.id = #{query.id} + and srb.user_id = #{query.userId} + and srb.reason like concat('%', #{query.reason}, '%') + + + + + + + + insert into ss_record_balance + + user_id, + before_balance, + after_balance, + reason, + create_time, + amount, + + + #{userId}, + #{beforeBalance}, + #{afterBalance}, + #{reason}, + #{createTime}, + #{amount}, + + + + + update ss_record_balance + + user_id = #{data.userId}, + before_balance = #{data.beforeBalance}, + after_balance = #{data.afterBalance}, + reason = #{data.reason}, + create_time = #{data.createTime}, + amount = #{data.amount}, + + where id = #{id} + + + + delete from ss_record_balance where id = #{id} + + + + delete from ss_record_balance where id in + + #{id} + + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/RecordBalanceService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/RecordBalanceService.java new file mode 100644 index 00000000..61bfa763 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/RecordBalanceService.java @@ -0,0 +1,75 @@ +package com.ruoyi.ss.recordBalance.service; + +import java.math.BigDecimal; +import java.util.List; +import com.ruoyi.ss.recordBalance.domain.RecordBalance; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceVO; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceQuery; + +/** + * 余额变动记录Service接口 + * + * @author ruoyi + * @date 2024-07-22 + */ +public interface RecordBalanceService +{ + /** + * 查询余额变动记录 + * + * @param id 余额变动记录主键 + * @return 余额变动记录 + */ + public RecordBalanceVO selectRecordBalanceById(Long id); + + /** + * 查询余额变动记录列表 + * + * @param recordBalance 余额变动记录 + * @return 余额变动记录集合 + */ + public List selectRecordBalanceList(RecordBalanceQuery recordBalance); + + /** + * 新增余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + public int insertRecordBalance(RecordBalance recordBalance); + + /** + * 修改余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + public int updateRecordBalance(RecordBalance recordBalance); + + /** + * 批量删除余额变动记录 + * + * @param ids 需要删除的余额变动记录主键集合 + * @return 结果 + */ + public int deleteRecordBalanceByIds(Long[] ids); + + /** + * 删除余额变动记录信息 + * + * @param id 余额变动记录主键 + * @return 结果 + */ + public int deleteRecordBalanceById(Long id); + + /** + * 添加余额变动记录 + * + * @param userId 用户ID + * @param beforeBalance 变动前余额 + * @param amount 变动的金额 + * @param reason + */ + int record(Long userId, BigDecimal beforeBalance, BigDecimal amount, String reason); + +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/impl/RecordBalanceServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/impl/RecordBalanceServiceImpl.java new file mode 100644 index 00000000..32991bf3 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/recordBalance/service/impl/RecordBalanceServiceImpl.java @@ -0,0 +1,115 @@ +package com.ruoyi.ss.recordBalance.service.impl; + +import java.math.BigDecimal; +import java.util.List; + +import com.ruoyi.common.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.ss.recordBalance.mapper.RecordBalanceMapper; +import com.ruoyi.ss.recordBalance.domain.RecordBalance; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceVO; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceQuery; +import com.ruoyi.ss.recordBalance.service.RecordBalanceService; + +/** + * 余额变动记录Service业务层处理 + * + * @author ruoyi + * @date 2024-07-22 + */ +@Service +public class RecordBalanceServiceImpl implements RecordBalanceService +{ + @Autowired + private RecordBalanceMapper recordBalanceMapper; + + /** + * 查询余额变动记录 + * + * @param id 余额变动记录主键 + * @return 余额变动记录 + */ + @Override + public RecordBalanceVO selectRecordBalanceById(Long id) + { + return recordBalanceMapper.selectRecordBalanceById(id); + } + + /** + * 查询余额变动记录列表 + * + * @param recordBalance 余额变动记录 + * @return 余额变动记录 + */ + @Override + public List selectRecordBalanceList(RecordBalanceQuery recordBalance) + { + return recordBalanceMapper.selectRecordBalanceList(recordBalance); + } + + /** + * 新增余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + @Override + public int insertRecordBalance(RecordBalance recordBalance) + { + recordBalance.setCreateTime(DateUtils.getNowDate()); + return recordBalanceMapper.insertRecordBalance(recordBalance); + } + + /** + * 修改余额变动记录 + * + * @param recordBalance 余额变动记录 + * @return 结果 + */ + @Override + public int updateRecordBalance(RecordBalance recordBalance) + { + return recordBalanceMapper.updateRecordBalance(recordBalance); + } + + /** + * 批量删除余额变动记录 + * + * @param ids 需要删除的余额变动记录主键 + * @return 结果 + */ + @Override + public int deleteRecordBalanceByIds(Long[] ids) + { + return recordBalanceMapper.deleteRecordBalanceByIds(ids); + } + + /** + * 删除余额变动记录信息 + * + * @param id 余额变动记录主键 + * @return 结果 + */ + @Override + public int deleteRecordBalanceById(Long id) + { + return recordBalanceMapper.deleteRecordBalanceById(id); + } + + @Override + public int record(Long userId, BigDecimal beforeBalance, BigDecimal amount, String reason) { + if (userId == null || beforeBalance == null || amount == null || StringUtils.isBlank(reason)) { + return 0; + } + RecordBalance record = new RecordBalance(); + record.setUserId(userId); + record.setBeforeBalance(beforeBalance); + record.setAmount(amount); + record.setAfterBalance(beforeBalance.add(amount)); + record.setReason(reason); + + return this.insertRecordBalance(record); + } +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java index 7baa86fb..86919fdd 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/impl/TransactionBillServiceImpl.java @@ -352,7 +352,7 @@ public class TransactionBillServiceImpl implements TransactionBillService { ServiceUtil.assertion(arrivalAmount.compareTo(data.getArrivalAmount()) != 0, "到账金额计算不一致,请重新申请"); // 减少余额,并判断提现金额是否超额(减少的是交易金额) - userService.subtractBalance(userId, data.getMoney()); + userService.subtractBalance(userId, data.getMoney(), "提现"); // 减少余额后的用户信息 SmUserVo afterUser = smUserMapper.selectSimpleById(userId); @@ -410,7 +410,7 @@ public class TransactionBillServiceImpl implements TransactionBillService { // 返还客户余额 TransactionBill bill = transactionBillMapper.selectSmTransactionBillByBillId(billId); ServiceUtil.assertion(bill == null || bill.getUserId() == null, "数据不存在"); - userService.addBalance(bill.getUserId(), bill.getMoney()); + userService.addBalance(bill.getUserId(), bill.getMoney(), "提现驳回"); return true; } finally { @@ -649,7 +649,7 @@ public class TransactionBillServiceImpl implements TransactionBillService { ServiceUtil.assertion(updateCount != 1, "修改订单状态失败,请刷新后重试"); // 商户余额增加 - userService.addBalance(bill.getMchId(), bill.getArrivalAmount()); + userService.addBalance(bill.getMchId(), bill.getArrivalAmount(), String.format("订单充值:%s", billNo)); // 记录下充值后的余额 SmUserVo user = userService.selectSmUserByUserId(bill.getMchId()); @@ -912,7 +912,7 @@ public class TransactionBillServiceImpl implements TransactionBillService { RefundVO refundVO = refundService.selectRefundByRefundNo(refund.getRefundNo()); // 商户余额按照比例扣减 - userService.subtractBalance(bill.getMchId(), refund.getMchAmount()); + userService.subtractBalance(bill.getMchId(), refund.getMchAmount(), "退款"); // 修改原订单的退款金额和退款手续费 int updateRefundAmount = this.addRefundAmount(bill.getBillId(), refund.getAmount(), refund.getMchAmount(), refund.getServiceAmount()); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.java index 3ef6107d..a1b119cc 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.java @@ -96,8 +96,9 @@ public interface SmUserMapper * 扣减余额 * @param userId 用户id * @param amount 金额 + * @param check 校验余额是否充足 */ - int subtractBalance(@Param("userId") Long userId, @Param("amount") BigDecimal amount); + int subtractBalance(@Param("userId") Long userId, @Param("amount") BigDecimal amount, @Param("check") boolean check); /** * 更新用户服务费 diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml index 02c3ec95..e89dc735 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/mapper/SmUserMapper.xml @@ -38,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" su.is_mch, su.service_rate, su.device_admin, + su.service_type, (select sum(stb.money) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '1' and stb.status = '2') as recharge_amount, (select sum(stb.arrival_amount) from sm_transaction_bill stb where stb.user_id = su.user_id and stb.type = '2' and stb.status = '14') as with_drawl_amount, (select sum(stb.arrival_amount) from sm_transaction_bill stb where stb.mch_id = su.user_id and stb.type = '1' and stb.status = '2') as total_income @@ -142,6 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" is_mch, service_rate, device_admin, + service_type, #{userName}, @@ -168,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{isMch}, #{serviceRate}, #{deviceAdmin}, + #{serviceType}, @@ -204,6 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" is_mch = #{isMch}, service_rate = #{serviceRate}, device_admin = #{deviceAdmin}, + service_type = #{serviceType}, where user_id = #{userId} @@ -220,7 +224,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update sm_user set balance = balance - #{amount} - where user_id = #{userId} and del_flag = '0' and balance >= #{amount} + + user_id = #{userId} and del_flag = '0' + + and balance >= #{amount} + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java index 2d814eaf..5667da61 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/ISmUserService.java @@ -2,7 +2,6 @@ package com.ruoyi.ss.user.service; import com.ruoyi.common.core.domain.entity.SmUser; import com.ruoyi.common.enums.UserType; -import com.ruoyi.ss.access.domain.AccessVO; import com.ruoyi.ss.user.domain.SmUserQuery; import com.ruoyi.ss.user.domain.SmUserVo; import com.ruoyi.ss.user.domain.bo.UserUpdateServiceRateBO; @@ -102,17 +101,33 @@ public interface ISmUserService /** * 增加余额 + * * @param userId 用户id * @param amount 金额 + * @param reason */ - void addBalance(Long userId, BigDecimal amount); + void addBalance(Long userId, BigDecimal amount, String reason); /** * 减少余额 + * * @param userId 用户id * @param amount 金额 + * @param reason */ - void subtractBalance(Long userId, BigDecimal amount); + default void subtractBalance(Long userId, BigDecimal amount, String reason) { + subtractBalance(userId, amount, true, reason); + } + + /** + * 减少余额 + * + * @param userId 用户id + * @param amount 金额 + * @param check 是否校验余额是否充足 + * @param reason 原因 + */ + void subtractBalance(Long userId, BigDecimal amount, boolean check, String reason); /** * 修改微信OpenId diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java index 05401fa7..1ec076e1 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/user/service/impl/SmUserServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.ss.device.domain.DeviceQuery; import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.device.service.DeviceService; +import com.ruoyi.ss.recordBalance.service.RecordBalanceService; import com.ruoyi.ss.store.domain.StoreQuery; import com.ruoyi.ss.store.domain.StoreVo; import com.ruoyi.ss.store.service.IStoreService; @@ -50,6 +51,9 @@ public class SmUserServiceImpl implements ISmUserService @Autowired private IStoreService storeService; + @Autowired + private RecordBalanceService recordBalanceService; + /** * 查询普通用户信息 * @@ -122,18 +126,36 @@ public class SmUserServiceImpl implements ISmUserService @Override @Transactional - public void addBalance(Long userId, BigDecimal amount) { + public void addBalance(Long userId, BigDecimal amount, String reason) { ServiceUtil.assertion(BigDecimal.ZERO.compareTo(amount) > 0, "增加的金额需要大于0"); + + // 查询用户 + SmUserVo user = selectSmUserByUserId(userId); + + // 修改余额 int updateCount = smUserMapper.addBalance(userId, amount); ServiceUtil.assertion(updateCount != 1, "增加用户余额失败"); + + // 余额变动记录 + int record = recordBalanceService.record(userId, user.getBalance(), amount, reason); + ServiceUtil.assertion(record != 1, "用户余额变动记录失败"); } @Override @Transactional - public void subtractBalance(Long userId, BigDecimal amount) { + public void subtractBalance(Long userId, BigDecimal amount, boolean check, String reason) { ServiceUtil.assertion(BigDecimal.ZERO.compareTo(amount) > 0, "减少的金额需要大于0"); - int updateCount = smUserMapper.subtractBalance(userId, amount); + + // 查询用户 + SmUserVo user = selectSmUserByUserId(userId); + + // 更新用户余额 + int updateCount = smUserMapper.subtractBalance(userId, amount, check); ServiceUtil.assertion(updateCount != 1, "减少用户余额失败:用户不存在或余额不足"); + + // 余额变动记录 + int record = recordBalanceService.record(userId, user.getBalance(), amount, reason); + ServiceUtil.assertion(record != 1, "用户余额变动记录失败"); } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java index 41a7c6aa..9078457e 100644 --- a/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java @@ -157,9 +157,9 @@ public class AppDeviceController extends BaseController { public AjaxResult isBind(@RequestParam(required = false) @ApiParam("设备mac") String mac, @RequestParam(required = false) @ApiParam("设备sn") String deviceNo) { if (StringUtils.hasText(mac)) { - return success(smDeviceService.isBindByMac(mac)); + return success(smDeviceService.bindCodeByMac(mac)); } else if (StringUtils.hasText(deviceNo)) { - return success(smDeviceService.isBindBySn(deviceNo)); + return success(smDeviceService.bindCodeBySn(deviceNo)); } else { return error("至少传入一个MAC号或SN码"); } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordBalanceController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordBalanceController.java new file mode 100644 index 00000000..36b4e7e7 --- /dev/null +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RecordBalanceController.java @@ -0,0 +1,107 @@ +package com.ruoyi.web.controller.ss; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.ss.recordBalance.domain.RecordBalance; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceVO; +import com.ruoyi.ss.recordBalance.domain.RecordBalanceQuery; +import com.ruoyi.ss.recordBalance.service.RecordBalanceService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 余额变动记录Controller + * + * @author ruoyi + * @date 2024-07-22 + */ +@RestController +@RequestMapping("/ss/recordBalance") +public class RecordBalanceController extends BaseController +{ + @Autowired + private RecordBalanceService recordBalanceService; + + /** + * 查询余额变动记录列表 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:list')") + @GetMapping("/list") + public TableDataInfo list(RecordBalanceQuery query) + { + startPage(); + startOrderBy(); + List list = recordBalanceService.selectRecordBalanceList(query); + return getDataTable(list); + } + + /** + * 导出余额变动记录列表 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:export')") + @Log(title = "余额变动记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RecordBalanceQuery query) + { + List list = recordBalanceService.selectRecordBalanceList(query); + ExcelUtil util = new ExcelUtil(RecordBalanceVO.class); + util.exportExcel(response, list, "余额变动记录数据"); + } + + /** + * 获取余额变动记录详细信息 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(recordBalanceService.selectRecordBalanceById(id)); + } + + /** + * 新增余额变动记录 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:add')") + @Log(title = "余额变动记录", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody RecordBalance recordBalance) + { + return toAjax(recordBalanceService.insertRecordBalance(recordBalance)); + } + + /** + * 修改余额变动记录 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:edit')") + @Log(title = "余额变动记录", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody RecordBalance recordBalance) + { + return toAjax(recordBalanceService.updateRecordBalance(recordBalance)); + } + + /** + * 删除余额变动记录 + */ + @PreAuthorize("@ss.hasPermi('ss:recordBalance:remove')") + @Log(title = "余额变动记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(recordBalanceService.deleteRecordBalanceByIds(ids)); + } +}