diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java index 2b8cc2b..702fcb5 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -1,6 +1,26 @@ package com.ruoyi.web.controller.system; -import cn.hutool.core.util.ObjectUtil; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.lang3.ArrayUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.annotation.Log; @@ -18,18 +38,8 @@ import com.ruoyi.system.mapper.EtOperatingAreaMapper; import com.ruoyi.system.mapper.EtOrderMapper; import com.ruoyi.system.service.IEtOperatingAreaService; import com.ruoyi.system.service.ISysDeptService; -import org.apache.commons.lang3.ArrayUtils; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; +import cn.hutool.core.util.ObjectUtil; /** * 运营商信息 @@ -304,4 +314,10 @@ public class SysDeptController extends BaseController return value != null ? value : defaultValue; } + @Log(title = "增减运营商余额", businessType = BusinessType.UPDATE) + @PutMapping("/changeBalance") + public AjaxResult changeBalance(Long deptId, BigDecimal amount, String reason) + { + return toAjax(deptService.changeBalance(deptId, amount, reason)); + } } diff --git a/electripper-admin/src/main/resources/application-druid.yml b/electripper-admin/src/main/resources/application-druid.yml index f9d1188..25b4462 100644 --- a/electripper-admin/src/main/resources/application-druid.yml +++ b/electripper-admin/src/main/resources/application-druid.yml @@ -9,7 +9,7 @@ spring: # url: jdbc:mysql://47.120.68.19:3306/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 url: jdbc:mysql://47.120.68.19:3306/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: 123456 + password: d0dbe100b71c1d09 # url: jdbc:mysql://117.26.179.22:61110/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 # username: root # password: d0dbe100b71c1d09 diff --git a/electripper-admin/src/test/java/MainTests.java b/electripper-admin/src/test/java/MainTests.java deleted file mode 100644 index 958442d..0000000 --- a/electripper-admin/src/test/java/MainTests.java +++ /dev/null @@ -1,105 +0,0 @@ -import com.ruoyi.RuoYiApplication; -import com.ruoyi.common.constant.IotConstants; -import com.ruoyi.common.constant.ServiceConstants; -import com.ruoyi.common.utils.map.GeoUtils; -import com.ruoyi.common.utils.onenet.Token; -import com.ruoyi.system.domain.AsDevice; -import com.ruoyi.system.domain.EtOperatingArea; -import com.ruoyi.system.service.IAsDeviceService; -import com.ruoyi.system.service.IEtOperatingAreaService; -import com.ruoyi.system.service.ISysConfigService; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.locationtech.jts.geom.Geometry; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -import javax.annotation.Resource; -import java.math.BigDecimal; - - -@Slf4j -@RunWith(SpringRunner.class) -@SpringBootTest(classes = RuoYiApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class MainTests { - - @Resource - private IAsDeviceService asDeviceService; - - @Autowired - private ISysConfigService sysConfigService; - - @Resource - private IEtOperatingAreaService etOperatingAreaService; - - @Test - @SneakyThrows - public void testSelectActivityById() { - // 记录开始时间 - long startTime = System.nanoTime(); - -// AsDevice device = asDeviceService.selectAsDeviceByMac("75D30EA71454"); -// BigDecimal lon = new BigDecimal("120.25709"); -// BigDecimal lat = new BigDecimal("27.105487"); -// -// EtOperatingArea area = etOperatingAreaService.selectEtOperatingAreaByAreaId(device.getAreaId()); -// String isAdminUnlocking = device.getIsAdminUnlocking();// 是否是管理员开锁:0-否;1-是 -// -// String nearBoundaryDistanceConfig = sysConfigService.selectConfigByKey("near.boundary.distance");// 靠近运营区边界时的播报距离 -// log.info("靠近运营区边界时的播报距离==================:" + nearBoundaryDistanceConfig); -// double nearBoundaryDistance = Double.parseDouble(nearBoundaryDistanceConfig); -// String exceedArea = sysConfigService.selectConfigByKey("exceed.area.distance");// 超出运营区外断电距离 -// log.info("超出运营区外断电距离================:" + exceedArea); -// int exceedDistance = Integer.parseInt(exceedArea); -// -// -// // 创建多边形对象 -// Geometry polygon = GeoUtils.fromWkt(area.getBoundary()); -// // 是否在缩短后的运营区边界内 -// boolean inPolygonWithTolerance = GeoUtils.isInPolygonWithShorten(lon.toString(), lat.toString(), polygon, nearBoundaryDistance); -// if(!inPolygonWithTolerance && !isAdminUnlocking.equals("1")){//没有在缩短后的运营区边界内 -// boolean inPolygonWithTolerance1 = GeoUtils.isInPolygonWithTolerance(lon.toString(), lat.toString(), polygon, 0);// 是否在运营区内 -// boolean isNearBoundary = GeoUtils.isInPolygonWithTolerance(lon.toString(), lat.toString(), polygon, exceedDistance ); -// if(inPolygonWithTolerance1){//是否在运营区边界内 -// // 在靠近运营区边界时发警报 -// log.info("靠近运营区边界发警告命令--SN:" + device.getSn()); -// asDeviceService.sendCommand(device.getMac(), Token.getToken(), IotConstants.COMMAND_PLAY2, "靠近运营区边界", null, null); -// }else if(isNearBoundary){ // 是否在超出运营区边界多少米内 -// //在20米范围内,发报警 -// log.info("超出运营区"+exceedDistance+"米内发送警告命令--SN:" + device.getSn()); -// asDeviceService.sendCommand(device.getMac(), Token.getToken(), IotConstants.COMMAND_PLAY3, "超出运营区"+exceedDistance+"米内",null,null); -// }else{ -// // 超出运营区外断电 -// String areaOutOutage = area.getAreaOutOutage(); -// if (areaOutOutage.equals("1")) { // 超出营运区断电 -// log.info("超出营运区断电命令--SN:" + device.getSn()); -// asDeviceService.sendCommand(device.getMac(), Token.getToken(), IotConstants.COMMAND_QLOSE+IotConstants.COMMAND_FREQUENCY_5, "超出营运区断电",null,null); -// device.setLockStatus(ServiceConstants.LOCK_STATUS_CLOSE); -// int updateAsDevice = asDeviceService.updateAsDevice(device); -// if (updateAsDevice > 0) { -// log.info("禁行区内断电--更新设备锁状态成功SN:" + device.getSn()); -// } -// } -// } -// }else{ -// log.info("在运营区域内"); -// } -// -// // 记录结束时间 -// long endTime = System.nanoTime(); -// -// // 计算执行时间(以毫秒为单位) -// long duration = (endTime - startTime) / 1_000_000; -// -// // 输出执行时间 -// System.out.println("Execution time: " + duration + " milliseconds"); - } - - -} - - - diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java index 348ff9b..293fa77 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -2,7 +2,9 @@ package com.ruoyi.system.mapper; import java.math.BigDecimal; import java.util.List; + import org.apache.ibatis.annotations.Param; + import com.ruoyi.common.core.domain.entity.SysDept; /** @@ -134,7 +136,7 @@ public interface SysDeptMapper */ SysDept selectEtOperatingAreaBySerialNumber(String wechatpaySerial); - void changeDeptBalance(@Param("amount")BigDecimal amount,@Param("deptId")Long deptId); + int changeDeptBalance(@Param("amount")BigDecimal amount,@Param("deptId")Long deptId); /** * 获取所有运营商数 @@ -163,4 +165,12 @@ public interface SysDeptMapper */ public int checkDeptExistFeeRule(Long deptId); + /** + * 查询部门余额 + * + * @param deptId 部门ID + * @return 结果 + */ + public BigDecimal selectDeptBalanceForUpdate(Long deptId); + } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/electripper-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index bfd19f4..e263182 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -2,9 +2,9 @@ package com.ruoyi.system.service; import java.math.BigDecimal; import java.util.List; + import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; -import com.ruoyi.common.core.domain.entity.SysUser; /** * 部门管理 服务层 @@ -200,4 +200,9 @@ public interface ISysDeptService * 所有余额 */ BigDecimal selectAllBalance(); + + /** + * 增减运营商余额 + */ + int changeBalance(Long deptId, BigDecimal amount, String reason); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index d609403..d324aaf 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -1,8 +1,21 @@ package com.ruoyi.system.service.impl; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.support.TransactionTemplate; + import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; @@ -17,30 +30,43 @@ import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.*; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.SendAliSmsUtil; +import com.ruoyi.common.utils.SendSmsVo; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.uuid.IdUtils; -import com.ruoyi.system.domain.*; -import com.ruoyi.system.mapper.*; -import com.ruoyi.system.service.*; -import com.wechat.pay.java.service.profitsharing.model.AddReceiverResponse; -import com.wechat.pay.java.service.profitsharing.model.DeleteReceiverResponse; +import com.ruoyi.system.domain.EtAreaDept; +import com.ruoyi.system.domain.EtCapitalFlow; +import com.ruoyi.system.domain.EtFeeRule; +import com.ruoyi.system.domain.EtModel; +import com.ruoyi.system.domain.EtMsgLog; +import com.ruoyi.system.domain.EtOperatingArea; +import com.ruoyi.system.domain.EtOrder; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.AsUserMapper; +import com.ruoyi.system.mapper.EtAreaDeptMapper; +import com.ruoyi.system.mapper.EtCapitalFlowMapper; +import com.ruoyi.system.mapper.EtMsgLogMapper; +import com.ruoyi.system.mapper.EtOrderMapper; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysUserMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.CallbackService; +import com.ruoyi.system.service.IAsUserService; +import com.ruoyi.system.service.IEtFeeRuleService; +import com.ruoyi.system.service.IEtModelService; +import com.ruoyi.system.service.IEtOperatingAreaService; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysDeptService; +import com.ruoyi.system.service.IWxPayService; import com.wechat.pay.java.service.transferbatch.model.TransferDetailInput; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.support.TransactionTemplate; -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; /** * 部门管理 服务实现 @@ -117,6 +143,9 @@ public class SysDeptServiceImpl implements ISysDeptService @Resource private EtMsgLogMapper etMsgLogMapper; + @Autowired + private EtOrderMapper etOrderMapper; + /** * 查询部门管理数据 * @@ -830,4 +859,61 @@ public class SysDeptServiceImpl implements ISysDeptService public int bandAppUser(SysDept dept) { return deptMapper.updateDept(dept); } + + /** + * 增减运营商余额 + */ + @Override + public int changeBalance(Long deptId, BigDecimal amount, String reason) { + if (deptId == null || amount == null) { + throw new ServiceException("参数不能为空"); + } + + SysDept dept = selectDeptById(deptId); + if (dept == null) { + throw new ServiceException("代理商不存在"); + } + + EtOrder order = etOrderMapper.selectEtOrderByOrderNo(reason); + if (order == null) { + throw new ServiceException("订单号为" + reason + "的订单不存在"); + } + + Integer result = transactionTemplate.execute(status -> { + + // 获取当前余额 + BigDecimal currentBalance = deptMapper.selectDeptBalanceForUpdate(deptId); + if (currentBalance == null) { + throw new ServiceException("当前代理商余额为空"); + } + + // 计算新的余额 + BigDecimal newBalance = currentBalance.add(amount); + + int rows = deptMapper.changeDeptBalance(amount, deptId); + + if (rows > 0) { + EtCapitalFlow etCapitalFlow = new EtCapitalFlow(); + etCapitalFlow.setOwnerId(deptId); + etCapitalFlow.setBusType("a"); // 账变修正 + etCapitalFlow.setOwner(dept.getDeptName()); + etCapitalFlow.setOwnerPhone(dept.getPhone()); + etCapitalFlow.setType(amount.compareTo(BigDecimal.ZERO) > 0 ? ServiceConstants.FLOW_TYPE_INCOME : ServiceConstants.FLOW_TYPE_DISBURSE); + etCapitalFlow.setOwnerType(ServiceConstants.OWNER_TYPE_OPERATOR); + etCapitalFlow.setStatus(ServiceConstants.FLOW_STATUS_COMPLETE); + etCapitalFlow.setHandlingCharge(new BigDecimal(0)); + etCapitalFlow.setCreateBy(SecurityUtils.getUsername()); + etCapitalFlow.setCreateTime(DateUtils.getNowDate()); + etCapitalFlow.setOperatorBalance(newBalance); + etCapitalFlow.setOrderNo(reason); + etCapitalFlow.setOperatorDividend(amount); + etCapitalFlow.setAreaId(order.getAreaId()); + etCapitalFlowMapper.insertEtCapitalFlow(etCapitalFlow); + } + + return rows; + }); + + return result == null ? 0 : result; + } } diff --git a/electripper-system/src/main/resources/mapper/system/SysDeptMapper.xml b/electripper-system/src/main/resources/mapper/system/SysDeptMapper.xml index 826e6df..5123636 100644 --- a/electripper-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -275,4 +275,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select COALESCE(SUM(balance), 0) from sys_dept where del_flag = '0' + + +