diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppController.java index 45ec0a7..50e3224 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppController.java @@ -1,12 +1,13 @@ package com.ruoyi.web.controller.app; import cn.hutool.core.util.StrUtil; -import com.ruoyi.common.constant.ServiceConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.AsArticleClassify; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CommonUtil; -import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.map.GeoUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.service.*; import com.wechat.pay.java.service.payments.model.Transaction; @@ -46,8 +47,21 @@ public class AppController extends BaseController @Autowired private IWxPayService wxPayService; + @Autowired + private IAsArticleClassifyService asArticleClassifyService; + /** + * 根据查询文章分类列表 + */ + @GetMapping("/classify/list") + public AjaxResult classifyList(AsArticleClassify asArticleClassify) + { + logger.info("查询分类列表:【asArticleClassify="+asArticleClassify+"】"); + List asArticleClassifies = asArticleClassifyService.selectClassifyList(asArticleClassify); + return success(asArticleClassifies); + } + /** * 查询文章列表 */ @@ -273,17 +287,6 @@ public class AppController extends BaseController return success(orders); } - /** - * 根据条件模糊查询车辆信息 - * type:1-sn,2-mac,3-车牌号 - */ - @GetMapping("/device/search") - public AjaxResult deviceSearch(String key,String type) - { - logger.info("根据条件模糊查询车辆信息:【key="+key+"】,【type="+type+"】"); - List asDevices = asDeviceService.deviceSearch(key,type); - return success(asDevices); - } /** * 根据定位获取地址 逆地理编码 @@ -340,4 +343,43 @@ public class AppController extends BaseController return toAjax(etOrderService.deleteEtOrderByOrderNo(orderNo)); } + /** + * 根据mac号判断是否有绑定过 + */ + @GetMapping("/isBandByMac") + public AjaxResult isBandByMac(String mac) + { + AjaxResult ajax = AjaxResult.success(); + logger.info("根据mac号判断是否有绑定过:【mac="+mac+"】"); + if(StrUtil.isBlank(mac)){ + throw new ServiceException("mac号不能为空"); + } + ajax.put(AjaxResult.DATA_TAG,asDeviceService.isBandByMac(mac)); + return ajax; + } + + /** + * 计算订单距离 + */ + @GetMapping("/calculateDistance") + public AjaxResult calculateDistance() + { + EtOrder order = new EtOrder(); + order.setType("1"); + List orders = etOrderService.selectEtOrderList(order); + for(EtOrder etOrder:orders){ + String tripRouteStr = etOrder.getTripRouteStr(); + if(StrUtil.isNotBlank(tripRouteStr)){ + double[][] doubles = GeoUtils.parseJsonTrack(tripRouteStr); + double v = GeoUtils.calculateTotalDistance(doubles); + etOrder.setDistance((int)Math.round(v)); + int updateEtOrder = etOrderService.updateEtOrder(etOrder); + if(updateEtOrder>0){ + logger.info("计算订单距离成功:【orderNo="+etOrder.getOrderNo()+"】"); + } + } + } + return AjaxResult.success(); + } + } diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java index 2e0926b..a3a00a0 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/app/AppVerifyController.java @@ -24,6 +24,8 @@ import com.ruoyi.system.domain.response.FaultResponse; import com.ruoyi.system.domain.response.OrderResponse; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.mapper.AsDeviceMapper; +import com.ruoyi.system.mapper.AsUserMapper; +import com.ruoyi.system.mapper.EtOrderMapper; import com.ruoyi.system.service.*; import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; import org.jetbrains.annotations.NotNull; @@ -83,6 +85,15 @@ public class AppVerifyController extends BaseController @Resource private ISysUserService sysUserService; + @Resource + private AsUserMapper asUserMapper; + + @Resource + private EtOrderMapper etOrderMapper; + + @Autowired + private ISysUserService userService; + /** * 故障上报 @@ -209,6 +220,7 @@ public class AppVerifyController extends BaseController @GetMapping("/order/list") public TableDataInfo orderList(EtOrder etOrder) { + logger.info("【我的订单列表】接收到的参数:{}", JSON.toJSON(etOrder)); startPage(); List list = etOrderService.selectEtOrderList(etOrder); return getDataTable(list); @@ -240,12 +252,12 @@ public class AppVerifyController extends BaseController if(!ServiceConstants.ORDER_TYPE_RIDING.equals(etOrder1.getType())){ throw new ServiceException("改价失败,类型必须是骑行订单"); } - if(!ServiceConstants.ORDER_STATUS_RIDING_END.equals(etOrder1.getStatus()) && !ServiceConstants.ORDER_STATUS_CANCEL_APPOINTMENT.equals(etOrder1.getStatus())){ - throw new ServiceException("改价失败,订单未结束,订单状态:"+etOrder1.getStatus()); - } if(!ServiceConstants.ORDER_PAY_STATUS_NON_PAYMENT.equals(etOrder1.getPaid())){ throw new ServiceException("订单已支付,不能改价"); } + if(!ServiceConstants.ORDER_STATUS_RIDING_END.equals(etOrder1.getStatus()) && !ServiceConstants.ORDER_STATUS_CANCEL_APPOINTMENT.equals(etOrder1.getStatus())){ + throw new ServiceException("改价失败,订单未结束,订单状态:"+etOrder1.getStatus()); + } BigDecimal payFee = BigDecimal.ZERO; if(ObjectUtil.isNotNull(etOrder.getDispatchFee())){ payFee = payFee.add(etOrder.getDispatchFee()); @@ -290,7 +302,7 @@ public class AppVerifyController extends BaseController etOrder.setType(ServiceConstants.ORDER_TYPE_DEPOSIT); etOrder.setStatus(ServiceConstants.ORDER_STATUS_ORDER_END); etOrder.setPaid(ServiceConstants.ORDER_PAY_STATUS_PAID); - List etOrders = etOrderService.selectEtOrderList(etOrder); + List etOrders = etOrderMapper.selectEtOrderList(etOrder); if(etOrders.size()==0){ throw new ServiceException("提现失败,未找到押金订单"); } @@ -421,10 +433,10 @@ public class AppVerifyController extends BaseController */ @Log(title = "还车", businessType = BusinessType.RETURN_VEHICLE) @PostMapping("/device/return") - public AjaxResult returnVehicle(String orderNo,String returnType) + public AjaxResult returnVehicle(String orderNo,String returnType,String isBluetooth,String lon,String lat) { - logger.info("【接收还车请求参数】:{},是否辅助还车:{}", orderNo,returnType); - Boolean aBoolean = asDeviceService.returnVehicle(orderNo,returnType); + logger.info("【接收还车请求参数】:{},是否辅助还车:{},是否蓝牙控制:{}", orderNo,returnType,isBluetooth,lon,lat); + Boolean aBoolean = asDeviceService.returnVehicle(orderNo,returnType,isBluetooth,lon,lat); return success(aBoolean); } @@ -445,10 +457,10 @@ public class AppVerifyController extends BaseController */ @Log(title = "临时锁车", businessType = BusinessType.LOCK) @PostMapping("/device/lock") - public AjaxResult deviceLock(String sn,String orderNo) + public AjaxResult deviceLock(String sn,String orderNo,String isBluetooth,String lon,String lat) { - logger.info("【临时锁车请求参数】:{},订单号:{}", sn,orderNo); - Boolean i =asDeviceService.lock(sn,orderNo); + logger.info("【临时锁车请求参数】:{},订单号:{},是否蓝牙控制:{}", sn,orderNo,isBluetooth); + Boolean i =asDeviceService.lock(sn,orderNo,isBluetooth,lon,lat); return success(i); } @@ -457,10 +469,10 @@ public class AppVerifyController extends BaseController */ @Log(title = "临时解锁", businessType = BusinessType.UNLOCK) @PostMapping("/device/unlock") - public AjaxResult deviceUnlock(String sn,String orderNo) + public AjaxResult deviceUnlock(String sn,String orderNo,String isBluetooth,String lon,String lat) { - logger.info("【临时解锁请求参数】:{},订单号:{}", sn,orderNo); - Boolean i =asDeviceService.unlock(sn,orderNo); + logger.info("【临时解锁请求参数】:{},订单号:{},是否蓝牙控制:{}", sn,orderNo,isBluetooth); + Boolean i =asDeviceService.unlock(sn,orderNo,isBluetooth,lon,lat); return success(i); } @@ -587,9 +599,9 @@ public class AppVerifyController extends BaseController * 所有车辆定位 */ @GetMapping(value = "/allVehicleInfo") - public AjaxResult allVehicleInfo(String powerStart,String powerEnd, String status,String sort) + public AjaxResult allVehicleInfo(String powerStart,String powerEnd, String status,String sort,String areaId) { - List asDevices = asDeviceService.allVehicleInfo(powerStart,powerEnd,status,sort); + List asDevices = asDeviceService.allVehicleInfo(powerStart,powerEnd,status,sort,areaId); return success(asDevices); } @@ -625,9 +637,10 @@ public class AppVerifyController extends BaseController * 查询车辆数量 */ @GetMapping(value = "/allVehicleNum") - public AjaxResult allVehicleNum(String powerStart,String powerEnd) + public AjaxResult allVehicleNum(String powerStart,String powerEnd,String areaId) { - DeviceNumVo deviceNumVo = asDeviceService.allVehicleNum(powerStart,powerEnd); + logger.info("【查询车辆数量】请求参数:powerStart:【{}】,powerEnd:【{}】,areaId:【{}】", powerStart,powerEnd,areaId); + DeviceNumVo deviceNumVo = asDeviceService.allVehicleNum(powerStart,powerEnd,areaId); return success(deviceNumVo); } @@ -645,10 +658,10 @@ public class AppVerifyController extends BaseController * 运营数据 */ @GetMapping(value = "/operatingData") - public AjaxResult operatingData(String timeStart,String timeEnd) + public AjaxResult operatingData(String timeStart,String timeEnd,String areaId) { - logger.info("【运营数据】请求参数:{},{}", timeStart,timeEnd); - OperatingDataVo operatingDataVo = etOrderService.getOperatingData(timeStart,timeEnd); + logger.info("【运营数据】请求参数:timeStart={},timeEnd={},areaId={}", timeStart,timeEnd,areaId); + OperatingDataVo operatingDataVo = etOrderService.getOperatingData(timeStart,timeEnd,areaId); return success(operatingDataVo); } @@ -658,10 +671,10 @@ public class AppVerifyController extends BaseController * type:1-按日期 2-按车辆 */ @GetMapping(value = "/reconciliation") - public AjaxResult reconciliation(String timeStart,String timeEnd, String type,String sn) + public AjaxResult reconciliation(String timeStart,String timeEnd, String type,String sn,String areaId) { - logger.info("【收入对账】请求参数:timeStart={},timeEnd={},type={},type={}", timeStart,timeEnd,type,type); - ReconciliationVo operatingDataVo = etOrderService.reconciliation(timeStart,timeEnd,type,sn); + logger.info("【收入对账】请求参数:timeStart={},timeEnd={},type={},sn={},areaId={}", timeStart,timeEnd,type,sn,areaId); + ReconciliationVo operatingDataVo = etOrderService.reconciliation(timeStart,timeEnd,type,sn,areaId); return success(operatingDataVo); } @@ -764,13 +777,12 @@ public class AppVerifyController extends BaseController * 根据userId获取areaId(管理员属于哪个运营区) */ @PostMapping("/getAreaId") - public AjaxResult getAreaId(String userId) + public AjaxResult getAreaId() { - logger.info("根据userId获取areaId:【userId="+userId+"】"); - if(StrUtil.isBlank(userId)){ - throw new ServiceException("userId不能为空"); - } - AsUser asUser = asUserService.selectUserById(Long.valueOf(userId)); + Long userId = SecurityUtils.getLoginUser().getAsUser().getUserId(); + logger.info("根据userId获取areaId(管理员属于哪个运营区):【userId="+userId+"】"); + AsUser asUser = asUserMapper.selectUserById(userId); + logger.info("根据userId获取areaId(管理员属于哪个运营区):【"+JSON.toJSON(asUser)+"】"); if(ObjectUtil.isNull(asUser)){ throw new ServiceException("用户【"+userId+"】不存在"); } @@ -781,4 +793,52 @@ public class AppVerifyController extends BaseController return success(sysUser.getAreaId()); } + /** + * 根据条件模糊查询车辆信息 + * type:1-sn,2-mac,3-车牌号 + */ + @GetMapping("/device/search") + public AjaxResult deviceSearch(String key,String type,String areaId) + { + logger.info("根据条件模糊查询车辆信息:【key="+key+"】,【type="+type+"】,【areaId="+areaId+"】"); + List asDevices = asDeviceService.deviceSearch(key,type,areaId); + return success(asDevices); + } + + /** + * 根据经纬度判断是否在停车区 + */ + @GetMapping("/isInParkingArea") + public AjaxResult isInParkingArea(String longitude,String latitude,String areaId) + { + if(StrUtil.isBlank(longitude) || StrUtil.isBlank(latitude)){ + logger.info("没有经纬度参数:【longitude={}】,【latitude={}】",longitude,latitude); + return error("请传经纬度参数"+"【longitude="+longitude+"】,【latitude="+latitude+"】"); + } + IsInParkingAreaVo isInParkingAreaVo = asDeviceService.isInParkingArea(longitude,latitude,areaId); + return success(isInParkingAreaVo); + } + + /** + * 根据token获取运营区列表 + */ + @GetMapping("/getAreaList") + public AjaxResult getAreaList() + { + AsUser asUser = getLoginUser().getAsUser(); + logger.info("获取到当前app登录用户:【{}】", JSON.toJSON(asUser)); + if(ObjectUtil.isNull(asUser.getSysUserId())){ + throw new RuntimeException("用户【"+asUser.getUserName()+"】未绑定系统用户"); + } + SysUser sysUser = userService.selectUserById(asUser.getSysUserId()); + Long deptId; + if(sysUser.isAdmin()){ + deptId = null; + }else{ + deptId = sysUser.getDeptId(); + } + List longs = etOperatingAreaService.selectAreaListByDeptId2(deptId); + logger.info("根据token获取运营区列表:【{}】", JSON.toJSON(longs)); + return success(longs); + } } diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java index 6d6ce93..859473d 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/iot/receive/ReceiveController.java @@ -131,7 +131,9 @@ public class ReceiveController { JSONObject jsonObject = JSONObject.parseObject(msg, JSONObject.class); String devName = (String)jsonObject.get("dev_name"); /*异步更新在线状态*/ - asynchronousUpdateOnlineStatus(devName); + AsDevice asDevice = asDeviceService.selectAsDeviceByMac(devName); + Object ver = jsonObject.get("VER"); + asynchronousUpdateOnlineStatus(asDevice,ver); if(IotConstants.ONENET_LOCATION.equals(jsonObject.get("ds_id")) && ObjectUtil.isNotNull(jsonObject.get("value"))){ LogEntry logEntry = JSONObject.parseObject(msg, LogEntry.class); log.info("logEntry转换后的对象: logEntry---【{}】" , JSON.toJSONString(logEntry)); @@ -339,8 +341,10 @@ public class ReceiveController { /** * 异步更新在线状态 */ - private void asynchronousUpdateOnlineStatus(String mac) { - AsDevice device = asDeviceService.selectAsDeviceByMac(mac); + private void asynchronousUpdateOnlineStatus(AsDevice device,Object verStr) { + if(StrUtil.isBlank(device.getVersion()) && ObjectUtil.isNotNull(verStr)){ + device.setVersion((String)verStr); + } //开异步线程保存回调参数 scheduledExecutorService.schedule(() -> { if(device.getOnlineStatus().equals(ServiceConstants.VEHICLE_STATUS_OFFLINE)){ @@ -374,6 +378,10 @@ public class ReceiveController { Geometry geometry = GeoUtils.toGeometryByLinearRing(tripRouteStr); String wkt = GeoUtils.wkt(geometry); etOrder.setTripRoute(wkt); + // todo 放在还车的接口计算 +// double[][] doubles = GeoUtils.parseJsonTrack(tripRouteStr); +// double v = GeoUtils.calculateTotalDistance(doubles); +// etOrder.setDistance((int)Math.round(v)); int updateEtOrderResult = etOrderService.updateEtOrder(etOrder); if (updateEtOrderResult > 0) { diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/AsArticleClassifyController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/AsArticleClassifyController.java index b31da66..1c66ed2 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/AsArticleClassifyController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/AsArticleClassifyController.java @@ -35,7 +35,7 @@ public class AsArticleClassifyController extends BaseController @GetMapping("/list") public AjaxResult list(AsArticleClassify asArticleClassify) { - List asArticleClassifies = asArticleClassifyService.selectClassifyList(asArticleClassify); + List asArticleClassifies = asArticleClassifyService.selectClassifyListWithIsolate(asArticleClassify); return success(asArticleClassifies); } @@ -46,7 +46,7 @@ public class AsArticleClassifyController extends BaseController @GetMapping("/list/exclude/{classifyId}") public AjaxResult excludeChild(@PathVariable(value = "classifyId", required = false) Long classifyId) { - List articleClassifies = asArticleClassifyService.selectClassifyList(new AsArticleClassify()); + List articleClassifies = asArticleClassifyService.selectClassifyListWithIsolate(new AsArticleClassify()); articleClassifies.removeIf(d -> d.getClassifyId().intValue() == classifyId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), classifyId + "")); return success(articleClassifies); } diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationControllor.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationControllor.java index c3ea444..f7e17ce 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationControllor.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/EtReconciliationControllor.java @@ -1,9 +1,14 @@ package com.ruoyi.web.controller.system; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.domain.EtOperatingArea; import com.ruoyi.system.domain.vo.ReconciliationVo; +import com.ruoyi.system.service.IEtOperatingAreaService; import com.ruoyi.system.service.IEtOrderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +18,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 对账Controller * @@ -21,28 +28,45 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/system") -public class EtReconciliationControllor { +public class EtReconciliationControllor extends BaseController { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private IEtOrderService etOrderService; + @Autowired + private IEtOperatingAreaService etOperatingAreaService; + /** * 查询对账列表 */ @PreAuthorize("@ss.hasPermi('system:reconciliation:list')") @GetMapping("/reconciliation") - public AjaxResult list(String timeStart,String timeEnd) + public AjaxResult list(String timeStart,String timeEnd,String areaId) { - logger.info("【收入对账】请求参数:timeStart={},timeEnd={}", timeStart,timeEnd); + logger.info("【收入对账】请求参数:timeStart={},timeEnd={},areaId={}", timeStart,timeEnd,areaId); if(StrUtil.isBlank(timeStart)){ timeStart = DateUtils.getDate(); } if(StrUtil.isBlank(timeEnd)){ timeEnd = DateUtils.getDate(); } - ReconciliationVo reconciliation = etOrderService.reconciliation(timeStart,timeEnd,"1",null); + // 根据token获取运营区列表 + ReconciliationVo reconciliation = etOrderService.reconciliation(timeStart,timeEnd,"1",null,areaId); return AjaxResult.success(reconciliation); } + + /** + * 根据token获取运营区列表 + */ + @GetMapping("/getAreaList") + public AjaxResult getAreaList() + { + SysUser user = getLoginUser().getUser(); + logger.info("【后台根据token获取运营区列表】获取当前登录用户:【{}】", JSON.toJSON(user)); + List longs = etOperatingAreaService.selectAreaListByDeptId2(user.getDeptId()); + logger.info("根据token获取运营区列表:【{}】", JSON.toJSON(longs)); + return success(longs); + } } diff --git a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 50964bb..c5511b4 100644 --- a/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/electripper-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -2,6 +2,7 @@ package com.ruoyi.web.controller.system; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.domain.AjaxResult; @@ -13,6 +14,7 @@ import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysPermissionService; +import com.ruoyi.system.mapper.AsUserMapper; import com.ruoyi.system.service.IAsUserService; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysMenuService; @@ -23,6 +25,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; import java.util.List; import java.util.Set; @@ -50,6 +53,9 @@ public class SysLoginController @Autowired private ISysDeptService deptService; + @Resource + private AsUserMapper asUserMapper; + /** * 登录方法 @@ -102,6 +108,8 @@ public class SysLoginController user = userService.selectUserById(userId); }else{ user = SecurityUtils.getLoginUser().getAsUser(); + log.info("获取到当前登录用户:{}", JSON.toJSON(user)); + user = asUserMapper.selectUserById(user.getUserId()); } ajax.put("user", user); return ajax; diff --git a/electripper-admin/src/main/resources/application-druid.yml b/electripper-admin/src/main/resources/application-druid.yml index f7dc9c6..e174da8 100644 --- a/electripper-admin/src/main/resources/application-druid.yml +++ b/electripper-admin/src/main/resources/application-druid.yml @@ -6,12 +6,12 @@ spring: druid: # 主库数据源 master: -# url: jdbc:mysql://localhost:3306/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 -# username: root -# password: 123456 - url: jdbc:mysql://117.26.179.22:61110/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: d0dbe100b71c1d09 + password: 123456 +# url: jdbc:mysql://117.26.179.22:61110/electripper?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +# username: root +# password: d0dbe100b71c1d09 # 从库数据源 slave: # 从数据源开关/默认关闭 diff --git a/electripper-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/electripper-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java index 0080343..47207e4 100644 --- a/electripper-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java +++ b/electripper-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -2,7 +2,7 @@ package com.ruoyi.common.constant; /** * 缓存的key 常量 - * + * * @author ruoyi */ public class CacheConstants @@ -12,6 +12,12 @@ public class CacheConstants */ public static final String LOGIN_TOKEN_KEY = "login_tokens:"; + /** + * 登录用户 redis key + */ + public static final String APP_LOGIN_TOKEN_KEY = "app_login_tokens:"; + + /** * 验证码 redis key */ diff --git a/electripper-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java b/electripper-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java index 1bbec09..354a03c 100644 --- a/electripper-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java +++ b/electripper-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java @@ -55,7 +55,7 @@ public class ServiceConstants { /**----------------------------支付场景end----------------------------*/ /**----------------------------订单状态start----------------------------*/ - /** 订单状态:0-预约中,1-取消预约,2-开始骑行,3-结束 */ + /** 订单状态:0-预约中,1-取消预约,2-开始骑行,3-结束 4-订单结束*/ /** * 订单状态:0-预约中 */ @@ -480,4 +480,19 @@ public class ServiceConstants { public static final String PROFITSHARING_TYPE_PLATFORM = "2"; /**----------------------------分账类型start----------------------------*/ + /**----------------------------退款类型start----------------------------*/ + /** 还车类型:1-正常还车;2-辅助还车 + /** + * 退款类型:1-正常还车 + */ + public static final String RETURN_TYPE_NORMAL = "1"; + + /** + * 退款类型:2-辅助还车 + */ + public static final String RETURN_TYPE_SUBSIDIARY = "2"; + + + /**----------------------------退款类型end----------------------------*/ + } diff --git a/electripper-common/src/main/java/com/ruoyi/common/core/domain/entity/AsArticleClassify.java b/electripper-common/src/main/java/com/ruoyi/common/core/domain/entity/AsArticleClassify.java index 1cf7f2b..d964a67 100644 --- a/electripper-common/src/main/java/com/ruoyi/common/core/domain/entity/AsArticleClassify.java +++ b/electripper-common/src/main/java/com/ruoyi/common/core/domain/entity/AsArticleClassify.java @@ -26,6 +26,9 @@ public class AsArticleClassify extends BaseEntity /** 父分类ID */ private Long deptId; + /** 运营商 */ + private String deptName; + /** 祖级列表 */ private String ancestors; @@ -146,4 +149,12 @@ public class AsArticleClassify extends BaseEntity public void setDeptId(Long deptId) { this.deptId = deptId; } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } } diff --git a/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java b/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java index d282cb2..9595897 100644 --- a/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java +++ b/electripper-common/src/main/java/com/ruoyi/common/utils/map/GeoUtils.java @@ -1,6 +1,7 @@ package com.ruoyi.common.utils.map; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; import lombok.experimental.UtilityClass; @@ -272,6 +273,46 @@ public class GeoUtils { return EARTH_RADIUS * c; } + public static double[][] parseJsonTrack(String jsonString) { + JSONArray jsonArray = JSONArray.parseArray(jsonString); + double[][] track = new double[jsonArray.size()][2]; + for (int i = 0; i < jsonArray.size(); i++) { + JSONArray coord = jsonArray.getJSONArray(i); + track[i][0] = coord.getDouble(0); + track[i][1] = coord.getDouble(1); + } + return track; + } + + /** + * 计算一段轨迹的总距离 + * */ + public static double calculateTotalDistance(double[][] track) { + double totalDistance = 0; + for (int i = 0; i < track.length - 1; i++) { + totalDistance += haversineDistance(track[i], track[i + 1]); + } + return totalDistance; + } + + public static double haversineDistance(double[] coord1, double[] coord2) { + double lat1 = deg2rad(coord1[1]); + double lon1 = deg2rad(coord1[0]); + double lat2 = deg2rad(coord2[1]); + double lon2 = deg2rad(coord2[0]); + + double dLat = lat2 - lat1; + double dLon = lon2 - lon1; + + double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1) * Math.cos(lat2) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + + return EARTH_RADIUS * c; // 距离(米) + } + /** * 判获取到最近一个运营区 * */ diff --git a/electripper-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/electripper-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java index aa112da..5c2f6b0 100644 --- a/electripper-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java +++ b/electripper-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java @@ -4,6 +4,8 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import javax.servlet.http.HttpServletRequest; + +import cn.hutool.core.util.ObjectUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -228,4 +230,9 @@ public class TokenService { return CacheConstants.LOGIN_TOKEN_KEY + uuid; } + + private String getAppTokenKey(String uuid) + { + return CacheConstants.APP_LOGIN_TOKEN_KEY + uuid; + } } diff --git a/electripper-system/src/main/java/com/ruoyi/system/domain/AsDevice.java b/electripper-system/src/main/java/com/ruoyi/system/domain/AsDevice.java index c5c0a22..3c67653 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/domain/AsDevice.java +++ b/electripper-system/src/main/java/com/ruoyi/system/domain/AsDevice.java @@ -144,6 +144,9 @@ public class AsDevice extends BaseEntityPlus implements Serializable { @TableField(exist = false) private String model; + /** 设备版本 */ + private String version; + /** 车牌号 */ private String vehicleNum; diff --git a/electripper-system/src/main/java/com/ruoyi/system/domain/EtOrder.java b/electripper-system/src/main/java/com/ruoyi/system/domain/EtOrder.java index 371faf7..5db3d74 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/domain/EtOrder.java +++ b/electripper-system/src/main/java/com/ruoyi/system/domain/EtOrder.java @@ -33,6 +33,10 @@ public class EtOrder extends BaseEntity @Excel(name = "区域") private String area; + /** 区域ids */ + @Excel(name = "区域ids") + private List areaLists; + /** 订单号 */ @Excel(name = "订单号") private String orderNo; @@ -49,6 +53,11 @@ public class EtOrder extends BaseEntity @Excel(name = "用户") private String userName; + /** 真实姓名 */ + @Excel(name = "真实姓名") + @TableField(exist = false) + private String realName; + /** 手机号 */ @Excel(name = "手机号") private String phonenumber; @@ -77,6 +86,10 @@ public class EtOrder extends BaseEntity @Excel(name = "设备sn编码") private String sn; + /** 车牌号 */ + @TableField(exist = false) + private String vehicleNum; + /** 支付时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd") diff --git a/electripper-system/src/main/java/com/ruoyi/system/domain/vo/IsInParkingAreaVo.java b/electripper-system/src/main/java/com/ruoyi/system/domain/vo/IsInParkingAreaVo.java new file mode 100644 index 0000000..5de2f4e --- /dev/null +++ b/electripper-system/src/main/java/com/ruoyi/system/domain/vo/IsInParkingAreaVo.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.domain.vo; + +import lombok.Data; + +/** + * 区间计费 + * + * @author 邱贞招 + * @date 2024-05-21 + */ +@Data +public class IsInParkingAreaVo { + + /** 停车点还车 true:开启,false:关闭*/ + private Boolean parkingReturn; + + /** 是否在停车区内*/ + private Boolean isInParkingArea; +} diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/AsDeviceMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/AsDeviceMapper.java index bb15580..f219f69 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/AsDeviceMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/AsDeviceMapper.java @@ -98,12 +98,12 @@ public interface AsDeviceMapper extends BaseMapper /** * 有订单车辆 */ - String getInOrderDevice(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getInOrderDevice(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 无订单车辆 */ - String getNoOrderDevice(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getNoOrderDevice(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); public int batchDisable(String[] sns); diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/AsUserMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/AsUserMapper.java index 3a8975c..6905e37 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/AsUserMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/AsUserMapper.java @@ -139,15 +139,15 @@ public interface AsUserMapper /** * 新增用户 */ - String getNewUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getNewUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 总用户 */ - String getTotalUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 租赁用户 */ - String getLeaseUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getLeaseUser(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOperatingAreaMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOperatingAreaMapper.java index 02916fd..227a842 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOperatingAreaMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOperatingAreaMapper.java @@ -36,6 +36,14 @@ public interface EtOperatingAreaMapper extends BaseMapper * @return 选中运营区ID列表 */ List selectAreaListByDeptId(Long deptId); + + /** + * 根据部门ID获取运营区选择框列表 运营商 + * + * @param deptId 用户ID + * @return 选中运营区ID列表 + */ + List selectAreaListByDeptId2(Long deptId); // // /** // * 新增运营区 diff --git a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java index 2ee3add..65fb467 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java +++ b/electripper-system/src/main/java/com/ruoyi/system/mapper/EtOrderMapper.java @@ -113,83 +113,83 @@ public interface EtOrderMapper /** * 总收入 */ - String getTotalIncome(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalIncome(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 累计待支付 */ - String getTotalUnpaid(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalUnpaid(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 已支付 */ - String getTotalPaid(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalPaid(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 已退款 */ - String getTotalRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 骑行已支付 */ - String getTotalRidingFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalRidingFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 骑行已退款 */ - String getTotalRidingRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalRidingRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 调度费已支付 */ - String getTotalDispatchFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalDispatchFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 调度费已退款 */ - String getTotalDispatchRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalDispatchRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 预约费已支付 */ - String getTotalAppointmentFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalAppointmentFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 预约费已退款 */ - String getTotalAppointmentRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalAppointmentRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 管理费已支付 */ - String getTotalManageFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalManageFee(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 管理费已退款 */ - String getTotalManageRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getTotalManageRefund(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 已支付订单 */ - String getPaidOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getPaidOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 骑行中订单 */ - String getRidingOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getRidingOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 退款订单 */ - String getRefundOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getRefundOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 待支付订单 */ - String getUnpaidOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd); + String getUnpaidOrder(@Param("timeStart") String timeStart, @Param("timeEnd") String timeEnd, @Param("areaId") String areaId); /** * 手续费 diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IAsArticleClassifyService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IAsArticleClassifyService.java index 214eaea..ee2282f 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IAsArticleClassifyService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IAsArticleClassifyService.java @@ -20,6 +20,14 @@ public interface IAsArticleClassifyService */ public List selectClassifyList(AsArticleClassify asArticleClassify); + /** + * 查询分类管理数据(带数据隔离) + * + * @param asArticleClassify 分类信息 + * @return 分类信息集合 + */ + public List selectClassifyListWithIsolate(AsArticleClassify asArticleClassify); + /** * 查询分类树结构信息 * diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IAsDeviceService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IAsDeviceService.java index 577e46b..05341c5 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IAsDeviceService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IAsDeviceService.java @@ -7,6 +7,7 @@ import com.ruoyi.system.domain.EtOperatingArea; import com.ruoyi.system.domain.response.OrderResponse; import com.ruoyi.system.domain.vo.DeviceNumVo; import com.ruoyi.system.domain.vo.EtOrderVo; +import com.ruoyi.system.domain.vo.IsInParkingAreaVo; import java.util.List; @@ -110,12 +111,12 @@ public interface IAsDeviceService extends IService /** * 所有车辆定位 */ - List allVehicleInfo(String powerStart, String powerEnd, String status,String sort); + List allVehicleInfo(String powerStart, String powerEnd, String status,String sort,String areaId); /** * 查询车辆数量 */ - DeviceNumVo allVehicleNum(String powerStart, String powerEnd); + DeviceNumVo allVehicleNum(String powerStart, String powerEnd,String areaId); /** * 扫码/编号开锁骑行 @@ -145,7 +146,7 @@ public interface IAsDeviceService extends IService /** * 临时锁车 */ - Boolean lock(String mac,String orderNo); + Boolean lock(String mac,String orderNo,String isBluetooth,String lon,String lat); /** * 管理员锁车 @@ -160,7 +161,7 @@ public interface IAsDeviceService extends IService /** * 临时解锁 */ - Boolean unlock(String sn, String orderNo); + Boolean unlock(String sn, String orderNo,String isBluetooth,String lon,String lat); /** * 车辆预约 @@ -175,7 +176,7 @@ public interface IAsDeviceService extends IService /** * 还车 */ - Boolean returnVehicle(String orderNo,String returnType); + Boolean returnVehicle(String orderNo,String returnType,String isBluetooth,String lon,String lat); /** * 管理员开锁 @@ -201,22 +202,22 @@ public interface IAsDeviceService extends IService * 根据条件模糊查询车辆信息 * type:1-sn,2-mac,3-车牌号 */ - List deviceSearch(String key,String type); + List deviceSearch(String key,String type,String areaId); /** * 运营中车辆 */ - String getInOperationDevice(String timeStart, String timeEnd); + String getInOperationDevice(String timeStart, String timeEnd,String areaId); /** * 有订单车辆 */ - String getInOrderDevice(String timeStart, String timeEnd); + String getInOrderDevice(String timeStart, String timeEnd,String areaId); /** * 无订单车辆 */ - String getNoOrderDevice(String timeStart, String timeEnd); + String getNoOrderDevice(String timeStart, String timeEnd,String areaId); /** * 根据车辆型号查询车辆数量 @@ -277,6 +278,16 @@ public interface IAsDeviceService extends IService */ int bandSn(AsDevice asDevice); + /** + * 根据mac号判断是否有绑定过 + */ + boolean isBandByMac(String mac); + + /** + * 判断是否在停车区内 + */ + IsInParkingAreaVo isInParkingArea(String longitude, String latitude,String areaId); + // /** // * 是否靠近运营区边界 // */ diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IAsUserService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IAsUserService.java index 952620d..aabdc1b 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IAsUserService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IAsUserService.java @@ -195,17 +195,17 @@ public interface IAsUserService /** * 新增用户 */ - String getNewUser(String powerStart, String powerEnd); + String getNewUser(String powerStart, String powerEnd,String areaId); /** * 总用户 */ - String getTotalUser(String powerStart, String powerEnd); + String getTotalUser(String powerStart, String powerEnd, String areaId); /** * 租赁用户 */ - String getLeaseUser(String powerStart, String powerEnd); + String getLeaseUser(String powerStart, String powerEnd,String areaId); /** * 绑定系统用户 diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOperatingAreaService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOperatingAreaService.java index 48ae758..33cb5e6 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOperatingAreaService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOperatingAreaService.java @@ -104,4 +104,12 @@ public interface IEtOperatingAreaService extends IService * @return 选中运营区ID列表 */ public List selectAreaListByDeptId(Long deptId); + + /** + * 根据部门ID获取运营区选择框列表 + * + * @param deptId 用户ID + * @return 选中运营区ID列表 + */ + public List selectAreaListByDeptId2(Long deptId); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java index c5cc879..1020015 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/IEtOrderService.java @@ -140,12 +140,12 @@ public interface IEtOrderService /** * 运营数据 */ - OperatingDataVo getOperatingData(String timeStart,String timeEnd); + OperatingDataVo getOperatingData(String timeStart,String timeEnd,String areaId); /** * 收入对账 */ - ReconciliationVo reconciliation(String timeStart, String timeEnd, String type,String sn); + ReconciliationVo reconciliation(String timeStart, String timeEnd, String type,String sn,String areaId); /** * 最近一笔订单 diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsArticleClassifyServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsArticleClassifyServiceImpl.java index 05cd756..16e61c5 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsArticleClassifyServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsArticleClassifyServiceImpl.java @@ -40,6 +40,18 @@ public class AsArticleClassifyServiceImpl implements IAsArticleClassifyService */ @Override @DataScope(deptAlias = "d") + public List selectClassifyListWithIsolate(AsArticleClassify classify) + { + return articleClassifyMapper.selectClassifyList(classify); + } + + /** + * 查询分类管理数据 + * + * @param classify 分类信息 + * @return 分类信息集合 + */ + @Override public List selectClassifyList(AsArticleClassify classify) { return articleClassifyMapper.selectClassifyList(classify); @@ -54,7 +66,7 @@ public class AsArticleClassifyServiceImpl implements IAsArticleClassifyService @Override public List selectClassifyTreeList(AsArticleClassify classify) { - List depts = selectClassifyList(classify); + List depts = selectClassifyListWithIsolate(classify); return buildClassifyTreeSelect(depts); } @@ -191,7 +203,7 @@ public class AsArticleClassifyServiceImpl implements IAsArticleClassifyService { AsArticleClassify dept = new AsArticleClassify(); dept.setClassifyId(deptId); - List depts = SpringUtils.getAopProxy(this).selectClassifyList(dept); + List depts = SpringUtils.getAopProxy(this).selectClassifyListWithIsolate(dept); if (StringUtils.isEmpty(depts)) { throw new ServiceException("没有权限访问分类数据!"); @@ -214,13 +226,17 @@ public class AsArticleClassifyServiceImpl implements IAsArticleClassifyService dept.setDeptId(currentUser.getDeptId()); } } - AsArticleClassify info = articleClassifyMapper.selectClassifyById(dept.getParentId()); - // 如果父节点不为正常状态,则不允许新增子节点 - if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) - { - throw new ServiceException("分类停用,不允许新增"); + if(dept.getParentId() != 0){ + AsArticleClassify info = articleClassifyMapper.selectClassifyById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("分类停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + }else{ + dept.setAncestors("0"); } - dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); return articleClassifyMapper.insertClassify(dept); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsDeviceServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsDeviceServiceImpl.java index 7aef1ca..5b7cfcf 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsDeviceServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsDeviceServiceImpl.java @@ -12,11 +12,13 @@ import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.constant.IotConstants; import com.ruoyi.common.constant.ServiceConstants; import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.AsUser; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.common.utils.map.GeoUtils; @@ -27,11 +29,9 @@ import com.ruoyi.common.utils.onenet.Token; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.response.OrderResponse; -import com.ruoyi.system.domain.vo.DeviceNumVo; -import com.ruoyi.system.domain.vo.EtOrderVo; -import com.ruoyi.system.domain.vo.IntervalRuleVo; -import com.ruoyi.system.domain.vo.StartingRuleVo; +import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.mapper.AsDeviceMapper; +import com.ruoyi.system.mapper.EtOrderMapper; import com.ruoyi.system.service.*; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -96,6 +96,12 @@ public class AsDeviceServiceImpl extends ServiceImpl i @Autowired private IWxPayService wxPayService; + @Autowired + private ISysUserService userService; + + @Resource + private EtOrderMapper etOrderMapper; + @Value(value = "${iot.iotUrl}") private String iotUrl; @@ -144,14 +150,6 @@ public class AsDeviceServiceImpl extends ServiceImpl i if (ObjectUtil.isNull(asDevice)) { throw new ServiceException("设备不存在:"+ sn); } -// // 查询车辆上下线 -// if(!isOnline(sn)){ -// asDevice.setOnlineStatus(ServiceConstants.VEHICLE_STATUS_OFFLINE); -// log.info("设备不在线:"+ sn); -// }else{ -// asDevice.setOnlineStatus(ServiceConstants.VEHICLE_STATUS_ONLINE); -// } -// int i = asDeviceMapper.updateAsDevice(asDevice); Long areaId = asDevice.getAreaId(); EtOperatingArea etOperatingArea; if (ObjectUtil.isNotNull(areaId)) { @@ -177,7 +175,7 @@ public class AsDeviceServiceImpl extends ServiceImpl i order.setType(ServiceConstants.ORDER_TYPE_RIDING); order.setStatus(ServiceConstants.ORDER_STATUS_RIDING); order.setSn(asDevice.getSn()); - List etOrders = etOrderService.selectEtOrderList(order); + List etOrders = etOrderMapper.selectEtOrderList(order); asDevice.setEtOrders(etOrders); return asDevice; } @@ -365,8 +363,11 @@ public class AsDeviceServiceImpl extends ServiceImpl i * 所有车辆定位 */ @Override - public List allVehicleInfo(String powerStart, String powerEnd, String status,String sort) { + public List allVehicleInfo(String powerStart, String powerEnd, String status,String sort,String areaId) { QueryWrapper wrapper = new QueryWrapper<>(); + if(StrUtil.isNotBlank(areaId)){ + wrapper.eq("area_id",areaId); + } if(StrUtil.isNotBlank(powerStart) && StrUtil.isNotBlank(powerEnd)){ wrapper.between("remaining_power", Integer.parseInt(powerStart), Integer.parseInt(powerEnd)); } @@ -393,25 +394,28 @@ public class AsDeviceServiceImpl extends ServiceImpl i * 查询车辆数量 */ @Override - public DeviceNumVo allVehicleNum(String powerStart, String powerEnd) { + public DeviceNumVo allVehicleNum(String powerStart, String powerEnd,String areaId) { DeviceNumVo deviceNumVo = new DeviceNumVo(); QueryWrapper wrapper = new QueryWrapper<>(); + if(StrUtil.isNotBlank(areaId)){ + wrapper.eq("area_id",areaId); + } if(StrUtil.isNotBlank(powerStart) && StrUtil.isNotBlank(powerEnd)){ wrapper.between("remaining_power", powerStart,powerEnd); } Integer allNum = asDeviceMapper.selectCount(wrapper); deviceNumVo.setAllNum(allNum);//所有车辆 - Integer ridingNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_IN_USING); + Integer ridingNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_IN_USING,areaId); deviceNumVo.setRidingNum(ridingNum);//骑行中 - Integer temporarilyLockNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_TEMPORARILY_LOCK); + Integer temporarilyLockNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_TEMPORARILY_LOCK,areaId); deviceNumVo.setTemporarilyLockNum(temporarilyLockNum);//临时锁车 - Integer disabledNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_IN_OFFLINE); + Integer disabledNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_IN_OFFLINE,areaId); deviceNumVo.setDisabledNum(disabledNum);//已禁用 - Integer normalNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_NORMAL); + Integer normalNum = setNum(powerStart, powerEnd,ServiceConstants.VEHICLE_STATUS_NORMAL,areaId); deviceNumVo.setNormalNum(normalNum);//正常待租 QueryWrapper wrapperForOffline = new QueryWrapper<>(); @@ -419,10 +423,13 @@ public class AsDeviceServiceImpl extends ServiceImpl i if(StrUtil.isNotBlank(powerStart) && StrUtil.isNotBlank(powerEnd)){ wrapperForOffline.between("remaining_power", powerStart,powerEnd); } + if(StrUtil.isNotBlank(areaId)){ + wrapperForOffline.eq("area_id",areaId); + } Integer offlineNum = asDeviceMapper.selectCount(wrapperForOffline); deviceNumVo.setOfflineNum(offlineNum);//已离线 - Integer inAppointmentNum = setNum(powerStart, powerEnd, ServiceConstants.VEHICLE_STATUS_IN_APPOINTMENT); + Integer inAppointmentNum = setNum(powerStart, powerEnd, ServiceConstants.VEHICLE_STATUS_IN_APPOINTMENT,areaId); deviceNumVo.setInAppointmentNum(inAppointmentNum);//预约中 QueryWrapper wrapperForDispatch = new QueryWrapper<>(); @@ -430,17 +437,23 @@ public class AsDeviceServiceImpl extends ServiceImpl i if(StrUtil.isNotBlank(powerStart) && StrUtil.isNotBlank(powerEnd)){ wrapperForDispatch.between("remaining_power", powerStart,powerEnd); } + if(StrUtil.isNotBlank(areaId)){ + wrapperForDispatch.eq("area_id",areaId); + } Integer dispatchNum = asDeviceMapper.selectCount(wrapperForDispatch); deviceNumVo.setDispatchNum(dispatchNum);//调度设备 return deviceNumVo; } - private Integer setNum(String powerStart, String powerEnd,String status) { + private Integer setNum(String powerStart, String powerEnd,String status,String areaId) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("status",status); if(StrUtil.isNotBlank(powerStart) && StrUtil.isNotBlank(powerEnd)){ wrapper.between("remaining_power", powerStart,powerEnd); } + if(StrUtil.isNotBlank(areaId)){ + wrapper.eq("area_id",areaId); + } return asDeviceMapper.selectCount(wrapper); } @@ -597,6 +610,15 @@ public class AsDeviceServiceImpl extends ServiceImpl i @Override public Boolean offline(String sn) { AsDevice asDevice = asDeviceMapper.selectAsDeviceBySn(sn); + if(ServiceConstants.VEHICLE_STATUS_IN_APPOINTMENT.equals(asDevice.getStatus())){ + throw new ServiceException("车辆处于预约中,不能下线"); + } + if(ServiceConstants.VEHICLE_STATUS_IN_USING.equals(asDevice.getStatus())){ + throw new ServiceException("车辆使用中,不能下线"); + } + if(ServiceConstants.VEHICLE_STATUS_TEMPORARILY_LOCK.equals(asDevice.getStatus())){ + throw new ServiceException("车辆临时停车中,不能下线"); + } asDevice.setStatus(ServiceConstants.VEHICLE_STATUS_IN_OFFLINE); int device = asDeviceMapper.updateAsDevice(asDevice); if(device==0){ @@ -611,17 +633,21 @@ public class AsDeviceServiceImpl extends ServiceImpl i * type:1-sn,2-mac,3-车牌号 */ @Override - public List deviceSearch(String key, String type) { + public List deviceSearch(String key, String type, String areaId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if(StrUtil.isNotBlank(areaId)){ + queryWrapper.eq("area_id",areaId); + } switch (type){ case "1": - QueryWrapper sn = new QueryWrapper().like("sn", key); - return asDeviceMapper.selectList(sn); + queryWrapper.like("sn", key); + return asDeviceMapper.selectList(queryWrapper); case "2": - QueryWrapper mac = new QueryWrapper().like("mac", key); - return asDeviceMapper.selectList(mac); + queryWrapper.like("mac", key); + return asDeviceMapper.selectList(queryWrapper); case "3": - QueryWrapper vehicleNum = new QueryWrapper().like("vehicle_num", key); - return asDeviceMapper.selectList(vehicleNum); + queryWrapper.like("vehicle_num", key); + return asDeviceMapper.selectList(queryWrapper); default: return null; } @@ -631,9 +657,10 @@ public class AsDeviceServiceImpl extends ServiceImpl i * 运营中车辆 */ @Override - public String getInOperationDevice(String timeStart, String timeEnd) { + public String getInOperationDevice(String timeStart, String timeEnd,String areaId) { if(ObjectUtil.isNotEmpty(timeStart)&&ObjectUtil.isNotEmpty(timeEnd)){ QueryWrapper wrapper = new QueryWrapper().eq("status", ServiceConstants.VEHICLE_STATUS_IN_USING); + wrapper.eq("area_id", areaId); return asDeviceMapper.selectCount(wrapper)+""; } return null; @@ -643,9 +670,9 @@ public class AsDeviceServiceImpl extends ServiceImpl i * 有订单车辆 */ @Override - public String getInOrderDevice(String timeStart, String timeEnd) { + public String getInOrderDevice(String timeStart, String timeEnd,String areaId) { if(ObjectUtil.isNotEmpty(timeStart)&&ObjectUtil.isNotEmpty(timeEnd)){ - return asDeviceMapper.getInOrderDevice(timeStart,timeEnd); + return asDeviceMapper.getInOrderDevice(timeStart,timeEnd,areaId); } return null; } @@ -654,9 +681,9 @@ public class AsDeviceServiceImpl extends ServiceImpl i * 无订单车辆 */ @Override - public String getNoOrderDevice(String timeStart, String timeEnd) { + public String getNoOrderDevice(String timeStart, String timeEnd,String areaId) { if(ObjectUtil.isNotEmpty(timeStart)&&ObjectUtil.isNotEmpty(timeEnd)){ - return asDeviceMapper.getNoOrderDevice(timeStart,timeEnd); + return asDeviceMapper.getNoOrderDevice(timeStart,timeEnd,areaId); } return null; } @@ -775,7 +802,7 @@ public class AsDeviceServiceImpl extends ServiceImpl i @Transactional @SneakyThrows @Override - public Boolean lock(String sn,String orderNo) { + public Boolean lock(String sn,String orderNo,String isBluetooth,String lon,String lat) { EtOrder order = etOrderService.selectEtOrderByOrderNo(orderNo); if(StrUtil.isBlank(sn)) { sn = order.getSn(); @@ -783,8 +810,14 @@ public class AsDeviceServiceImpl extends ServiceImpl i AsDevice asDevice = asDeviceMapper.selectAsDeviceBySn(sn); /** 1.获取token*/ String token = Token.getToken(); - /** 2.发送命令*/ - sendCommand(asDevice.getMac(), token,IotConstants.COMMAND_LLOSE+IotConstants.COMMAND_FREQUENCY_3600,"临时锁车"); + if(!"true".equals(isBluetooth)){ + /** 2.发送命令*/ + sendCommand(asDevice.getMac(), token,IotConstants.COMMAND_LLOSE+IotConstants.COMMAND_FREQUENCY_3600,"临时锁车"); + }else{ + asDevice.setLongitude(lon); + asDevice.setLatitude(lat); + asDevice.setLastTime(DateUtils.getNowDate()); + } asDevice.setLockStatus(ServiceConstants.LOCK_STATUS_CLOSE); if(StrUtil.isNotBlank(orderNo)){//有订单号,则是用户临时锁车 /** 改变车辆状态:4-临时锁车 */ @@ -853,9 +886,10 @@ public class AsDeviceServiceImpl extends ServiceImpl i /** * 临时解锁 */ + @Transactional @SneakyThrows @Override - public Boolean unlock(String sn, String orderNo) { + public Boolean unlock(String sn, String orderNo,String isBluetooth,String lon,String lat) { EtOrder order = etOrderService.selectEtOrderByOrderNo(orderNo); if(order==null)throw new ServiceException("订单不存在"); if(StrUtil.isBlank(sn)) { @@ -865,43 +899,38 @@ public class AsDeviceServiceImpl extends ServiceImpl i /** 1.获取token*/ String token = Token.getToken(); String finalSn = sn; - Boolean execute = transactionTemplate.execute(e -> { + if(!"true".equals(isBluetooth)){ /** 2.发送命令*/ sendCommand(asDevice.getMac(), token,IotConstants.COMMAND_OPEN+IotConstants.COMMAND_FREQUENCY_5,"临时解锁"); - //间隔1秒 -// try { -// Thread.sleep(500); -// } catch (InterruptedException ex) { -// ex.printStackTrace(); -// } -// sendCommand(asDevice.getMac(), token,IotConstants.COMMAND_PLAY0,"临时解锁播报"); - if(StrUtil.isNotBlank(orderNo)){//有订单号,则是用户骑行中解锁 - /** 改变车辆状态:3-骑行中 */ - asDevice.setStatus(ServiceConstants.VEHICLE_STATUS_IN_USING);//骑行中 - asDevice.setLockStatus(ServiceConstants.LOCK_STATUS_OPEN); - int device = asDeviceMapper.updateAsDevice(asDevice); - if(device==0){ - log.info("【临时解锁】改变车辆状态失败"); - throw new ServiceException("【临时解锁】改变车辆状态失败"); - } - /** 5.记录行程*/ - int tripLog = tripLogService.tripLog(orderNo, finalSn,ServiceConstants.TRIP_LOG_TYPE_TEMPORARILY_UNLOCK); - if(tripLog==0){ - log.info("【临时解锁】记录行程失败"); - throw new ServiceException("【临时解锁】记录行程失败"); - } - }else{ - /** 改变车辆锁状态:1-开 */ - asDevice.setLockStatus(ServiceConstants.LOCK_STATUS_OPEN); - int device = asDeviceMapper.updateAsDevice(asDevice); - if(device==0){ - log.info("【临时解锁】改变车辆状态失败"); - throw new ServiceException("【临时解锁】改变车辆状态失败"); - } + }else{ + asDevice.setLongitude(lon); + asDevice.setLatitude(lat); + asDevice.setLastTime(DateUtils.getNowDate()); + } + if(StrUtil.isNotBlank(orderNo)){//有订单号,则是用户骑行中解锁 + /** 改变车辆状态:3-骑行中 */ + asDevice.setStatus(ServiceConstants.VEHICLE_STATUS_IN_USING);//骑行中 + asDevice.setLockStatus(ServiceConstants.LOCK_STATUS_OPEN); + int device = asDeviceMapper.updateAsDevice(asDevice); + if(device==0){ + log.info("【临时解锁】改变车辆状态失败"); + throw new ServiceException("【临时解锁】改变车辆状态失败"); } - return Boolean.TRUE; - }); - if(!execute)throw new ServiceException("临时解锁失败"); + /** 5.记录行程*/ + int tripLog = tripLogService.tripLog(orderNo, finalSn,ServiceConstants.TRIP_LOG_TYPE_TEMPORARILY_UNLOCK); + if(tripLog==0){ + log.info("【临时解锁】记录行程失败"); + throw new ServiceException("【临时解锁】记录行程失败"); + } + }else{ + /** 改变车辆锁状态:1-开 */ + asDevice.setLockStatus(ServiceConstants.LOCK_STATUS_OPEN); + int device = asDeviceMapper.updateAsDevice(asDevice); + if(device==0){ + log.info("【临时解锁】改变车辆状态失败"); + throw new ServiceException("【临时解锁】改变车辆状态失败"); + } + } return Boolean.TRUE; } @@ -1043,7 +1072,7 @@ public class AsDeviceServiceImpl extends ServiceImpl i @SneakyThrows @Override @Transactional - public Boolean returnVehicle(String orderNo,String returnType) { + public Boolean returnVehicle(String orderNo,String returnType,String isBluetooth,String lon,String lat) { if(StrUtil.isNotBlank(orderNo)){ EtOrder order = etOrderService.selectEtOrderByOrderNo(orderNo); if(ObjectUtil.isNull(order)){ @@ -1078,11 +1107,25 @@ public class AsDeviceServiceImpl extends ServiceImpl i order.setReturnTime(DateUtils.getNowDate()); String token = Token.getToken(); AsDevice device = asDeviceMapper.selectAsDeviceBySn(order.getSn()); - /** 2. 车辆远程关锁*/ - ResponseVo responseVo = sendCommandWithResp(device.getMac(), token, IotConstants.COMMAND_CLOSE + IotConstants.COMMAND_FREQUENCY_3600, "还车关锁"); - if(responseVo.getCode()!=0){ - log.info("【还车关锁】远程关锁失败"); - throw new ServiceException("远程关锁失败"); + if(ServiceConstants.RETURN_TYPE_NORMAL.equals(returnType)){ + if(!"true".equals(isBluetooth)){ + /** 2. 车辆远程关锁*/ + ResponseVo responseVo = sendCommandWithResp(device.getMac(), token, IotConstants.COMMAND_CLOSE + IotConstants.COMMAND_FREQUENCY_3600, "还车关锁"); + if(responseVo.getCode()!=0){ + log.info("【还车关锁】远程关锁失败"); + throw new ServiceException("远程关锁失败"); + } + }else{ + // 更新定位 + device.setLongitude(lon); + device.setLatitude(lat); + device.setLastTime(DateUtils.getNowDate()); + } + }else{ + ResponseVo responseVo = sendCommandWithResp(device.getMac(), token, IotConstants.COMMAND_CLOSE + IotConstants.COMMAND_FREQUENCY_3600, "还车关锁"); + if(responseVo.getCode()!=0){ + log.info("【还车关锁】远程关锁失败"); + } } /** 4. 更新车辆状态*/ device.setStatus(ServiceConstants.VEHICLE_STATUS_NORMAL); @@ -1094,6 +1137,13 @@ public class AsDeviceServiceImpl extends ServiceImpl i } /** 3. 计算订单费用,保存订单总金额*/ order = calculateOrderFee(order); + /** 6.计算行车距离*/ + String tripRouteStr = order.getTripRouteStr(); + if(StrUtil.isNotBlank(tripRouteStr)){ + double[][] doubles = GeoUtils.parseJsonTrack(tripRouteStr); + double v = GeoUtils.calculateTotalDistance(doubles); + order.setDistance((int)Math.round(v)); + } int i = etOrderService.updateEtOrder(order); if(i==0){ throw new ServiceException("更新订单状态失败"); @@ -1244,7 +1294,7 @@ public class AsDeviceServiceImpl extends ServiceImpl i }else{ //大于起步分钟,按照时长费计算费用 //minutes除以startingMinutes得到的结构四舍五入 - minutes = minutes - timeoutTime;//扣掉起步分钟数后 + minutes = minutes - startingTime;//扣掉起步分钟数后 double ceil = Math.ceil(minutes / timeoutTime) +1 ; ridingFee = new BigDecimal(ceil * Double.parseDouble(timeoutPrice)); BigDecimal startingPriceB = new BigDecimal(startingPrice); @@ -1332,7 +1382,7 @@ public class AsDeviceServiceImpl extends ServiceImpl i EtOperatingArea area = etOperatingAreaService.selectEtOperatingAreaByAreaId(areaId); if(ObjectUtil.isNull(parkingAreas) || parkingAreas.size() == 0){ log.info("运营区【{}】没有停车区,",areaId); - throw new ServiceException("运营区【{}】没有停车区"+areaId.toString()); + throw new ServiceException("运营区【{"+area.getAreaName()+"}】没有停车区"); } double tolerance = area.getError(); // 误差距离 for (EtParkingArea etParkingArea : parkingAreas) { @@ -1354,6 +1404,32 @@ public class AsDeviceServiceImpl extends ServiceImpl i return inCircle; } + private Boolean isParkingZoneByLocation(String longitude, String latitude,Long areaId) { + Boolean inCircle = false; + EtParkingArea parkingArea = new EtParkingArea(); + parkingArea.setAreaId(areaId); + parkingArea.setType(ServiceConstants.PARKING_AREA_TYPE_PARKFING); + List parkingAreas = parkingAreaService.selectEtParkingAreaList(parkingArea); + EtOperatingArea area = etOperatingAreaService.selectEtOperatingAreaByAreaId(areaId); + if(ObjectUtil.isNull(parkingAreas) || parkingAreas.size() == 0){ + log.info("运营区【{}】没有停车区,",areaId); + throw new ServiceException("运营区【{}】没有停车区"+areaId.toString()); + } + double tolerance = area.getError(); // 误差距离 + for (EtParkingArea etParkingArea : parkingAreas) { + Geometry geometry = GeoUtils.fromWkt(etParkingArea.getBoundary()); + inCircle = GeoUtils.isInPolygonWithTolerance(longitude, latitude, geometry, tolerance); + if(inCircle){ + log.info("位置【{},{}】在停车区【{}】内",longitude,latitude,etParkingArea.getParkingName()); + inCircle = true; + break; + }else{ + log.info("位置【{},{}】在停车区【{}】内",longitude,latitude,etParkingArea.getParkingName()); + } + } + return inCircle; + } + /** * 是否在运营区内 */ @@ -1538,6 +1614,33 @@ public class AsDeviceServiceImpl extends ServiceImpl i return UserConstants.UNIQUE; } + /** + * 根据mac号判断是否有绑定过 + */ + @Override + public boolean isBandByMac(String mac) { + AsDevice info = asDeviceMapper.checkMACUnique(mac); + if (StringUtils.isNull(info)) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 判断是否在停车区 + */ + @Override + public IsInParkingAreaVo isInParkingArea(String longitude, String latitude,String areaId){ + EtOperatingArea area = etOperatingAreaService.selectEtOperatingAreaByAreaId(Long.parseLong(areaId)); + IsInParkingAreaVo isInParkingAreaVo = new IsInParkingAreaVo(); + Boolean parkingZoneByLocation = isParkingZoneByLocation(longitude, latitude, Long.parseLong(areaId)); + isInParkingAreaVo.setIsInParkingArea(parkingZoneByLocation); + //停车点还车:0-关闭;1-开启 + isInParkingAreaVo.setParkingReturn("1".equals(area.getParkingReturn())); + return isInParkingAreaVo; + } + /** * sn和mac号绑定 @@ -1546,27 +1649,36 @@ public class AsDeviceServiceImpl extends ServiceImpl i @SneakyThrows @Override public int bandSn(AsDevice asDevice) { - // 调用onenet接口 - CreateDeviceVo createDeviceVo = new CreateDeviceVo(); - createDeviceVo.setDevice_name(asDevice.getMac()); - createDeviceVo.setProduct_id(productId); - String result = HttpUtils.sendPostWithToken(deviceUrl,JSON.toJSONString(createDeviceVo), Token.getToken()); - log.info("【sn和mac号绑定】===>IOT请求调用结果:【{}】",result); - JSONObject paramsObj = JSON.parseObject(result); - String code = paramsObj.getString("code"); - //记录命令 - if (!HttpStatus.IOT_SUCCESS.equals(code)) - { - throw new ServiceException(code+"-----"+ paramsObj.getString("msg")); - } - try{ - int insert = asDeviceMapper.insert(asDevice); - if(insert==0){ + AsDevice device = asDeviceMapper.selectAsDeviceByMac(asDevice.getMac()); + if(StringUtils.isNotNull(device)){ + device.setSn(asDevice.getSn()); + int i = asDeviceMapper.updateAsDeviceBySn(device); + if(i>0){ + log.info("【sn和mac号绑定】===>mac【{}】已经绑定过:更新sn【{}】成功",device.getMac(),device.getSn()); + } + }else{ + // 调用onenet接口 + CreateDeviceVo createDeviceVo = new CreateDeviceVo(); + createDeviceVo.setDevice_name(asDevice.getMac()); + createDeviceVo.setProduct_id(productId); + String result = HttpUtils.sendPostWithToken(deviceUrl,JSON.toJSONString(createDeviceVo), Token.getToken()); + log.info("【sn和mac号绑定】===>IOT请求调用结果:【{}】",result); + JSONObject paramsObj = JSON.parseObject(result); + String code = paramsObj.getString("code"); + //记录命令 + if (!HttpStatus.IOT_SUCCESS.equals(code)) + { + throw new ServiceException(code+"-----"+ paramsObj.getString("msg")); + } + try{ + int insert = asDeviceMapper.insert(asDevice); + if(insert==0){ + throw new ServiceException("该SN已经存在,请勿重复绑定!"); + } + }catch (Exception e){ + log.error("该SN已经存在",e.getMessage()); throw new ServiceException("该SN已经存在,请勿重复绑定!"); } - }catch (Exception e){ - log.error("该SN已经存在",e.getMessage()); - throw new ServiceException("该SN已经存在,请勿重复绑定!"); } return 1; } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsUserServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsUserServiceImpl.java index 5444229..3a8b3d7 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsUserServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/AsUserServiceImpl.java @@ -19,6 +19,7 @@ import com.ruoyi.system.domain.EtOperatingArea; import com.ruoyi.system.domain.EtOrder; import com.ruoyi.system.domain.vo.AuthenticationVo; import com.ruoyi.system.mapper.AsUserMapper; +import com.ruoyi.system.mapper.EtOrderMapper; import com.ruoyi.system.service.IAsUserService; import com.ruoyi.system.service.IEtOperatingAreaService; import com.ruoyi.system.service.IEtOrderService; @@ -64,6 +65,9 @@ public class AsUserServiceImpl implements IAsUserService @Autowired private RedisCache redisCache; + @Resource + private EtOrderMapper etOrderMapper; + @Value("${et.verifyUrl}") private String verifyUrl; @@ -456,7 +460,7 @@ public class AsUserServiceImpl implements IAsUserService etOrder.setType(ServiceConstants.ORDER_TYPE_DEPOSIT); etOrder.setUserId(userId); etOrder.setPaid("1"); - if(etOrderService.selectEtOrderList(etOrder).size()<1){//没有充值押金记录 + if(etOrderMapper.selectEtOrderList(etOrder).size()<1){//没有充值押金记录 log.info("用户【{}】没有充值押金记录",userId); return false; } @@ -467,9 +471,9 @@ public class AsUserServiceImpl implements IAsUserService * 新增用户 */ @Override - public String getNewUser(String powerStart, String powerEnd) { + public String getNewUser(String powerStart, String powerEnd,String areaId) { if(StringUtils.isNotEmpty(powerStart) && StringUtils.isNotEmpty(powerEnd)){ - return asUserMapper.getNewUser(powerStart,powerEnd); + return asUserMapper.getNewUser(powerStart,powerEnd,areaId); } return null; } @@ -478,9 +482,9 @@ public class AsUserServiceImpl implements IAsUserService * 总用户 */ @Override - public String getTotalUser(String powerStart, String powerEnd) { + public String getTotalUser(String powerStart, String powerEnd,String areaId) { if(StringUtils.isNotEmpty(powerStart) && StringUtils.isNotEmpty(powerEnd)){ - return asUserMapper.getTotalUser(powerStart,powerEnd); + return asUserMapper.getTotalUser(powerStart,powerEnd,areaId); } return null; } @@ -489,9 +493,9 @@ public class AsUserServiceImpl implements IAsUserService * 租赁用户 */ @Override - public String getLeaseUser(String powerStart, String powerEnd) { + public String getLeaseUser(String powerStart, String powerEnd,String areaId) { if(StringUtils.isNotEmpty(powerStart) && StringUtils.isNotEmpty(powerEnd)){ - return asUserMapper.getLeaseUser(powerStart,powerEnd); + return asUserMapper.getLeaseUser(powerStart,powerEnd,areaId); } return null; } @@ -503,7 +507,7 @@ public class AsUserServiceImpl implements IAsUserService @Override public int bandSystemUser(AsUser user) { // 删除用户缓存 - Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.APP_LOGIN_TOKEN_KEY + "*"); redisCache.deleteObject(keys); return asUserMapper.updateUser(user); } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/CallbackServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/CallbackServiceImpl.java index 0543a12..8bd1163 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/CallbackServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/CallbackServiceImpl.java @@ -436,11 +436,11 @@ public class CallbackServiceImpl implements CallbackService { // 更新用户信息,清除缓存 asUser.setBalance(BigDecimal.ZERO); int updateUser = userService.updateUser(asUser); - if(updateUser>0){ - Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); - redisCache.deleteObject(keys); - logger.info("【微信支付回调】退还押金,更新用户余额成功!"); - } +// if(updateUser>0){ +// Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); +// redisCache.deleteObject(keys); +// logger.info("【微信支付回调】退还押金,更新用户余额成功!"); +// } logger.info("=================【微信支付回调】退还押金定时任务结束!!!=================="); } else { throw new ServiceException("没有找到押金充值记录"); diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFaultServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFaultServiceImpl.java index 472953e..bbf8800 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFaultServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtFaultServiceImpl.java @@ -12,6 +12,7 @@ import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.domain.*; +import com.ruoyi.system.mapper.AsDeviceMapper; import com.ruoyi.system.mapper.EtFaultMapper; import com.ruoyi.system.service.*; import lombok.extern.slf4j.Slf4j; @@ -56,6 +57,9 @@ public class EtFaultServiceImpl implements IEtFaultService @Autowired private IEtAdminOrderHistoryService etAdminOrderHistoryService; + @Resource + private AsDeviceMapper asDeviceMapper; + /** @@ -175,7 +179,7 @@ public class EtFaultServiceImpl implements IEtFaultService String orderNo = IdUtils.getOrderNo("wx"); EtAdminOrder adminOrder = new EtAdminOrder(); adminOrder.setOrderNo(orderNo); - adminOrder.setDeviceMac(etFault.getDeviceMac()); + adminOrder.setSn(etFault.getSn()); adminOrder.setType("1"); adminOrder.setStatus("3"); adminOrder.setIsEffective("1"); @@ -183,6 +187,10 @@ public class EtFaultServiceImpl implements IEtFaultService adminOrder.setAdminId(sysUser.getUserId()); adminOrder.setAdminName(sysUser.getUserName()); adminOrder.setFaultId(etFault.getFaultId()); + AsDevice asDevice = asDeviceMapper.selectAsDeviceBySn(etFault.getSn()); + if(ObjectUtil.isNotNull(asDevice)){ + adminOrder.setAreaId(asDevice.getAreaId()); + } int adminOrder1 = etAdminOrderService.insertEtAdminOrder(adminOrder); if(adminOrder1>0){ log.info("工单创建成功"); diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtModelServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtModelServiceImpl.java index 7c2f220..0a18570 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtModelServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtModelServiceImpl.java @@ -11,9 +11,11 @@ import com.ruoyi.common.core.domain.entity.AsUser; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.onenet.ResponseVo; import com.ruoyi.common.utils.onenet.Token; import com.ruoyi.system.domain.AsDevice; import com.ruoyi.system.mapper.AsDeviceMapper; @@ -161,7 +163,10 @@ public class EtModelServiceImpl implements IEtModelService Integer quantityByPercentage = CommonUtil.getElectricQuantityByPercentage(lowBatteryReminder, etModel.getFullVoltage(), etModel.getLowVoltage()); String lowVoltageCommand = IotConstants.COMMAND_BAT + quantityByPercentage * 10 + "@"; log.info("发送低电压命令:" + lowVoltageCommand); - asDeviceService.sendCommand(asDevice.getMac(), Token.getToken(), lowVoltageCommand,"发送低电压播报"); + ResponseVo responseVo = asDeviceService.sendCommandWithResp(asDevice.getMac(), Token.getToken(), lowVoltageCommand,"发送低电压播报"); + if(responseVo.getCode()!=0){ + log.info("【还车关锁】设备【{}】远程关锁失败", asDevice.getMac()); + } } } return i; diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOperatingAreaServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOperatingAreaServiceImpl.java index 94e7c52..f2be24f 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOperatingAreaServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOperatingAreaServiceImpl.java @@ -262,7 +262,9 @@ public class EtOperatingAreaServiceImpl extends ServiceImpl etOperatingAreas = etOperatingAreaService.selectEtOperatingAreaList(area1); EtOperatingArea area = null; for(EtOperatingArea etOperatingArea:etOperatingAreas){ @@ -325,5 +327,16 @@ public class EtOperatingAreaServiceImpl extends ServiceImpl selectAreaListByDeptId2(Long deptId) { + return dao.selectAreaListByDeptId2(deptId); + } + } diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java index 28f4d22..5cdeb41 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtOrderServiceImpl.java @@ -2,10 +2,13 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSON; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.ServiceConstants; import com.ruoyi.common.core.domain.entity.AsUser; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; @@ -83,6 +86,9 @@ public class EtOrderServiceImpl implements IEtOrderService @Autowired private CallbackService callbackService; + @Autowired + private ISysUserService userService; + @Autowired private ISysDeptService deptService; @@ -102,6 +108,20 @@ public class EtOrderServiceImpl implements IEtOrderService EtOrder order = etOrderMapper.selectEtOrderByOrderId(orderId); AsDevice device = asDeviceMapper.selectAsDeviceBySn(order.getSn()); order.setDevice(device); + EtFeeRule etFeeRule = etFeeRuleService.selectEtFeeRuleByRuleId(order.getRuleId()); + order.setRule(etFeeRule); + //行程记录 + EtTripLog tripLog = new EtTripLog(); + tripLog.setOrderNo(order.getOrderNo()); + List tripLogs = etTripLogService.selectEtTripLogList(tripLog); + if(ObjectUtils.isNotEmpty(tripLogs)){ + order.setTripLogs(tripLogs); + } + // 退款记录 + EtRefund refund = etRefundService.selectEtRefundByOrderNo(order.getOrderNo()); + if(ObjectUtils.isNotEmpty(refund)){ + order.setEtRefund(refund); + } return order; } @@ -147,6 +167,7 @@ public class EtOrderServiceImpl implements IEtOrderService if(ObjectUtils.isNotEmpty(user)){ order.setPhonenumber(user.getPhonenumber()); order.setUserName(user.getUserName()); + order.setRealName(user.getRealName()); } EtOperatingArea area = etOperatingAreaService.selectEtOperatingAreaByAreaId(order.getAreaId()); if(ObjectUtils.isNotEmpty(area)){ @@ -261,6 +282,7 @@ public class EtOrderServiceImpl implements IEtOrderService EtRefund refund = new EtRefund(); refund.setType(ServiceConstants.REFUND_TYPE_DEPOSIT); refund.setRefundResult(Constants.SUCCESS2); + refund.setUserName(etOrder.getUserName()); List etRefunds = etRefundService.selectEtRefundListWithIsolate(refund); etRefunds.forEach(etRefund -> { AsUser asUser = asUserService.selectUserById(etRefund.getUserId()); @@ -543,45 +565,45 @@ public class EtOrderServiceImpl implements IEtOrderService * 运营数据 */ @Override - public OperatingDataVo getOperatingData(String timeStart,String timeEnd) { + public OperatingDataVo getOperatingData(String timeStart,String timeEnd,String areaId) { OperatingDataVo operatingDataVo = new OperatingDataVo(); if(StrUtil.isNotBlank(timeStart) && StrUtil.isNotBlank(timeEnd)){ /*收入相关*/ OperatingDataVo.Income income = new OperatingDataVo.Income(); - income.setTotalIncome(etOrderMapper.getTotalIncome(timeStart,timeEnd));//总收入 - income.setTotalUnpaid(etOrderMapper.getTotalUnpaid(timeStart,timeEnd));//累计待支付 - income.setTotalPaid(etOrderMapper.getTotalPaid(timeStart,timeEnd));//已支付 - income.setTotalRefund(etOrderMapper.getTotalRefund(timeStart,timeEnd));//已退款 - income.setTotalRidingFee(etOrderMapper.getTotalRidingFee(timeStart,timeEnd));//骑行已支付 - income.setTotalRidingRefund(etOrderMapper.getTotalRidingRefund(timeStart,timeEnd));//骑行已退款 - income.setTotalDispatchFee(etOrderMapper.getTotalDispatchFee(timeStart,timeEnd));//调度费已支付 - income.setTotalDispatchRefund(etOrderMapper.getTotalDispatchRefund(timeStart,timeEnd));//调度费已退款 - income.setTotalAppointmentFee(etOrderMapper.getTotalAppointmentFee(timeStart,timeEnd));//预约费已支付 - income.setTotalAppointmentRefund(etOrderMapper.getTotalAppointmentRefund(timeStart,timeEnd));//预约费已退款 - income.setTotalManageFee(etOrderMapper.getTotalManageFee(timeStart,timeEnd));//管理费已支付 - income.setTotalManageRefund(etOrderMapper.getTotalManageRefund(timeStart,timeEnd));//管理费已退款 + income.setTotalIncome(etOrderMapper.getTotalIncome(timeStart,timeEnd,areaId));//总收入 + income.setTotalUnpaid(etOrderMapper.getTotalUnpaid(timeStart,timeEnd,areaId));//累计待支付 + income.setTotalPaid(etOrderMapper.getTotalPaid(timeStart,timeEnd,areaId));//已支付 + income.setTotalRefund(etOrderMapper.getTotalRefund(timeStart,timeEnd,areaId));//已退款 + income.setTotalRidingFee(etOrderMapper.getTotalRidingFee(timeStart,timeEnd,areaId));//骑行已支付 + income.setTotalRidingRefund(etOrderMapper.getTotalRidingRefund(timeStart,timeEnd,areaId));//骑行已退款 + income.setTotalDispatchFee(etOrderMapper.getTotalDispatchFee(timeStart,timeEnd,areaId));//调度费已支付 + income.setTotalDispatchRefund(etOrderMapper.getTotalDispatchRefund(timeStart,timeEnd,areaId));//调度费已退款 + income.setTotalAppointmentFee(etOrderMapper.getTotalAppointmentFee(timeStart,timeEnd,areaId));//预约费已支付 + income.setTotalAppointmentRefund(etOrderMapper.getTotalAppointmentRefund(timeStart,timeEnd,areaId));//预约费已退款 + income.setTotalManageFee(etOrderMapper.getTotalManageFee(timeStart,timeEnd,areaId));//管理费已支付 + income.setTotalManageRefund(etOrderMapper.getTotalManageRefund(timeStart,timeEnd,areaId));//管理费已退款 operatingDataVo.setIncome(income); /*订单相关*/ OperatingDataVo.OrderVo orderVo = new OperatingDataVo.OrderVo(); - orderVo.setPaidOrder(etOrderMapper.getPaidOrder(timeStart,timeEnd));//已支付订单 - orderVo.setRidingOrder(etOrderMapper.getRidingOrder(timeStart,timeEnd));//骑行中订单 - orderVo.setRefundOrder(etOrderMapper.getRefundOrder(timeStart,timeEnd));//退款订单 - orderVo.setUnpaidOrder(etOrderMapper.getUnpaidOrder(timeStart,timeEnd));//待支付订单 + orderVo.setPaidOrder(etOrderMapper.getPaidOrder(timeStart,timeEnd,areaId));//已支付订单 + orderVo.setRidingOrder(etOrderMapper.getRidingOrder(timeStart,timeEnd,areaId));//骑行中订单 + orderVo.setRefundOrder(etOrderMapper.getRefundOrder(timeStart,timeEnd,areaId));//退款订单 + orderVo.setUnpaidOrder(etOrderMapper.getUnpaidOrder(timeStart,timeEnd,areaId));//待支付订单 operatingDataVo.setOrder(orderVo); /*设备相关*/ OperatingDataVo.DeviceVo deviceVo = new OperatingDataVo.DeviceVo(); - deviceVo.setInOperationDevice(deviceService.getInOperationDevice(timeStart,timeEnd));//运营中车辆 - deviceVo.setInOrderDevice(deviceService.getInOrderDevice(timeStart,timeEnd));//有订单车辆 - deviceVo.setNoOrderDevice(deviceService.getNoOrderDevice(timeStart,timeEnd));//无订单车辆 + deviceVo.setInOperationDevice(deviceService.getInOperationDevice(timeStart,timeEnd,areaId));//运营中车辆 + deviceVo.setInOrderDevice(deviceService.getInOrderDevice(timeStart,timeEnd,areaId));//有订单车辆 + deviceVo.setNoOrderDevice(deviceService.getNoOrderDevice(timeStart,timeEnd,areaId));//无订单车辆 operatingDataVo.setDevice(deviceVo); /*用户相关*/ OperatingDataVo.UserVo userVo = new OperatingDataVo.UserVo(); - userVo.setTotalUser(asUserService.getTotalUser(timeStart,timeEnd));//总用户 - userVo.setNewUser(asUserService.getNewUser(timeStart,timeEnd));//新增用户 - userVo.setLeaseUser(asUserService.getLeaseUser(timeStart,timeEnd));//租赁用户 + userVo.setTotalUser(asUserService.getTotalUser(timeStart,timeEnd,areaId));//总用户 + userVo.setNewUser(asUserService.getNewUser(timeStart,timeEnd,areaId));//新增用户 + userVo.setLeaseUser(asUserService.getLeaseUser(timeStart,timeEnd,areaId));//租赁用户 operatingDataVo.setUser(userVo); return operatingDataVo; }else{ @@ -720,12 +742,12 @@ public class EtOrderServiceImpl implements IEtOrderService * type: 1-按日期 2-按车辆 */ @SneakyThrows - public ReconciliationVo reconciliation(String timeStart, String timeEnd, String type, String sn) { + public ReconciliationVo reconciliation(String timeStart, String timeEnd, String type, String sn,String areaId) { ReconciliationVo reconciliationVo = new ReconciliationVo(); List reconciliations = new ArrayList<>(); if ("1".equals(type)) { - reconciliationVo = handleReconciliationByDate(timeStart, timeEnd, reconciliations); + reconciliationVo = handleReconciliationByDate(timeStart, timeEnd, reconciliations,areaId); } else if ("2".equals(type)) { reconciliationVo = handleReconciliationByVehicle(timeStart, timeEnd, sn, reconciliations); } else { @@ -735,14 +757,13 @@ public class EtOrderServiceImpl implements IEtOrderService return reconciliationVo; } - private ReconciliationVo handleReconciliationByDate(String timeStart, String timeEnd, List reconciliations) throws Exception { + private ReconciliationVo handleReconciliationByDate(String timeStart, String timeEnd, List reconciliations,String areaId) throws Exception { ReconciliationVo reconciliationVo = new ReconciliationVo(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); int limit = DateUtils.differentDaysByMillisecond(timeStart, timeEnd) + 1; Calendar calendar = Calendar.getInstance(); calendar.setTime(dateFormat.parse(timeEnd)); - List areaIds = getAreaIds(); for (int i = 0; i < limit; i++) { String formattedDate = dateFormat.format(calendar.getTime()); @@ -750,9 +771,7 @@ public class EtOrderServiceImpl implements IEtOrderService String endDateStr = formattedDate + " " + Constants.DATE_FORMAT_END_PEREND; if (StrUtil.isNotBlank(timeStart) && StrUtil.isNotBlank(timeEnd)) { - for (Long areaId : areaIds) { - reconciliations.add(createReconciliationByDate(formattedDate, startDateStr, endDateStr, areaId)); - } + reconciliations.add(createReconciliationByDate(formattedDate, startDateStr, endDateStr, Long.parseLong(areaId))); } calendar.add(Calendar.DATE, -1); @@ -770,7 +789,8 @@ public class EtOrderServiceImpl implements IEtOrderService } AsDevice device1 = new AsDevice(); device1.setSn(sn); - List devices = asDeviceService.selectAsDeviceList(device1); + List devices = asDeviceMapper.selectAsDeviceList(device1); + log.info("【收入对账】根据sn搜索出的devices:{}", JSON.toJSON(devices)); for (AsDevice device : devices) { reconciliations.add(createReconciliationByVehicle(timeStart, timeEnd, device.getSn())); } @@ -785,7 +805,8 @@ public class EtOrderServiceImpl implements IEtOrderService StringBuilder ridingFee = new StringBuilder(); StringBuilder dispatchFee = new StringBuilder(); reconciliation.setAreaName(etOperatingAreaService.selectEtOperatingAreaByAreaId(areaId).getAreaName()); - reconciliation.setDeptName(deptService.selectDeptById(SecurityUtils.getLoginUser().getUser().getDeptId()).getDeptName()); + SysDept deptObjByAreaId = wxPayService.getDeptObjByAreaId(areaId); + reconciliation.setDeptName(deptObjByAreaId.getDeptName()); reconciliation.setDay(formattedDate); BigDecimal payFee = defaultIfNull(etOrderMapper.getPayFee(startDateStr, endDateStr, null, areaId), BigDecimal.ZERO);//新增 @@ -825,10 +846,10 @@ public class EtOrderServiceImpl implements IEtOrderService return reconciliation; } - private List getAreaIds() { - Long deptId = SecurityUtils.getLoginUser().getUser().getDeptId(); - return deptId == 100 ? etOperatingAreaService.selectAreaListByDeptId(null) : etOperatingAreaService.selectAreaListByDeptId(deptId); - } +// private List getAreaIds() { +// Long deptId = SecurityUtils.getLoginUser().getUser().getDeptId(); +// return deptId == 100 ? etOperatingAreaService.selectAreaListByDeptId(null) : etOperatingAreaService.selectAreaListByDeptId(deptId); +// } private void calculateTotal(List reconciliations, ReconciliationVo reconciliationVo) { reconciliationVo.setTotalPayFee(calculateTotalField(reconciliations, ReconciliationVo.Reconciliation::getPayFee)); diff --git a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtTripLogServiceImpl.java b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtTripLogServiceImpl.java index 02fa704..6907bea 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtTripLogServiceImpl.java +++ b/electripper-system/src/main/java/com/ruoyi/system/service/impl/EtTripLogServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.common.utils.CommonUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.domain.AsDevice; import com.ruoyi.system.domain.EtOrder; +import com.ruoyi.system.mapper.AsDeviceMapper; import com.ruoyi.system.service.IAsDeviceService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +18,8 @@ import com.ruoyi.system.mapper.EtTripLogMapper; import com.ruoyi.system.domain.EtTripLog; import com.ruoyi.system.service.IEtTripLogService; +import javax.annotation.Resource; + /** * 行程记录Service业务层处理 * @@ -33,6 +36,9 @@ public class EtTripLogServiceImpl implements IEtTripLogService @Autowired private IAsDeviceService asDeviceService; + @Resource + private AsDeviceMapper asDeviceMapper; + /** * 查询行程记录 @@ -114,7 +120,7 @@ public class EtTripLogServiceImpl implements IEtTripLogService etTripLog.setOrderNo(orderNo); AsDevice asDevice = null; if(StrUtil.isNotBlank(sn)){ - asDevice = asDeviceService.selectAsDeviceBySn(sn); + asDevice = asDeviceMapper.selectAsDeviceBySn(sn); etTripLog.setLatitude(asDevice.getLatitude()); etTripLog.setLongitude(asDevice.getLongitude()); String location = asDevice.getLongitude() + ","+asDevice.getLatitude(); diff --git a/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java b/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java index c2bf8bc..a274bac 100644 --- a/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java +++ b/electripper-system/src/main/java/com/ruoyi/system/task/EtTask.java @@ -224,8 +224,8 @@ public class EtTask { asUser.setBalance(BigDecimal.ZERO); int updateUser = asUserMapper.updateUser(asUser); if(updateUser>0){ - Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); - redisCache.deleteObject(keys); +// Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.APP_LOGIN_TOKEN_KEY + "*"); +// redisCache.deleteObject(keys); log.info("【系统启动】退还押金,更新用户余额成功!"); } log.info("=================【系统启动】退还押金定时任务结束!!!=================="); diff --git a/electripper-system/src/main/resources/mapper/system/AsArticleClassifyMapper.xml b/electripper-system/src/main/resources/mapper/system/AsArticleClassifyMapper.xml index 6bb2df7..0471542 100644 --- a/electripper-system/src/main/resources/mapper/system/AsArticleClassifyMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/AsArticleClassifyMapper.xml @@ -8,6 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -26,7 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/electripper-system/src/main/resources/mapper/system/EtAdminOrderMapper.xml b/electripper-system/src/main/resources/mapper/system/EtAdminOrderMapper.xml index bed470f..aaeab70 100644 --- a/electripper-system/src/main/resources/mapper/system/EtAdminOrderMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtAdminOrderMapper.xml @@ -53,6 +53,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and ao.is_effective = #{isEffective} and ao.address = #{address} and ao.complete_time = #{completeTime} + and ao.area_id = #{areaId} ${params.dataScope} @@ -63,10 +64,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml index f384566..87d43e0 100644 --- a/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml +++ b/electripper-system/src/main/resources/mapper/system/EtOrderMapper.xml @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -59,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" o.rule_id, o.device_mac, o.sn, + de.vehicle_num, o.pay_time, o.paid, o.pay_type, @@ -88,12 +90,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" LEFT JOIN et_operating_area oa ON o.area_id = oa.area_id LEFT JOIN + et_device de ON de.sn = o.sn + LEFT JOIN et_user u ON u.user_id = o.user_id LEFT join et_area_dept ad on ad.area_id = oa.area_id LEFT join sys_dept d on d.dept_id = ad.dept_id where 1 = 1 and o.order_no like concat('%', #{orderNo}, '%') and oa.area_name like concat('%', #{area}, '%') + and o.area_id = #{areaId} and u.user_name like concat('%', #{userName}, '%') and u.phonenumber like concat('%', #{phonenumber}, '%') and o.user_id = #{userId} @@ -196,6 +201,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select COALESCE(SUM(total_fee), 0) from et_order where status = 4 and type = 1 AND date_format(create_time,'%y%m%d') >= date_format(#{timeStart},'%y%m%d') AND date_format(create_time,'%y%m%d') <= date_format(#{timeEnd},'%y%m%d') + and area_id = #{areaId} - select COALESCE(SUM(total_fee), 0) from et_order + select COALESCE(SUM(amount), 0) from et_refund ref + left join et_order o on o.order_no = ref.order_no - and sn = #{sn} - and area_id = #{areaId} + and o.sn = #{sn} + and o.area_id = #{areaId} - AND date_format(create_time,'%y%m%d') >= date_format(#{startDateStr},'%y%m%d') + AND date_format(o.create_time,'%y%m%d') >= date_format(#{startDateStr},'%y%m%d') - AND date_format(create_time,'%y%m%d') <= date_format(#{endDateStr},'%y%m%d') + AND date_format(o.create_time,'%y%m%d') <= date_format(#{endDateStr},'%y%m%d') - AND status = 4 and type = 1 + AND ref.type = 1 AND ref.refund_result = 'SUCCESS'