分账明细
This commit is contained in:
邱贞招 2024-12-03 17:25:18 +08:00
parent c6f3393772
commit 589537fc78
29 changed files with 892 additions and 69 deletions

View File

@ -17,6 +17,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServiceUtil;
import com.ruoyi.common.utils.verify.vo.IDResponse;
import com.ruoyi.common.utils.wx.vo.PrepayResponseVO;
import com.ruoyi.framework.web.service.TokenService;
@ -826,22 +827,30 @@ public class AppVerifyController extends BaseController
}
/**
* 根据token查询车辆列表
* 根据token查询车辆列表个人
*/
@GetMapping("/getDeviceListByToken")
public AjaxResult getDeviceListByToken()
{
logger.info("【根据token查询车辆列表】");
// todo 如果是用户有订单则返回所有订单中的车辆 获取到用户类型如果是普通用户则查询订单来判断
if(ServiceConstants.USER_TYPE_NORMAL.equals(getUserType())){
List<EDevice> devices = deviceService.getInProgressOrder(getUserId());
return success(devices);
}else{
EDeviceQuery deviceQuery = new EDeviceQuery();
deviceQuery.setUserId(getUserId());
List<EDevice> list = deviceService.selectEDeviceListWithIsolate(deviceQuery);
return success(list);
}
logger.info("【根据token查询车辆列表个人");
ServiceUtil.assertion(!getUserType().equals(ServiceConstants.USER_TYPE_NORMAL), "您没有权限访问");
List<EDevice> devices = deviceService.getInProgressOrder(getUserId());
return success(devices);
}
/**
* 根据token查询车辆列表商家
*/
@GetMapping("/getDeviceListByMerchantToken")
public AjaxResult getDeviceListByMerchantToken(String keywords)
{
logger.info("【根据token查询车辆列表商家】:keywords= {}", keywords);
ServiceUtil.assertion(!getUserType().equals(ServiceConstants.USER_TYPE_MERCHANT), "您没有权限访问");
EDeviceQuery deviceQuery = new EDeviceQuery();
deviceQuery.setUserId(getUserId());
deviceQuery.setKeywords(keywords);
List<EDeviceVO> list = deviceService.selectEDeviceListWithIsolate(deviceQuery);
return success(list);
}
/**
@ -877,10 +886,13 @@ public class AppVerifyController extends BaseController
* 根据token获取提现渠道的列表
*/
@GetMapping("/getUserWithdrawChannelList")
public AjaxResult getUserWithdrawChannelList()
public AjaxResult getUserWithdrawChannelList(Long userId)
{
logger.info("根据token获取提现渠道列表【userId="+getUserId()+"");
return AjaxResult.success(userWithdrawService.selectRlUserWithdrawListByUserId(getUserId()));
if (userId == null) {
userId = getUserId();
}
logger.info("根据token获取提现渠道列表【userId={}】", userId);
return AjaxResult.success(userWithdrawService.selectRlUserWithdrawListByUserId(userId));
}
/**
@ -937,6 +949,16 @@ public class AppVerifyController extends BaseController
return toAjax(feeRuleService.updateRlFeeRule(rlFeeRule));
}
/**
* 获取收费模板详细信息
*/
@GetMapping(value = "/rule/{ruleId}")
public AjaxResult getInfo(@PathVariable("ruleId") Long ruleId)
{
logger.info("获取收费模板详细信息【ruleId={}】", ruleId);
return success(feeRuleService.selectRlFeeRuleByRuleId(ruleId));
}
/**
* 删除收费模板(逻辑删除)
*/

View File

@ -141,8 +141,12 @@ public class CaptchaController
sendSmsVo.setSignName(signName);
SendSmsResponse response = null;
log.info("向阿里云发送短信,请求,----------【{}】", JSON.toJSONString(sendSmsVo));
// response = SendAliSmsUtil.sendVerifyCode(accessKeyId,accessKeySecret,sendSmsVo);
// log.info("发送阿里云短信成功,返回----------【{}】",JSON.toJSONString(response));
try {
response = SendAliSmsUtil.sendVerifyCode(accessKeyId,accessKeySecret,sendSmsVo);
} catch (ClientException e) {
throw new RuntimeException(e);
}
log.info("发送阿里云短信成功,返回----------【{}】",JSON.toJSONString(response));
//把验证码答应存入缓存10分钟的时间
redisCache.setCacheObject(verifyKey, code, Constants.CODE_EXPIRATION, TimeUnit.MINUTES);
//把信息封装返回

View File

@ -8,6 +8,7 @@ import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.device.EDevice;
import com.ruoyi.system.domain.device.EDeviceQuery;
import com.ruoyi.system.domain.device.EDeviceVO;
import com.ruoyi.system.service.IEDeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@ -37,7 +38,7 @@ public class EDeviceController extends BaseController
public TableDataInfo list(EDeviceQuery eDevice)
{
startPage();
List<EDevice> list = eDeviceService.selectEDeviceListWithIsolate(eDevice);
List<EDeviceVO> list = eDeviceService.selectEDeviceListWithIsolate(eDevice);
return getDataTable(list);
}

View File

@ -0,0 +1,100 @@
package com.ruoyi.web.controller.system;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetail;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailQuery;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailVO;
import com.ruoyi.system.service.IRlDividendDetailService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 分账明细Controller
*
* @author qzz
* @date 2024-10-10
*/
@RestController
@RequestMapping("/system/detail")
public class RlDividendDetailController extends BaseController
{
@Resource
private IRlDividendDetailService rlDividendDetailService;
/**
* 查询分账明细列表
*/
@PreAuthorize("@ss.hasPermi('system:detail:list')")
@GetMapping("/list")
public TableDataInfo list(RlDividendDetailQuery rlDividendDetail)
{
startPage();
List<RlDividendDetailVO> list = rlDividendDetailService.selectRlDividendDetailList(rlDividendDetail);
return getDataTable(list);
}
/**
* 导出分账明细列表
*/
@PreAuthorize("@ss.hasPermi('system:detail:export')")
@Log(title = "分账明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, RlDividendDetailQuery rlDividendDetail)
{
List<RlDividendDetailVO> list = rlDividendDetailService.selectRlDividendDetailList(rlDividendDetail);
ExcelUtil<RlDividendDetailVO> util = new ExcelUtil<RlDividendDetailVO>(RlDividendDetailVO.class);
util.exportExcel(response, list, "分账明细数据");
}
/**
* 获取分账明细详细信息
*/
@PreAuthorize("@ss.hasPermi('system:detail:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(rlDividendDetailService.selectRlDividendDetailById(id));
}
/**
* 新增分账明细
*/
@PreAuthorize("@ss.hasPermi('system:detail:add')")
@Log(title = "分账明细", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody RlDividendDetail rlDividendDetail)
{
return toAjax(rlDividendDetailService.insertRlDividendDetail(rlDividendDetail));
}
/**
* 修改分账明细
*/
@PreAuthorize("@ss.hasPermi('system:detail:edit')")
@Log(title = "分账明细", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody RlDividendDetail rlDividendDetail)
{
return toAjax(rlDividendDetailService.updateRlDividendDetail(rlDividendDetail));
}
/**
* 删除分账明细
*/
@PreAuthorize("@ss.hasPermi('system:detail:remove')")
@Log(title = "分账明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(rlDividendDetailService.deleteRlDividendDetailByIds(ids));
}
}

View File

@ -28,6 +28,7 @@ public class SysRegisterController extends BaseController
@PostMapping("/register")
public AjaxResult register(@RequestBody RegisterBody user)
{
logger.info("【注册用户】请求参数register user:{}", user);
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{
return error("当前系统没有开启注册功能!");

View File

@ -64,7 +64,7 @@ spring:
devtools:
restart:
# 热部署开关
enabled: true
enabled: false
# redis 配置
redis:
# 地址

View File

@ -0,0 +1,41 @@
package com.ruoyi.common.core.domain;
import lombok.Data;
/**
* 业务校验结果
* @author wjh
* 2024/4/16
*/
@Data
public class ValidateResult {
private int code;
private String msg;
public boolean isSuccess() {
return this.code == 200;
}
public boolean isError() {
return !isSuccess();
}
private ValidateResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
public static ValidateResult success() {
return new ValidateResult(200, "success");
}
public static ValidateResult error(String msg) {
return new ValidateResult(500, msg);
}
public static ValidateResult error(int code, String msg) {
return new ValidateResult(code, msg);
}
}

View File

@ -17,7 +17,7 @@ public class EUserVO extends EUser
private BigDecimal totalWithdrawAmount = new BigDecimal("0.00");
/** 可提现金额 */
private BigDecimal withdrawalAmount;
private BigDecimal withdrawalAmount = new BigDecimal("0.00");
/** 最后账变描述 */
private String lastChangeBalanceDesc;

View File

@ -45,6 +45,11 @@ public class LoginBody
*/
private String newPassword;
/**
* openid
*/
private String openid;
}

View File

@ -0,0 +1,43 @@
package com.ruoyi.common.utils;
import com.ruoyi.common.core.domain.ValidateResult;
import com.ruoyi.common.exception.ServiceException;
/**
* @author
* 2024/3/4
*/
public class ServiceUtil {
/**
* 判断是否满足条件满足则抛出异常
* @param flag 条件
* @param msg 异常说明
*/
public static void assertion(boolean flag, String msg) {
assertion(flag, msg, 500);
}
/**
* 判断是否满足条件满足则抛出异常
* @param flag 条件
* @param msg 异常说明
* @param code 业务代码
*/
public static void assertion(boolean flag, String msg, int code) {
if (flag) {
throw new ServiceException(msg, code);
}
}
public static void assertion(ValidateResult result) {
if (result.isError()) {
throw new ServiceException(result.getMsg(), result.getCode());
}
}
public static void assertion(boolean flag, String format, Object ...args) {
if (flag) {
throw new ServiceException(String.format(format, args), 500);
}
}
}

View File

@ -14,7 +14,11 @@ import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.wx.AccessTokenUtil;
import com.ruoyi.common.utils.wx.vo.WeChatMiniAuthorizeVo;
import com.ruoyi.common.core.domain.entity.EUser;
import com.ruoyi.system.domain.channelWithdraw.ChannelWithdrawVO;
import com.ruoyi.system.domain.userWithdraw.EUserWithdraw;
import com.ruoyi.system.service.EChannelWithdrawService;
import com.ruoyi.system.service.IEUserService;
import com.ruoyi.system.service.IEUserWithdrawService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -44,6 +48,8 @@ import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.security.context.AuthenticationContextHolder;
import com.ruoyi.system.service.ISysConfigService;
import java.util.List;
/**
* 登录校验方法
*
@ -68,6 +74,12 @@ public class SysLoginService
@Resource
private IEUserService eUserService;
@Autowired
private EChannelWithdrawService channelWithdrawService;
@Autowired
private IEUserWithdrawService userWithdrawService;
@Value("${wx.appid}")
private String appId;
@ -285,6 +297,9 @@ public class SysLoginService
asUser.setWxopenid(openId);
log.info("【微信登录/wxlogin】用户不存在自动注册用户【{}】", JSON.toJSON(asUser));
int i = eUserService.insertUser(asUser);
if(i>0){
userWithdrawalChannel(asUser.getUserId());
}
user = asUser;
}else{
int i = eUserService.updateUser(user);
@ -313,6 +328,27 @@ public class SysLoginService
return tokenService.createToken(loginUser);
}
private void userWithdrawalChannel(Long userId) {
List<ChannelWithdrawVO> channelWithdrawVOS = channelWithdrawService.selectAllChannelWithdrawList();
for (ChannelWithdrawVO channelWithdrawVO : channelWithdrawVOS) {
EUserWithdraw rlUserWithdraw = new EUserWithdraw();
rlUserWithdraw.setHandlingChargeType(channelWithdrawVO.getHandlingChargeType());
rlUserWithdraw.setWithdrawHandlingCharge(channelWithdrawVO.getWithdrawHandlingCharge());
rlUserWithdraw.setUserId(userId);
rlUserWithdraw.setChannelId(channelWithdrawVO.getChannelId());
rlUserWithdraw.setIsOpen(true);
rlUserWithdraw.setMaxAmount(channelWithdrawVO.getMaxAmount());
rlUserWithdraw.setMinAmount(channelWithdrawVO.getMinAmount());
rlUserWithdraw.setName(channelWithdrawVO.getName());
rlUserWithdraw.setPicture(channelWithdrawVO.getPicture());
rlUserWithdraw.setIsNeedCode(channelWithdrawVO.getIsNeedCode());
int i = userWithdrawService.insertRlUserWithdraw(rlUserWithdraw);
if(i>0){
log.info("【微信登录/wxlogin】用户【{}】创建用户提现渠道【{}】", userId, JSON.toJSON(rlUserWithdraw));
}
}
}
/**
* 记录app登录信息
*
@ -389,10 +425,11 @@ public class SysLoginService
asUser.setLoginIp(IpUtils.getIpAddr());
asUser.setLoginDate(DateUtils.getNowDate());
asUser.setCreateTime(DateUtils.getNowDate());
log.info("微信登录/wxlogin】用户不存在自动注册用户【{}】", JSON.toJSON(asUser));
log.info("验证码登录/appCodeLogin】用户不存在自动注册用户【{}】", JSON.toJSON(asUser));
int i = eUserService.insertUser(asUser);
if(i>0){
log.info("【微信登录/wxlogin】用户注册成功【{}】", JSON.toJSON(asUser));
log.info("【验证码登录/appCodeLogin】用户注册成功【{}】", JSON.toJSON(asUser));
userWithdrawalChannel(asUser.getUserId());
}
user = asUser;
}else{

View File

@ -5,4 +5,7 @@ import lombok.Data;
@Data
public class EDeviceQuery extends EDevice{
/** 关键字: 车牌号或sn */
private String keywords;
}

View File

@ -32,4 +32,7 @@ public class EDeviceVO extends EDevice{
@Excel(name = "功能列表")
private List<EFunction> functionList;
@Excel(name = "正在进行中的订单号")
private String inProgressOrderNo;
}

View File

@ -0,0 +1,67 @@
package com.ruoyi.system.domain.dividendDetail;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.math.BigDecimal;
/**
* 分账明细对象 rl_dividend_detail
*
* @author qzz
* @date 2024-10-10
*/
@Data
public class RlDividendDetail extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键 */
private Long id;
/** 代理商 */
@Excel(name = "代理商")
private Long agentId;
/** 合伙人 */
@Excel(name = "合伙人")
private Long partnerId;
/** 合伙名称 */
@Excel(name = "合伙人名称")
private String partnerName;
/** 合伙名称 */
@Excel(name = "合伙人名称")
private String partnerPhone;
/** 合伙人类型 00系统用户,01普通用户,02代理商,03商户04调度员 */
@Excel(name = "合伙人类型 00系统用户,01普通用户,02代理商,03商户04调度员")
private String partnerType;
/** 订单号 */
@Excel(name = "订单号")
private String orderNo;
/** 订单总金额 */
@Excel(name = "订单总金额")
private BigDecimal totalAmount;
/** 分账金额 */
@Excel(name = "分账金额")
private BigDecimal dividendAmount;
/** 分红比例 */
@Excel(name = "分红比例")
private BigDecimal dividendProportion;
/** 退款金额 */
@Excel(name = "退款金额")
private BigDecimal refundAmount;
/** 状态 */
@Excel(name = "状态")
private String status;
}

View File

@ -0,0 +1,10 @@
package com.ruoyi.system.domain.dividendDetail;
import lombok.Data;
@Data
public class RlDividendDetailQuery extends RlDividendDetail{
/** 代理商名称 */
private String agentName;
}

View File

@ -0,0 +1,11 @@
package com.ruoyi.system.domain.dividendDetail;
import lombok.Data;
@Data
public class RlDividendDetailVO extends RlDividendDetail{
/** 代理名称 */
private String agentName;
}

View File

@ -46,4 +46,7 @@ public class EFeeRule extends BaseEntity
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 商户id */
private Long merchantId;
}

View File

@ -55,7 +55,7 @@ public interface EDeviceMapper extends BaseMapper<EDevice>
* @param EDevice 设备
* @return 设备集合
*/
public List<EDevice> selectEDeviceListWithIsolate(EDevice EDevice);
public List<EDeviceVO> selectEDeviceListWithIsolate(EDevice EDevice);
/**
* 新增设备
@ -175,4 +175,12 @@ public interface EDeviceMapper extends BaseMapper<EDevice>
* @return 结果
*/
List<EDevice> getInProgressOrder(Long userId);
/**
* 根据sn查询正在进行的车辆列表
*
* @param sn sn
* @return 结果
*/
String getInProgressOrderBySn(String sn);
}

View File

@ -0,0 +1,71 @@
package com.ruoyi.system.mapper;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetail;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailQuery;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailVO;
import java.util.List;
/**
* 分账明细Mapper接口
*
* @author qzz
* @date 2024-10-10
*/
public interface RlDividendDetailMapper
{
/**
* 查询分账明细
*
* @param id 分账明细主键
* @return 分账明细
*/
public RlDividendDetail selectRlDividendDetailById(Long id);
/**
* 查询分账明细列表
*
* @param rlDividendDetail 分账明细
* @return 分账明细集合
*/
public List<RlDividendDetailVO> selectRlDividendDetailList(RlDividendDetailQuery rlDividendDetail);
/**
* 新增分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
public int insertRlDividendDetail(RlDividendDetail rlDividendDetail);
/**
* 修改分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
public int updateRlDividendDetail(RlDividendDetail rlDividendDetail);
/**
* 删除分账明细
*
* @param id 分账明细主键
* @return 结果
*/
public int deleteRlDividendDetailById(Long id);
/**
* 批量删除分账明细
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteRlDividendDetailByIds(Long[] ids);
/**
* 根据订单号查询分账明细列表
* @param orderNo
* @return
*/
List<RlDividendDetailVO> selectRlDividendDetailListByOrderNo(String orderNo);
}

View File

@ -68,7 +68,7 @@ public interface IEDeviceService extends IService<EDevice>
* @param device 设备
* @return 设备集合
*/
public List<EDevice> selectEDeviceListWithIsolate(EDeviceQuery device);
public List<EDeviceVO> selectEDeviceListWithIsolate(EDeviceQuery device);
/**
* 新增设备

View File

@ -0,0 +1,99 @@
package com.ruoyi.system.service;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetail;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailQuery;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailVO;
import java.math.BigDecimal;
import java.util.List;
/**
* 分账明细Service接口
*
* @author qzz
* @date 2024-10-10
*/
public interface IRlDividendDetailService
{
/**
* 查询分账明细
*
* @param id 分账明细主键
* @return 分账明细
*/
public RlDividendDetail selectRlDividendDetailById(Long id);
/**
* 查询分账明细列表
*
* @param rlDividendDetail 分账明细
* @return 分账明细集合
*/
public List<RlDividendDetailVO> selectRlDividendDetailList(RlDividendDetailQuery rlDividendDetail);
/**
* 根据订单号查询分账明细列表
* @param orderNo 订单号
* @return 分账明细集合
*/
public List<RlDividendDetailVO> selectRlDividendDetailListByOrderNo(String orderNo);
/**
* 新增分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
public int insertRlDividendDetail(RlDividendDetail rlDividendDetail);
/**
* 修改分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
public int updateRlDividendDetail(RlDividendDetail rlDividendDetail);
/**
* 批量删除分账明细
*
* @param ids 需要删除的分账明细主键集合
* @return 结果
*/
public int deleteRlDividendDetailByIds(Long[] ids);
/**
* 删除分账明细信息
*
* @param id 分账明细主键
* @return 结果
*/
public int deleteRlDividendDetailById(Long id);
/**
* 记录分成比例
*
* @param originalOrder 原始订单对象
* @param userType 用户类型商户代理商
* @return 结果
*/
// public int calculationDividend(RlOrder originalOrder,String userType);
// /**
// * 计算分成金额
// *
// * @param rlDividendDetails 分成明细列表
// * @param totalDividendAmount 分账总金额
// * @return 结果
// */
// public int calculationAmount(List<RlDividendDetailVO> rlDividendDetails, BigDecimal totalDividendAmount);
/**
* 更新退款金额
*
* @param id 分成明细id
* @param userRefundAmount 用户退款金额
* @return 结果
*/
public int updateRefundAmount(Long id, BigDecimal userRefundAmount);
}

View File

@ -72,6 +72,8 @@ public class EDeviceServiceImpl extends ServiceImpl<EDeviceMapper, EDevice> impl
@Autowired
private IEOrderOperService orderOperService;
//
// @Autowired
// private IEtFeeRuleService etFeeRuleService;
@ -247,48 +249,17 @@ public class EDeviceServiceImpl extends ServiceImpl<EDeviceMapper, EDevice> impl
*/
@Override
@DataScope(merchantAlias = "m", userAlias = "u")
public List<EDevice> selectEDeviceListWithIsolate(EDeviceQuery asDevice)
public List<EDeviceVO> selectEDeviceListWithIsolate(EDeviceQuery asDevice)
{
if(ServiceConstants.VEHICLE_STATUS_NOT_BAND.equals(asDevice.getStatus())){
asDevice.setUnBand("1");
asDevice.setStatus(null);
}
List<EDevice> asDevices = deviceMapper.selectEDeviceListWithIsolate(asDevice);
// for (EDevice asDevice1:asDevices){
// Long areaId = asDevice1.getAreaId();
// if (ObjectUtil.isNotNull(areaId) && areaId!=0){
// EtOperatingArea etOperatingArea = etOperatingAreaService.selectEtOperatingAreaByAreaId(areaId);
// asDevice1.setAreaName(etOperatingArea.getAreaName());
// }
// Long modelId = asDevice1.getModelId();
// if (ObjectUtil.isNotNull(modelId)){
// EtModel model = etModelService.selectEtModelByModelId(modelId);
// if(ObjectUtil.isNotNull(model)){
// asDevice1.setModel(model.getModel());
// }
// }
// String status = asDevice1.getStatus();
// if(ObjectUtil.isNotNull(status)){
// String typeName = sysDictDataService.selectDictLabel("as_device_status", status);
// asDevice1.setStatusStr(typeName);
// if(status.equals(ServiceConstants.VEHICLE_STATUS_NOT_BAND) && ObjectUtil.isNotNull(asDevice1.getAreaId())){
// asDevice1.setStatus(ServiceConstants.VEHICLE_STATUS_NOT_LISTING);
// int i = deviceMapper.updateAsDevice(asDevice1);
// }
// }
// if(ObjectUtil.isNull(asDevice1.getAreaId())){
// asDevice1.setStatus(ServiceConstants.VEHICLE_STATUS_NOT_BAND);
// int i = deviceMapper.updateAsDevice(asDevice1);
// }
// if(ObjectUtil.isNotNull(areaId) && areaId!=0){
// SysDept sysDept = wxPayService.getDeptObjByAreaId(areaId);
// //https://dianche.chuantewulian.cn?sn=https://dche.ccttiot.com?sn=3000900
// asDevice1.setQrText(sysDept.getDomain()+"?sn="+asDevice1.getSn());
// asDevice1.setDeptName(sysDept.getDeptName());
// }else{
// asDevice1.setQrText("");
// }
// }
List<EDeviceVO> asDevices = deviceMapper.selectEDeviceListWithIsolate(asDevice);
for (EDeviceVO asDevice1:asDevices){
String orderNo = deviceMapper.getInProgressOrderBySn(asDevice1.getSn());
asDevice1.setInProgressOrderNo(orderNo);
}
return asDevices;
}

View File

@ -356,8 +356,7 @@ public class EOrderServiceImpl implements IEOrderService
@Override
public PrepayResponseVO createOrder(EOrderQuery order, Long userId) {
String orderNo = IdUtils.getOrderNo("zl");
PrepayResponseVO responseVO = getPrepayResponseVO(order,orderNo,ServiceConstants.ORDER_TYPE_LEASE,userId);
return responseVO;
return getPrepayResponseVO(order,orderNo,ServiceConstants.ORDER_TYPE_LEASE,userId);
}
/**
@ -386,7 +385,6 @@ public class EOrderServiceImpl implements IEOrderService
EFeeRule feeRule = feeRuleService.selectRlFeeRuleByRuleId(order.getRuleId());
setFeeRule(type,order, feeRule);
/** 解析地址 analyzeAddress */
// analyzeAddress(order);
order.setCreateTime(DateUtils.getNowDate());
order.setOrderNo(orderNo);
order.setPaid(ServiceConstants.ORDER_PAY_STATUS_NON_PAYMENT);

View File

@ -9,6 +9,7 @@ import com.ruoyi.common.core.domain.entity.EUserVO;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.ServiceUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
@ -858,6 +859,8 @@ public class EUserServiceImpl implements IEUserService{
String orderNo = IdUtils.getOrderNo("tx");
/** 1. 获取当前用户*/
EUser user = userMapper.selectUserById(SecurityUtils.getUserId());
ServiceUtil.assertion(user.getBalance().subtract(withdraw.getAmount()).compareTo(BigDecimal.ZERO)< 0, "用户余额不足,不能提现");
log.info("【管理员提现】查询用户对象:{}", user);
Boolean execute = transactionTemplate.execute(e -> {
/** 2. 记录提现记录*/
withdrawalRecord(withdraw, orderNo, user);

View File

@ -0,0 +1,206 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetail;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailQuery;
import com.ruoyi.system.domain.dividendDetail.RlDividendDetailVO;
import com.ruoyi.system.mapper.RlDividendDetailMapper;
import com.ruoyi.system.service.IRlDividendDetailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
* 分账明细Service业务层处理
*
* @author qzz
* @date 2024-10-10
*/
@Slf4j
@Service
public class RlDividendDetailServiceImpl implements IRlDividendDetailService
{
@Resource
private RlDividendDetailMapper rlDividendDetailMapper;
// @Resource
// private IRlUserExtService userExtService;
//
// @Autowired
// private IRlUserService userService;
//
// @Autowired
// private IRlAgentService agentService;
//
// @Autowired
// private IRlChangeBalanceService changeBalanceService;
/**
* 查询分账明细
*
* @param id 分账明细主键
* @return 分账明细
*/
@Override
public RlDividendDetail selectRlDividendDetailById(Long id)
{
return rlDividendDetailMapper.selectRlDividendDetailById(id);
}
/**
* 查询分账明细列表
*
* @param rlDividendDetail 分账明细
* @return 分账明细
*/
@Override
// @DataScope(agentAlias = "a",userAlias = "u")
public List<RlDividendDetailVO> selectRlDividendDetailList(RlDividendDetailQuery rlDividendDetail)
{
return rlDividendDetailMapper.selectRlDividendDetailList(rlDividendDetail);
}
/**
* 根据订单号查询分账明细列表
* @param orderNo
* @return
*/
@Override
public List<RlDividendDetailVO> selectRlDividendDetailListByOrderNo(String orderNo) {
return rlDividendDetailMapper.selectRlDividendDetailListByOrderNo(orderNo);
}
/**
* 新增分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
@Override
public int insertRlDividendDetail(RlDividendDetail rlDividendDetail)
{
rlDividendDetail.setCreateTime(DateUtils.getNowDate());
return rlDividendDetailMapper.insertRlDividendDetail(rlDividendDetail);
}
/**
* 修改分账明细
*
* @param rlDividendDetail 分账明细
* @return 结果
*/
@Override
public int updateRlDividendDetail(RlDividendDetail rlDividendDetail)
{
return rlDividendDetailMapper.updateRlDividendDetail(rlDividendDetail);
}
/**
* 批量删除分账明细
*
* @param ids 需要删除的分账明细主键
* @return 结果
*/
@Override
public int deleteRlDividendDetailByIds(Long[] ids)
{
return rlDividendDetailMapper.deleteRlDividendDetailByIds(ids);
}
/**
* 删除分账明细信息
*
* @param id 分账明细主键
* @return 结果
*/
@Override
public int deleteRlDividendDetailById(Long id)
{
return rlDividendDetailMapper.deleteRlDividendDetailById(id);
}
// /**
// * 计算分账金额
// * @param originalOrder
// * @return
// */
// @Override
// public int calculationDividend(RlOrder originalOrder,String userType) {
// RlUserExt rlUserExt;
// RlUser rlUser ;
// RlDividendDetail rlDividendDetail = new RlDividendDetail();
// if(userType.equals(ServiceConstants.USER_TYPE_MERCHANT)){
// rlUserExt = userExtService.selectRlUserExtByUserId(originalOrder.getMerchantId());
// rlUser = userService.selectUserById(rlUserExt.getUserId());
// }else if(userType.equals(ServiceConstants.USER_TYPE_AGENT)){
// RlAgentVO rlAgentVO = agentService.selectRlAgentByAgentId(originalOrder.getAgentId());
// rlUserExt = userExtService.selectRlUserExtByUserId(rlAgentVO.getUserid());
// rlUser = userService.selectUserById(rlUserExt.getUserId());
// rlDividendDetail.setDividendProportion(rlAgentVO.getDividendProportion());
// }else{
// throw new ServiceException("用户类型有误");
// }
// rlDividendDetail.setAgentId(originalOrder.getAgentId());
// rlDividendDetail.setPartnerId(rlUserExt.getUserId());
// rlDividendDetail.setOrderNo(originalOrder.getOrderNo());
// rlDividendDetail.setTotalAmount(originalOrder.getPayFee());
// rlDividendDetail.setCreateTime(DateUtils.getNowDate());
// rlDividendDetail.setPartnerName(rlUser.getUserName());
// rlDividendDetail.setPartnerPhone(rlUser.getPhonenumber());
// rlDividendDetail.setPartnerType(rlUser.getUserType());
// rlDividendDetail.setStatus(ServiceConstants.DIVIDEND_STATUS_NOT_SETTLED);
// int i = insertRlDividendDetail(rlDividendDetail);
// if(i>0){
// log.info("=================【微信支付回调】计算合作人分成成功==================");
// }
// return i;
// }
// /**
// * 计算分账金额
// * @param rlDividendDetails 分账明细
// * @return
// */
// @Override
// public int calculationAmount(List<RlDividendDetailVO> rlDividendDetails,BigDecimal totalDividendAmount) {
// log.info("【计算分账金额】计算分账金额开始============");
// for(RlDividendDetailVO dividendDetail:rlDividendDetails){
// log.info("【计算分账金额】租赁费和逾期费进行分成============"+totalDividendAmount);
// RlUserExt rlUserExt = userExtService.selectRlUserExtByUserId(dividendDetail.getPartnerId());
// if(ObjectUtil.isNull(rlUserExt)){
// throw new ServiceException("用户【"+dividendDetail.getPartnerName()+"】不存在");
// }
// if(rlUserExt.getDividendProportion().compareTo(BigDecimal.ZERO)==0 || ObjectUtil.isNull(rlUserExt.getDividendProportion())){
// throw new ServiceException("用户【"+dividendDetail.getPartnerName()+"】分账比例不能为空");
// }
// // 保留两位小数点
// BigDecimal dividendAmount = rlUserExt.getDividendProportion().multiply(totalDividendAmount)
// .setScale(2, RoundingMode.HALF_UP);
// dividendDetail.setDividendAmount(dividendAmount);
// dividendDetail.setStatus(ServiceConstants.DIVIDEND_STATUS_SETTLED);
// updateRlDividendDetail(dividendDetail);
// }
// return 1;
// }
/**
* 更新退款金额
*
* @param id 分成明细id
* @param userRefundAmount 用户退款金额
* @return 结果
*/
@Override
public int updateRefundAmount(Long id, BigDecimal userRefundAmount) {
RlDividendDetail rlDividendDetail = new RlDividendDetail();
rlDividendDetail.setRefundAmount(userRefundAmount);
rlDividendDetail.setId(id);
return rlDividendDetailMapper.updateRlDividendDetail(rlDividendDetail);
}
}

View File

@ -34,12 +34,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectEDeviceListWithIsolate" parameterType="EDevice" resultMap="EDeviceResult">
select de.device_id, de.picture, de.device_name, de.mac, de.sn, de.model_id, de.hardware_version_id, de.vehicle_num,
de.activation_time, de.online_status, de.create_by, de.create_time, de.update_by,de.user_id,de.is_default,
de.activation_time, de.online_status, de.create_by, de.create_time, de.update_by,de.user_id,de.is_default,mo.model,
de.update_time, de.last_time, de.last_location_time, de.gps, de.remark, de.status, de.lock_status, de.location,
de.remaining_power, de.voltage, de.version, de.qrcode, de.longitude, de.latitude, de.signal_strength, de.satellites, de.quality from e_device de
left join e_hardware_version hv on hv.id = de.hardware_version_id
left join e_user u on u.user_id = de.user_id
left join e_user m on m.user_id = de.user_id
left join e_model mo on mo.model_id = de.model_id
where 1 = 1
<if test="deviceName != null and deviceName != ''"> and de.device_name like concat('%', #{deviceName}, '%')</if>
<if test="mac != null and mac != ''"> and de.mac like concat('%', #{mac}, '%')</if>
@ -50,6 +51,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="modelId != null and modelId != ''"> and de.model_id = #{modelId}</if>
<if test="onlineStatus != null and onlineStatus != ''"> and de.online_status = #{onlineStatus}</if>
<if test="version != null and version != ''"> and de.version = #{version}</if>
<if test="keywords != null and keywords != ''">
AND (de.sn LIKE CONCAT('%', #{keywords}, '%') OR de.vehicle_num LIKE CONCAT('%', #{keywords}, '%'))
</if>
<if test="hardwareVersion != null and hardwareVersion != ''"> and hv.version like concat('%', #{hardwareVersion}, '%') </if>
<choose>
<when test="status == '34'">
@ -408,4 +412,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
order by create_time desc
</select>
<select id="getInProgressOrderBySn" resultType="String">
select
o.order_no from e_order o
where o.status = 4
<if test="sn != null and sn != ''">
and o.sn = #{sn}
</if>
order by create_time desc
</select>
</mapper>

View File

@ -37,8 +37,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectRlFeeRuleLongListByModelId" resultType="java.lang.Long">
select r.rule_id from e_fee_rule r
left join e_model_rule mr on mr.rule_id = r.rule_id
select mr.rule_id from e_model_rule mr
where mr.model_id = #{modelId}
</select>

View File

@ -194,7 +194,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectUserBalanceById" resultType="java.math.BigDecimal">
select balance from e_user_ext
select balance from e_user
where user_id = #{userId}
</select>
@ -293,7 +293,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<update id="changeBalance">
update e_user_ext set balance = balance + #{changeAmount} where user_id = #{userId}
update e_user set balance = balance + #{changeAmount} where user_id = #{userId}
</update>
<delete id="deleteUserById" parameterType="Long">

View File

@ -0,0 +1,103 @@
<?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.ruoyi.system.mapper.RlDividendDetailMapper">
<resultMap type="RlDividendDetailVO" id="RlDividendDetailResult" autoMapping="true" />
<sql id="selectRlDividendDetailVo">
select dd.id, dd.agent_id, a.name agentName, dd.partner_id, dd.partner_name, dd.partner_phone, dd.partner_type, dd.order_no,dd.status,dd.refund_amount,
dd.total_amount, dd.dividend_amount, dd.dividend_proportion, dd.create_time from rl_dividend_detail dd
left join rl_agent a on a.agent_id = dd.agent_id
left join rl_user u on u.user_id = dd.partner_id
</sql>
<select id="selectRlDividendDetailList" parameterType="RlDividendDetailQuery" resultMap="RlDividendDetailResult">
<include refid="selectRlDividendDetailVo"/>
where 1=1
<if test="agentId != null "> and dd.agent_id = #{agentId}</if>
<if test="agentName != null "> and a.name like concat('%', #{agentName}, '%')</if>
<if test="partnerId != null "> and dd.partner_id = #{partnerId}</if>
<if test="partnerName != null "> and dd.partner_name like concat('%', #{partnerName}, '%')</if>
<if test="partnerPhone != null "> and dd.partner_phone like concat('%', #{partnerPhone}, '%')</if>
<if test="partnerType != null "> and dd.partner_type = #{partnerType}</if>
<if test="orderNo != null and orderNo != ''"> and dd.order_no like concat('%', #{orderNo}, '%')</if>
<if test="totalAmount != null "> and dd.total_amount = #{totalAmount}</if>
<if test="dividendAmount != null "> and dd.dividend_amount = #{dividendAmount}</if>
<if test="dividendProportion != null "> and dd.dividend_proportion = #{dividendProportion}</if>
${params.dataScope}
order by dd.create_time desc
</select>
<select id="selectRlDividendDetailById" parameterType="Long" resultMap="RlDividendDetailResult">
<include refid="selectRlDividendDetailVo"/>
where id = #{id}
</select>
<select id="selectRlDividendDetailListByOrderNo" parameterType="String"
resultMap="RlDividendDetailResult">
<include refid="selectRlDividendDetailVo"/>
where dd.order_no = #{orderNo}
</select>
<insert id="insertRlDividendDetail" parameterType="RlDividendDetail" useGeneratedKeys="true" keyProperty="id">
insert into rl_dividend_detail
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="agentId != null">agent_id,</if>
<if test="partnerId != null">partner_id,</if>
<if test="partnerName != null">partner_name,</if>
<if test="partnerPhone != null">partner_phone,</if>
<if test="partnerType != null">partner_type,</if>
<if test="orderNo != null and orderNo != ''">order_no,</if>
<if test="totalAmount != null">total_amount,</if>
<if test="dividendAmount != null">dividend_amount,</if>
<if test="dividendProportion != null">dividend_proportion,</if>
<if test="createTime != null">create_time,</if>
<if test="status != null">status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="agentId != null">#{agentId},</if>
<if test="partnerId != null">#{partnerId},</if>
<if test="partnerName != null">#{partnerName},</if>
<if test="partnerPhone != null">#{partnerPhone},</if>
<if test="partnerType != null">#{partnerType},</if>
<if test="orderNo != null and orderNo != ''">#{orderNo},</if>
<if test="totalAmount != null">#{totalAmount},</if>
<if test="dividendAmount != null">#{dividendAmount},</if>
<if test="dividendProportion != null">#{dividendProportion},</if>
<if test="createTime != null">#{createTime},</if>
<if test="status != null">#{status},</if>
</trim>
</insert>
<update id="updateRlDividendDetail" parameterType="RlDividendDetail">
update rl_dividend_detail
<trim prefix="SET" suffixOverrides=",">
<if test="agentId != null">agent_id = #{agentId},</if>
<if test="partnerId != null">partner_id = #{partnerId},</if>
<if test="partnerName != null">partner_name = #{partnerName},</if>
<if test="partnerPhone != null">partner_phone = #{partnerPhone},</if>
<if test="partnerType != null">partner_type = #{partnerType},</if>
<if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
<if test="totalAmount != null">total_amount = #{totalAmount},</if>
<if test="dividendAmount != null">dividend_amount = #{dividendAmount},</if>
<if test="dividendProportion != null">dividend_proportion = #{dividendProportion},</if>
<if test="refundAmount != null">refund_amount = #{refundAmount},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="status != null">status = #{status},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteRlDividendDetailById" parameterType="Long">
delete from rl_dividend_detail where id = #{id}
</delete>
<delete id="deleteRlDividendDetailByIds" parameterType="String">
delete from rl_dividend_detail where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>