diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java index 4296ab93..cd2767fd 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java @@ -94,6 +94,9 @@ public class DeviceVO extends Device implements IotDevice { @JsonView(DeviceView.SuitList.class) private Boolean mchShowBillMobile; + @ApiModelProperty("正在使用中的订单数量") + private Integer usingBillCount; + @Override public String iotMac1() { return getMac(); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml index 6f408462..72573f26 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml @@ -10,96 +10,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - and ss.name like concat('%', #{storeName}, '%') - and sd.service_type = #{serviceType} - and sd.device_name like concat('%', #{deviceName}, '%') - and sm.model_name like concat('%', #{model}, '%') - and sd.mac = #{mac} - and sd.mac2 = #{mac2} - - and ( - sd.mac = #{anyMac} or sd.mac2 = #{anyMac} - ) - - - and ( - sd.mac like concat('%', #{likeAnyMac}, '%') or sd.mac2 like concat('%', #{likeAnyMac}, '%') - ) - - and sd.online_status = #{onlineStatus} - and sd.online_status1 = #{onlineStatus1} - and sd.online_status2 = #{onlineStatus2} - and sd.status = #{status} - and su.user_name like concat('%', #{userName}, '%') - and sd.nick_name like concat('%', #{nickName}, '%') - and sd.user_id = #{userId} - and sd.store_id = #{storeId} - and sd.device_id = #{deviceId} - and sd.rent_time >= #{startRentTime} - and sd.device_id <= #{endRentTime} - and sd.device_no like concat('%', #{deviceNo}, '%') - and sd.lock_user_id = #{lockUserId} - and agent_id = #{agentId} - and sua.user_name like concat('%', #{agentName}, '%') - and sd.service_mode = #{serviceMode} - and sd.version like concat('%', #{version}, '%') - - - and (sd.rent_time is null or sd.rent_time <= now()) - - - and (sd.rent_time is not null and sd.rent_time > now()) - - - - and sd.device_id in - - #{item} - - - - and sd.device_no in - - #{item} - - - - - and sd.user_id is not null - - - and sd.user_id is null - - - - and sd.store_id in - - #{item} - - - - and sd.user_id in - - #{item} - - - - and sd.model_id in - - #{item} - - - - and sd.mac in - - #{item} - - - and sd.deleted = false - and sd.deleted = #{deleted} - - select sd.device_id, @@ -179,6 +89,96 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join sm_user sua on sua.user_id = sd.agent_id + + and ss.name like concat('%', #{storeName}, '%') + and sd.service_type = #{serviceType} + and sd.device_name like concat('%', #{deviceName}, '%') + and sm.model_name like concat('%', #{model}, '%') + and sd.mac = #{mac} + and sd.mac2 = #{mac2} + + and ( + sd.mac = #{anyMac} or sd.mac2 = #{anyMac} + ) + + + and ( + sd.mac like concat('%', #{likeAnyMac}, '%') or sd.mac2 like concat('%', #{likeAnyMac}, '%') + ) + + and sd.online_status = #{onlineStatus} + and sd.online_status1 = #{onlineStatus1} + and sd.online_status2 = #{onlineStatus2} + and sd.status = #{status} + and su.user_name like concat('%', #{userName}, '%') + and sd.nick_name like concat('%', #{nickName}, '%') + and sd.user_id = #{userId} + and sd.store_id = #{storeId} + and sd.device_id = #{deviceId} + and sd.rent_time >= #{startRentTime} + and sd.device_id <= #{endRentTime} + and sd.device_no like concat('%', #{deviceNo}, '%') + and sd.lock_user_id = #{lockUserId} + and agent_id = #{agentId} + and sua.user_name like concat('%', #{agentName}, '%') + and sd.service_mode = #{serviceMode} + and sd.version like concat('%', #{version}, '%') + + + and (sd.rent_time is null or sd.rent_time <= now()) + + + and (sd.rent_time is not null and sd.rent_time > now()) + + + + and sd.device_id in + + #{item} + + + + and sd.device_no in + + #{item} + + + + + and sd.user_id is not null + + + and sd.user_id is null + + + + and sd.store_id in + + #{item} + + + + and sd.user_id in + + #{item} + + + + and sd.model_id in + + #{item} + + + + and sd.mac in + + #{item} + + + and sd.deleted = false + and sd.deleted = #{deleted} + + + + + + + + + + + + insert into ss_risk + + user_id, + type, + reason, + end_time, + create_time, + real_name_id, + + + #{userId}, + #{type}, + #{reason}, + #{endTime}, + #{createTime}, + #{realNameId}, + + + + + update ss_risk + + + + where risk_id = #{data.riskId} + + + + user_id = #{data.userId}, + type = #{data.type}, + reason = #{data.reason}, + end_time = #{data.endTime}, + create_time = #{data.createTime}, + real_name_id = #{data.realNameId}, + + + + delete from ss_risk where risk_id = #{riskId} + + + + delete from ss_risk where risk_id in + + #{riskId} + + + diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/IRiskService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/IRiskService.java new file mode 100644 index 00000000..f948abbd --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/IRiskService.java @@ -0,0 +1,63 @@ +package com.ruoyi.ss.risk.service; + +import java.util.List; +import com.ruoyi.ss.risk.domain.Risk; +import com.ruoyi.ss.risk.domain.RiskVO; +import com.ruoyi.ss.risk.domain.RiskQuery; + +/** + * 风控Service接口 + * + * @author ruoyi + * @date 2024-10-18 + */ +public interface IRiskService +{ + /** + * 查询风控 + * + * @param riskId 风控主键 + * @return 风控 + */ + public RiskVO selectRiskByRiskId(Long riskId); + + /** + * 查询风控列表 + * + * @param risk 风控 + * @return 风控集合 + */ + public List selectRiskList(RiskQuery risk); + + /** + * 新增风控 + * + * @param risk 风控 + * @return 结果 + */ + public int insertRisk(Risk risk); + + /** + * 修改风控 + * + * @param risk 风控 + * @return 结果 + */ + public int updateRisk(Risk risk); + + /** + * 批量删除风控 + * + * @param riskIds 需要删除的风控主键集合 + * @return 结果 + */ + public int deleteRiskByRiskIds(Long[] riskIds); + + /** + * 删除风控信息 + * + * @param riskId 风控主键 + * @return 结果 + */ + public int deleteRiskByRiskId(Long riskId); +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/impl/RiskServiceImpl.java b/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/impl/RiskServiceImpl.java new file mode 100644 index 00000000..69823b59 --- /dev/null +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/risk/service/impl/RiskServiceImpl.java @@ -0,0 +1,97 @@ +package com.ruoyi.ss.risk.service.impl; + +import java.util.List; +import com.ruoyi.common.utils.DateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.ss.risk.mapper.RiskMapper; +import com.ruoyi.ss.risk.domain.Risk; +import com.ruoyi.ss.risk.domain.RiskVO; +import com.ruoyi.ss.risk.domain.RiskQuery; +import com.ruoyi.ss.risk.service.IRiskService; + +/** + * 风控Service业务层处理 + * + * @author ruoyi + * @date 2024-10-18 + */ +@Service +public class RiskServiceImpl implements IRiskService +{ + @Autowired + private RiskMapper riskMapper; + + /** + * 查询风控 + * + * @param riskId 风控主键 + * @return 风控 + */ + @Override + public RiskVO selectRiskByRiskId(Long riskId) + { + return riskMapper.selectRiskByRiskId(riskId); + } + + /** + * 查询风控列表 + * + * @param risk 风控 + * @return 风控 + */ + @Override + public List selectRiskList(RiskQuery risk) + { + return riskMapper.selectRiskList(risk); + } + + /** + * 新增风控 + * + * @param risk 风控 + * @return 结果 + */ + @Override + public int insertRisk(Risk risk) + { + risk.setCreateTime(DateUtils.getNowDate()); + return riskMapper.insertRisk(risk); + } + + /** + * 修改风控 + * + * @param risk 风控 + * @return 结果 + */ + @Override + public int updateRisk(Risk risk) + { + return riskMapper.updateRisk(risk); + } + + /** + * 批量删除风控 + * + * @param riskIds 需要删除的风控主键 + * @return 结果 + */ + @Override + public int deleteRiskByRiskIds(Long[] riskIds) + { + return riskMapper.deleteRiskByRiskIds(riskIds); + } + + /** + * 删除风控信息 + * + * @param riskId 风控主键 + * @return 结果 + */ + @Override + public int deleteRiskByRiskId(Long riskId) + { + return riskMapper.deleteRiskByRiskId(riskId); + } +} diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java index 0582d9cb..42a45f86 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.java @@ -1,5 +1,7 @@ package com.ruoyi.ss.transactionBill.mapper; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.domain.vo.CommonCountVO; import com.ruoyi.dashboard.domain.vo.BillCountVo; import com.ruoyi.ss.transactionBill.domain.TransactionBill; import com.ruoyi.ss.transactionBill.domain.TransactionBillQuery; @@ -197,4 +199,9 @@ public interface TransactionBillMapper * 查询金额统计 */ List> selectCommonSumOfMoney(@Param("query") TransactionBillQuery query, @Param("groupBy") String groupBy); + + /** + * 查询统计数量 + */ + List selectCountGroupBy(@Param("query") TransactionBillQuery query, @Param("groupBy") String groupBy); } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml index 05096402..f4f807f0 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/mapper/TransactionBillMapper.xml @@ -421,6 +421,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + SELECT LAST_INSERT_ID(); diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java index a18bb6f3..e315d395 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/transactionBill/service/TransactionBillService.java @@ -1,5 +1,6 @@ package com.ruoyi.ss.transactionBill.service; +import com.alibaba.fastjson2.JSONObject; import com.ruoyi.dashboard.domain.vo.BillCountVo; import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.payBill.domain.vo.DoPayVO; @@ -328,4 +329,6 @@ public interface TransactionBillService * @return */ int receiveMchShowMobileAmount(TransactionBillVO bill); + + List selectCountGroupBy(TransactionBillQuery query, String groupBy); } 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 1a8ef528..6f7f280b 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 @@ -1,5 +1,6 @@ package com.ruoyi.ss.transactionBill.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.github.pagehelper.PageHelper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.redis.RedisLock; @@ -21,7 +22,6 @@ import com.ruoyi.ss.bonus.service.BonusService; import com.ruoyi.ss.channelWithdraw.domain.ChannelWithdrawVO; import com.ruoyi.ss.channelWithdraw.service.ChannelWithdrawService; import com.ruoyi.dashboard.domain.vo.BillCountVo; -import com.ruoyi.ss.device.domain.enums.DeviceOnlineStatus; import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.device.service.DeviceService; import com.ruoyi.ss.payBill.domain.PayBillQuery; @@ -424,6 +424,11 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return result == null ? 0 :result; } + @Override + public List selectCountGroupBy(TransactionBillQuery query, String groupBy) { + return transactionBillMapper.selectCountGroupBy(query, groupBy); + } + private int fix(TransactionBillVO bill) { if (bill == null || bill.getBillId() == null) { log.warn("修复订单数据失败:订单不存在或订单ID为空"); @@ -924,21 +929,18 @@ public class TransactionBillServiceImpl implements TransactionBillService, After ); ServiceUtil.assertion(updateRecharge != 1, "设备充值状态发生变化,请稍后重试"); + // 充值设备 try { if (SuitFeeType.TIME.getType().equals(bill.getSuitFeeType())) { - // 设备充值时长 - return deviceService.addTime(bill.getDeviceId(), transactionBillConverter.toRechargeSeconds(bill), true); + // 设备设置时长 + long seconds = transactionBillConverter.toRechargeSeconds(bill); + int setTime = deviceService.setTime(device, seconds); + ServiceUtil.assertion(setTime != 1, "设备时长充值失败"); } else if (SuitFeeType.COUNT.getType().equals(bill.getSuitFeeType())) { - // 若设备剩余电量为负数,则补偿设备电量 + // 设备设置电量 BigDecimal ele = transactionBillConverter.toRechargeEle(bill); - if (device.getSurplusEle() != null && device.getSurplusEle().compareTo(BigDecimal.ZERO) < 0) { - ele = ele.add(device.getSurplusEle().abs()); - } - // 设备充值电量 - CommandResponse res = iotService.addEle(device, ele); - ServiceUtil.assertion(res == null, "设备充值失败,返回数据为空"); - ServiceUtil.assertion(!res.isSuccess(), "设备充值失败:" + res.getMsg()); - return true; + int setEle = deviceService.setEle(device, ele); + ServiceUtil.assertion(setEle != 1, "设备时长充值失败"); } else { throw new ServiceException("不支持的套餐类型"); } @@ -948,6 +950,8 @@ public class TransactionBillServiceImpl implements TransactionBillService, After openMsg.set(e.getMessage()); return false; } + + return true; }); // 是否成功 @@ -980,8 +984,7 @@ public class TransactionBillServiceImpl implements TransactionBillService, After return 0; } - LocalDateTime now = LocalDateTime.now(); - LocalDateTime startTime = device.getExpireTime() == null || now.isAfter(device.getExpireTime()) ? now : device.getExpireTime(); + LocalDateTime startTime = LocalDateTime.now(); TransactionBill data = new TransactionBill(); data.setBillId(bill.getBillId()); @@ -1913,7 +1916,6 @@ public class TransactionBillServiceImpl implements TransactionBillService, After @Override public List selectUsingBill(TransactionBillQuery query) { query.setIsUsing(true); - query.setStatusList(TransactionBillStatus.asList(TransactionBillStatus.SUCCESS, TransactionBillStatus.SUCCESS_DEPOSIT)); query.setType(TransactionBillType.RECHARGE.getType()); return this.selectSmTransactionBillList(query); } diff --git a/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RiskController.java b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RiskController.java new file mode 100644 index 00000000..df90c49f --- /dev/null +++ b/smart-switch-web/src/main/java/com/ruoyi/web/controller/ss/RiskController.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.risk.domain.Risk; +import com.ruoyi.ss.risk.domain.RiskVO; +import com.ruoyi.ss.risk.domain.RiskQuery; +import com.ruoyi.ss.risk.service.IRiskService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 风控Controller + * + * @author ruoyi + * @date 2024-10-18 + */ +@RestController +@RequestMapping("/ss/risk") +public class RiskController extends BaseController +{ + @Autowired + private IRiskService riskService; + + /** + * 查询风控列表 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:list')") + @GetMapping("/list") + public TableDataInfo list(RiskQuery query) + { + startPage(); + startOrderBy(); + List list = riskService.selectRiskList(query); + return getDataTable(list); + } + + /** + * 导出风控列表 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:export')") + @Log(title = "风控", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, RiskQuery query) + { + List list = riskService.selectRiskList(query); + ExcelUtil util = new ExcelUtil(RiskVO.class); + util.exportExcel(response, list, "风控数据"); + } + + /** + * 获取风控详细信息 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:query')") + @GetMapping(value = "/{riskId}") + public AjaxResult getInfo(@PathVariable("riskId") Long riskId) + { + return success(riskService.selectRiskByRiskId(riskId)); + } + + /** + * 新增风控 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:add')") + @Log(title = "风控", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Risk risk) + { + return toAjax(riskService.insertRisk(risk)); + } + + /** + * 修改风控 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:edit')") + @Log(title = "风控", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Risk risk) + { + return toAjax(riskService.updateRisk(risk)); + } + + /** + * 删除风控 + */ + @PreAuthorize("@ss.hasPermi('ss:risk:remove')") + @Log(title = "风控", businessType = BusinessType.DELETE) + @DeleteMapping("/{riskIds}") + public AjaxResult remove(@PathVariable Long[] riskIds) + { + return toAjax(riskService.deleteRiskByRiskIds(riskIds)); + } +}