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}
+
+
+
+ select
+
+ ${groupBy} as `key`,
+
+ count(stb.bill_id) as `count`
+ from
+
+
+
+
+ group by `key`
+
+
+
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));
+ }
+}