1.收费方式自定义排序

This commit is contained in:
邱贞招 2024-10-24 21:33:56 +08:00
parent a4f1935475
commit 9b7a05ddf0
4 changed files with 49 additions and 27 deletions

View File

@ -42,6 +42,7 @@ import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -96,6 +97,9 @@ public class ReceiveController {
private static AtomicLong lastCommandTime = new AtomicLong(0); private static AtomicLong lastCommandTime = new AtomicLong(0);
private static final long COMMAND_COOLDOWN_MS = 5 * 60 * 1000; // 5分钟 private static final long COMMAND_COOLDOWN_MS = 5 * 60 * 1000; // 5分钟
// 用于标记每个设备的状态
private static Map<String, Long> noOrderMarkers = new ConcurrentHashMap<>();
private static final Map<String, Long> commandCooldownMap = new ConcurrentHashMap<>(); private static final Map<String, Long> commandCooldownMap = new ConcurrentHashMap<>();
private static final long COOLDOWN_PERIOD_MS = 10000; // 冷却时间为 10 private static final long COOLDOWN_PERIOD_MS = 10000; // 冷却时间为 10
@ -181,7 +185,11 @@ public class ReceiveController {
/** 3.超出运营区外断电 包含靠近运营区播报 */ /** 3.超出运营区外断电 包含靠近运营区播报 */
outAreaOutage(value, asDevice, lon, lat, area, isAdminUnlocking, noRidingArea); outAreaOutage(value, asDevice, lon, lat, area, isAdminUnlocking, noRidingArea);
/** 4.锁同步关锁 */ /** 4.锁同步关锁 */
lockSynchronization(msg, asDevice, logEntry, value, asDevice, lon, lat); if(asDevice.getStatus().equals(ServiceConstants.VEHICLE_STATUS_NORMAL)){
log.info("锁同步关锁:" +asDevice.getSn());
lockSynchronization(msg, asDevice, logEntry, value, lon, lat);
}
/** 5.低电量 生成换电工单*/ /** 5.低电量 生成换电工单*/
replacementOrder(asDevice, area); replacementOrder(asDevice, area);
} }
@ -420,35 +428,44 @@ public class ReceiveController {
return noRidingArea; return noRidingArea;
} }
private void lockSynchronization(String msg, AsDevice asDevice, LogEntry logEntry, LogEntry.LocationValue value, AsDevice device, BigDecimal lon, BigDecimal lat) { private void lockSynchronization(String msg, AsDevice asDevice, LogEntry logEntry, LogEntry.LocationValue value, BigDecimal lon, BigDecimal lat) {
Integer status = value.getStatus(); Integer status = value.getStatus();
if(status == 1){//上电运行 if(status == 1){//上电运行
log.info("上电运行:" + logEntry.getDevName()); log.info("上电运行:" + logEntry.getDevName());
if(BigDecimal.ZERO.compareTo(lon) != 0 && BigDecimal.ZERO.compareTo(lat) != 0){ if(BigDecimal.ZERO.compareTo(lon) != 0 && BigDecimal.ZERO.compareTo(lat) != 0){
//获取当前正在骑行中的订单 //获取当前正在骑行中的订单
boolean currentOrderNum = etOrderService.isInOrderBySn(device.getSn()); boolean currentOrderNum = etOrderService.isInOrderBySn(asDevice.getSn());
long currentTime = System.currentTimeMillis();
if(!currentOrderNum){ if(!currentOrderNum){
long currentTime = System.currentTimeMillis(); // 设备没有正在骑行中的订单
long lastTime = lastCommandTime.get();// 上一次命令时间5分账内不再执行 车辆锁同步关锁 命令 String sn = asDevice.getSn();
long difference = System.currentTimeMillis() - logEntry.getAt(); noOrderMarkers.put(sn, currentTime); // 设置标记时间
log.info("当前时间戳:【"+System.currentTimeMillis()+"】,消息时间:【"+ logEntry.getAt()+"】,时间差:【"+difference+"");
if (difference < 60 * 1000 && ServiceConstants.LOCK_STATUS_CLOSE.equals(device.getLockStatus())) {// 消息时间和当前时间时间差在1分钟内且锁状态为关闭则发送命令 // 设置定时任务5分钟后检查状态
if (currentTime - lastTime >= COMMAND_COOLDOWN_MS) { Executors.newSingleThreadScheduledExecutor().schedule(() -> {
try { if (!etOrderService.isInOrderBySn(sn)) {
asDeviceService.sendCommand(asDevice.getMac(), Token.getToken(), IotConstants.COMMAND_CLOSE + IotConstants.COMMAND_FREQUENCY_3600, "车辆锁同步关锁", null, null, msg); // 5分钟后仍然没有正在骑行中的订单
} catch (UnsupportedEncodingException e) { executeLockCommand(asDevice, msg);
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
} }
} noOrderMarkers.remove(sn); // 清除标记
}, COMMAND_COOLDOWN_MS, TimeUnit.MILLISECONDS);
} }
} }
} }
} }
private void executeLockCommand(AsDevice asDevice, String msg) {
long lastTime = lastCommandTime.get(); // 上一次命令时间
long currentTime = System.currentTimeMillis();
if (currentTime - lastTime >= COMMAND_COOLDOWN_MS) {
try {
asDeviceService.sendCommand(asDevice.getMac(), Token.getToken(), IotConstants.COMMAND_CLOSE + IotConstants.COMMAND_FREQUENCY_3600, "车辆锁同步关锁", null, null, msg);
lastCommandTime.set(currentTime); // 更新上次发送命令时间
} catch (UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
}
}
}
private void replacementOrder(AsDevice device, EtOperatingArea area) { private void replacementOrder(AsDevice device, EtOperatingArea area) {

View File

@ -116,9 +116,6 @@ public class EtModelController extends BaseController
if (etModel.getModel() == null || etModel.getModel().trim().isEmpty()) { if (etModel.getModel() == null || etModel.getModel().trim().isEmpty()) {
return "车型为必填项"; return "车型为必填项";
} }
if (etModel.getOperator() == null) {
return "代理商为必填项";
}
if (etModel.getAreaId() == null) { if (etModel.getAreaId() == null) {
return "运营区为必填项"; return "运营区为必填项";
} }

View File

@ -179,4 +179,7 @@ public class EtFeeRule extends BaseEntity
@Excel(name = "描述") @Excel(name = "描述")
private String description; private String description;
@Excel(name = "排序")
private Integer orderNum;
} }

View File

@ -26,20 +26,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="isDeleted" column="is_deleted" /> <result property="isDeleted" column="is_deleted" />
<result property="orderNum" column="order_num" />
</resultMap> </resultMap>
<sql id="selectEtFeeRuleVo"> <sql id="selectEtFeeRuleVo">
select rule_id, dept_id, dept_id, `name`, `explain`, select rule_id, dept_id, dept_id, `name`, `explain`,
status, auto_refund_deposit, order_exceed_minutes, order_exceed_warn, status, auto_refund_deposit, order_exceed_minutes, order_exceed_warn,
free_ride_time, rental_unit, riding_rule, riding_rule_json, charging_cycle, charging_cycle_value, free_ride_time, rental_unit, riding_rule, riding_rule_json, charging_cycle, charging_cycle_value,
capped_amount, instructions, create_by, create_time from et_fee_rule capped_amount, instructions, create_by, create_time, order_num from et_fee_rule
</sql> </sql>
<select id="selectEtFeeRuleList" parameterType="EtFeeRule" resultMap="EtFeeRuleResult"> <select id="selectEtFeeRuleList" parameterType="EtFeeRule" resultMap="EtFeeRuleResult">
select r.rule_id, r.dept_id, d.dept_name, r.`name`, r.`explain`,ar.`area_id`,a.area_name areaName, select r.rule_id, r.dept_id, d.dept_name, r.`name`, r.`explain`,ar.`area_id`,a.area_name areaName,
r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn, r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn,
r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value, r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value,
r.capped_amount, r.instructions, r.create_by, r.create_time from et_fee_rule r r.capped_amount, r.instructions, r.order_num, r.create_by, r.create_time from et_fee_rule r
left join sys_dept d on d.dept_id = r.dept_id left join sys_dept d on d.dept_id = r.dept_id
left join et_area_rule ar on ar.rule_id = r.rule_id left join et_area_rule ar on ar.rule_id = r.rule_id
left join et_operating_area a on a.area_id = ar.area_id left join et_operating_area a on a.area_id = ar.area_id
@ -49,14 +50,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="deptId != null "> and r.dept_id = #{deptId}</if> <if test="deptId != null "> and r.dept_id = #{deptId}</if>
<!-- 数据范围过滤 --> <!-- 数据范围过滤 -->
${params.dataScope} ${params.dataScope}
order by r.create_time desc order by r.order_num
</select> </select>
<select id="selectEtFeeRuleByRuleId" parameterType="Long" resultMap="EtFeeRuleResult"> <select id="selectEtFeeRuleByRuleId" parameterType="Long" resultMap="EtFeeRuleResult">
select r.rule_id, r.dept_id, r.dept_id, r.`name`, r.`explain`,ar.`area_id`, select r.rule_id, r.dept_id, r.dept_id, r.`name`, r.`explain`,ar.`area_id`,
r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn, r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn,
r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value, r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value,
r.capped_amount, r.instructions, r.create_by, r.create_time from et_fee_rule r r.capped_amount, r.instructions, r.create_by, r.create_time, r.order_num from et_fee_rule r
left join et_area_rule ar on ar.rule_id = r.rule_id left join et_area_rule ar on ar.rule_id = r.rule_id
where r.is_deleted = 0 and r.rule_id = #{ruleId} limit 1 where r.is_deleted = 0 and r.rule_id = #{ruleId} limit 1
</select> </select>
@ -80,6 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join et_model_rule mr on mr.rule_id = r.rule_id left join et_model_rule mr on mr.rule_id = r.rule_id
left join et_model m on m.model_id = mr.model_id left join et_model m on m.model_id = mr.model_id
where r.is_deleted = 0 and m.model_id = #{modelId} where r.is_deleted = 0 and m.model_id = #{modelId}
order by r.order_num
</select> </select>
<select id="selectRuleInfoListByAreaId" parameterType="Long" resultMap="EtFeeRuleResult"> <select id="selectRuleInfoListByAreaId" parameterType="Long" resultMap="EtFeeRuleResult">
@ -105,7 +107,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select r.rule_id, r.`dept_id`, r.`name`, r.`explain`, select r.rule_id, r.`dept_id`, r.`name`, r.`explain`,
r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn, r.status, r.auto_refund_deposit, r.order_exceed_minutes, r.order_exceed_warn,
r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value, r.free_ride_time, r.rental_unit, r.riding_rule, r.riding_rule_json, r.charging_cycle, r.charging_cycle_value,
r.capped_amount, r.instructions, r.create_by, r.create_time r.capped_amount, r.instructions, r.create_by, r.create_time, r.order_num
from et_fee_rule r from et_fee_rule r
left join et_model_rule mr on mr.rule_id = r.rule_id left join et_model_rule mr on mr.rule_id = r.rule_id
left join et_model m on m.model_id = mr.model_id left join et_model m on m.model_id = mr.model_id
@ -132,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="instructions != null">instructions,</if> <if test="instructions != null">instructions,</if>
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="orderNum != null">order_num,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">#{name},</if> <if test="name != null">#{name},</if>
@ -151,6 +154,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="instructions != null">#{instructions},</if> <if test="instructions != null">#{instructions},</if>
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if> <if test="createTime != null">#{createTime},</if>
<if test="orderNum != null">#{orderNum},</if>
</trim> </trim>
</insert> </insert>
@ -174,6 +178,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="instructions != null">instructions = #{instructions},</if> <if test="instructions != null">instructions = #{instructions},</if>
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if> <if test="createTime != null">create_time = #{createTime},</if>
<if test="orderNum != null">order_num = #{orderNum},</if>
</trim> </trim>
where rule_id = #{ruleId} where rule_id = #{ruleId}
</update> </update>