This commit is contained in:
磷叶 2025-04-23 18:35:11 +08:00
parent 8de83ac5b7
commit 06adee38b8
9 changed files with 35 additions and 59 deletions

View File

@ -2,7 +2,6 @@ package com.ruoyi.bst.device.domain;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -29,8 +28,6 @@ public class DeviceVO extends Device {
private BigDecimal modelLowVoltage; private BigDecimal modelLowVoltage;
@ApiModelProperty("车型续航") @ApiModelProperty("车型续航")
private BigDecimal modelFullEndurance; private BigDecimal modelFullEndurance;
@ApiModelProperty("车型套餐ID列表")
private List<Long> modelSuitIds;
// 运营区 // 运营区
@ApiModelProperty("运营区名称") @ApiModelProperty("运营区名称")

View File

@ -50,7 +50,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bm.name as model_name, bm.name as model_name,
bm.full_voltage as model_full_voltage, bm.full_voltage as model_full_voltage,
bm.low_voltage as model_low_voltage, bm.low_voltage as model_low_voltage,
bm.suit_ids as model_suit_ids,
bm.full_endurance as model_full_endurance, bm.full_endurance as model_full_endurance,
ba.name as area_name, ba.name as area_name,
ba.user_id as area_user_id, ba.user_id as area_user_id,
@ -123,6 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="query.lastUserId != null">and bd.last_user_id = #{query.lastUserId}</if> <if test="query.lastUserId != null">and bd.last_user_id = #{query.lastUserId}</if>
<if test="query.lastUserName != null and query.lastUserName != ''">and bul.nick_name like concat('%', #{query.lastUserName}, '%')</if> <if test="query.lastUserName != null and query.lastUserName != ''">and bul.nick_name like concat('%', #{query.lastUserName}, '%')</if>
<if test="query.lastUserPhone != null and query.lastUserPhone != ''">and bul.user_name like concat('%', #{query.lastUserPhone}, '%')</if> <if test="query.lastUserPhone != null and query.lastUserPhone != ''">and bul.user_name like concat('%', #{query.lastUserPhone}, '%')</if>
<if test="query.mchName != null and query.mchName != ''">and mch.nick_name like concat('%', #{query.mchName}, '%')</if>
<if test="query.suitId != null"> <if test="query.suitId != null">
and find_in_set(#{query.suitId}, bm.suit_ids) and find_in_set(#{query.suitId}, bm.suit_ids)
</if> </if>
@ -414,7 +414,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="unbindMch" > <update id="unbindMch" >
update bst_device update bst_device
set mch_id = null set mch_id = null,
model_id = null
where id in where id in
<foreach collection="ids" item="id" open="(" separator="," close=")"> <foreach collection="ids" item="id" open="(" separator="," close=")">
#{id} #{id}

View File

@ -7,10 +7,6 @@ import lombok.Data;
@Data @Data
public class ModelVO extends Model { public class ModelVO extends Model {
@ApiModelProperty("运营区名称")
private String areaName;
@ApiModelProperty("用户名称") @ApiModelProperty("用户名称")
private String userName; private String userName;

View File

@ -9,7 +9,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectModelVo"> <sql id="selectModelVo">
select select
bm.id, bm.id,
bm.area_id,
bm.user_id, bm.user_id,
bm.name, bm.name,
bm.full_voltage, bm.full_voltage,
@ -20,26 +19,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bm.deleted, bm.deleted,
bm.low_battery_reminder_switch, bm.low_battery_reminder_switch,
bm.low_battery_reminder, bm.low_battery_reminder,
ba.name as area_name,
su.nick_name as user_name su.nick_name as user_name
from <include refid="searchTables"/> from <include refid="searchTables"/>
</sql> </sql>
<sql id="searchTables"> <sql id="searchTables">
bst_model bm bst_model bm
left join bst_area ba on bm.area_id = ba.id
left join sys_user su on bm.user_id = su.user_id left join sys_user su on bm.user_id = su.user_id
</sql> </sql>
<sql id="searchCondition"> <sql id="searchCondition">
<if test="query.id != null "> and bm.id = #{query.id}</if> <if test="query.id != null "> and bm.id = #{query.id}</if>
<if test="query.areaId != null "> and bm.area_id = #{query.areaId}</if>
<if test="query.userId != null "> and bm.user_id = #{query.userId}</if> <if test="query.userId != null "> and bm.user_id = #{query.userId}</if>
<if test="query.name != null and query.name != ''"> and bm.name like concat('%', #{query.name}, '%')</if> <if test="query.name != null and query.name != ''"> and bm.name like concat('%', #{query.name}, '%')</if>
<if test="query.deleted != null "> and bm.deleted = #{query.deleted}</if> <if test="query.deleted != null "> and bm.deleted = #{query.deleted}</if>
<if test="query.deleted == null "> and bm.deleted = false</if> <if test="query.deleted == null "> and bm.deleted = false</if>
<if test="query.lowBatteryReminderSwitch != null "> and bm.low_battery_reminder_switch = #{query.lowBatteryReminderSwitch}</if> <if test="query.lowBatteryReminderSwitch != null "> and bm.low_battery_reminder_switch = #{query.lowBatteryReminderSwitch}</if>
<if test="query.areaName != null and query.areaName != ''"> and ba.name like concat('%', #{query.areaName}, '%')</if>
<if test="query.userName != null and query.userName != ''"> and su.nick_name like concat('%', #{query.userName}, '%')</if> <if test="query.userName != null and query.userName != ''"> and su.nick_name like concat('%', #{query.userName}, '%')</if>
<if test="query.ids != null"> <if test="query.ids != null">
and bm.id in and bm.id in
@ -111,7 +106,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<sql id="updateColumns"> <sql id="updateColumns">
<if test="data.areaId != null">area_id = #{data.areaId},</if>
<if test="data.userId != null">user_id = #{data.userId},</if> <if test="data.userId != null">user_id = #{data.userId},</if>
<if test="data.name != null and data.name != ''">name = #{data.name},</if> <if test="data.name != null and data.name != ''">name = #{data.name},</if>
<if test="data.fullVoltage != null">full_voltage = #{data.fullVoltage},</if> <if test="data.fullVoltage != null">full_voltage = #{data.fullVoltage},</if>

View File

@ -7,6 +7,7 @@ import com.ruoyi.bst.area.domain.AreaVO;
import com.ruoyi.bst.areaJoin.domain.AreaJoinVO; import com.ruoyi.bst.areaJoin.domain.AreaJoinVO;
import com.ruoyi.bst.channel.domain.ChannelVO; import com.ruoyi.bst.channel.domain.ChannelVO;
import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.model.domain.ModelVO;
import com.ruoyi.bst.order.domain.Order; import com.ruoyi.bst.order.domain.Order;
import com.ruoyi.bst.order.domain.dto.OrderCreateDTO; import com.ruoyi.bst.order.domain.dto.OrderCreateDTO;
import com.ruoyi.bst.order.domain.vo.OrderPrePriceVO; import com.ruoyi.bst.order.domain.vo.OrderPrePriceVO;
@ -31,6 +32,9 @@ public class OrderCreateBO {
// 设备 // 设备
private DeviceVO device; private DeviceVO device;
// 车型
private ModelVO model;
// 运营区 // 运营区
private AreaVO area; private AreaVO area;

View File

@ -1,6 +1,7 @@
package com.ruoyi.bst.order.service.impl; package com.ruoyi.bst.order.service.impl;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -23,6 +24,9 @@ import com.ruoyi.bst.device.service.DeviceIotService;
import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.bst.device.service.DeviceService;
import com.ruoyi.bst.locationLog.domain.vo.LocationLogPositionVO; import com.ruoyi.bst.locationLog.domain.vo.LocationLogPositionVO;
import com.ruoyi.bst.locationLog.service.LocationLogService; import com.ruoyi.bst.locationLog.service.LocationLogService;
import com.ruoyi.bst.model.domain.ModelVO;
import com.ruoyi.bst.model.service.ModelAssembler;
import com.ruoyi.bst.model.service.ModelService;
import com.ruoyi.bst.order.domain.Order; import com.ruoyi.bst.order.domain.Order;
import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.OrderVO;
import com.ruoyi.bst.order.domain.bo.OrderChangeBO; import com.ruoyi.bst.order.domain.bo.OrderChangeBO;
@ -102,6 +106,12 @@ public class OrderConverterImpl implements OrderConverter{
@Autowired @Autowired
private OrderValidator orderValidator; private OrderValidator orderValidator;
@Autowired
private ModelService modelService;
@Autowired
private ModelAssembler modelAssembler;
@Override @Override
public OrderPrePriceVO toOrderPrePriceVO(OrderCalcPrePriceDTO dto) { public OrderPrePriceVO toOrderPrePriceVO(OrderCalcPrePriceDTO dto) {
if (dto == null) { if (dto == null) {
@ -134,6 +144,11 @@ public class OrderConverterImpl implements OrderConverter{
AreaVO area = areaService.selectAreaById(device.getAreaId()); AreaVO area = areaService.selectAreaById(device.getAreaId());
bo.setArea(area); bo.setArea(area);
// 车型
ModelVO model = modelService.selectModelById(device.getModelId());
modelAssembler.assembleSuitIds(Collections.singletonList(model));
bo.setModel(model);
// 查询设备所属人的加盟信息 // 查询设备所属人的加盟信息
AreaJoinVO areaJoin = areaJoinService.selectByUserArea(device.getMchId(), device.getAreaId()); AreaJoinVO areaJoin = areaJoinService.selectByUserArea(device.getMchId(), device.getAreaId());
bo.setAreaJoin(areaJoin); bo.setAreaJoin(areaJoin);

View File

@ -18,6 +18,7 @@ import com.ruoyi.bst.device.domain.DeviceQuery;
import com.ruoyi.bst.device.domain.DeviceVO; import com.ruoyi.bst.device.domain.DeviceVO;
import com.ruoyi.bst.device.domain.enums.DeviceStatus; import com.ruoyi.bst.device.domain.enums.DeviceStatus;
import com.ruoyi.bst.device.service.DeviceService; import com.ruoyi.bst.device.service.DeviceService;
import com.ruoyi.bst.model.domain.ModelVO;
import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderQuery;
import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.OrderVO;
import com.ruoyi.bst.order.domain.bo.OrderCreateBO; import com.ruoyi.bst.order.domain.bo.OrderCreateBO;
@ -67,7 +68,11 @@ public class OrderValidatorImpl implements OrderValidator{
// 套餐 // 套餐
SuitVO suit = bo.getSuit(); SuitVO suit = bo.getSuit();
ServiceUtil.assertion(suit == null, "ID为%s的套餐不存在", dto.getSuitId()); ServiceUtil.assertion(suit == null, "ID为%s的套餐不存在", dto.getSuitId());
ServiceUtil.assertion(CollectionUtils.isEmptyElement(device.getModelSuitIds()) || !device.getModelSuitIds().contains(suit.getId()), "ID为%s的套餐不可在ID为%s的车辆使用", dto.getSuitId(), dto.getDeviceId());
// 车型
ModelVO model = bo.getModel();
ServiceUtil.assertion(model == null, "ID为%s的车型不存在", device.getModelId());
ServiceUtil.assertion(CollectionUtils.isEmptyElement(model.getSuitIds()) || !model.getSuitIds().contains(suit.getId()), "ID为%s的套餐不可在ID为%s的车辆使用", dto.getSuitId(), dto.getDeviceId());
ServiceUtil.assertion(suit.getSeconds() == null || suit.getSeconds() <= 0, "ID为%s的套餐时长不能为0或小于0", dto.getSuitId()); ServiceUtil.assertion(suit.getSeconds() == null || suit.getSeconds() <= 0, "ID为%s的套餐时长不能为0或小于0", dto.getSuitId());
// 用户 // 用户

View File

@ -19,6 +19,7 @@ import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateQuery;
import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateVO; import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateVO;
import com.ruoyi.bst.reconciliationDate.mapper.ReconciliationDateMapper; import com.ruoyi.bst.reconciliationDate.mapper.ReconciliationDateMapper;
import com.ruoyi.bst.reconciliationDate.service.ReconciliationDateService; import com.ruoyi.bst.reconciliationDate.service.ReconciliationDateService;
import com.ruoyi.bst.reconciliationDate.utils.ReconciliationDateUtil;
import com.ruoyi.bst.refund.domain.RefundQuery; import com.ruoyi.bst.refund.domain.RefundQuery;
import com.ruoyi.bst.refund.service.RefundDashboard; import com.ruoyi.bst.refund.service.RefundDashboard;
import com.ruoyi.common.utils.MathUtils; import com.ruoyi.common.utils.MathUtils;
@ -190,10 +191,10 @@ public class ReconciliationDateServiceImpl implements ReconciliationDateService
// 差额 // 差额
po.setDifference(MathUtils.subtractDecimal(po.getActualAmount(), po.getActualBonus())); po.setDifference(MathUtils.subtractDecimal(po.getActualAmount(), po.getActualBonus()));
// if (ReconciliationDateUtil.isEmpty(po)) { if (ReconciliationDateUtil.isEmpty(po)) {
// log.error("渠道对账数据为空date={}, channel={}, areaId={}", date, channel, areaId); log.error("渠道对账数据为空date={}, channel={}, areaId={}", date, channel, areaId);
// return 0; return 0;
// } }
return this.insertReconciliationDate(po); return this.insertReconciliationDate(po);
} }

View File

@ -6,16 +6,12 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDate;
import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateQuery; import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateQuery;
import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateVO; import com.ruoyi.bst.reconciliationDate.domain.ReconciliationDateVO;
import com.ruoyi.bst.reconciliationDate.service.ReconciliationDateService; import com.ruoyi.bst.reconciliationDate.service.ReconciliationDateService;
@ -74,37 +70,4 @@ public class ReconciliationDateController extends BaseController
{ {
return success(reconciliationDateService.selectReconciliationDateById(id)); return success(reconciliationDateService.selectReconciliationDateById(id));
} }
/**
* 新增渠道对账
*/
@PreAuthorize("@ss.hasPermi('bst:reconciliationDate:add')")
@Log(title = "渠道对账", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ReconciliationDate reconciliationDate)
{
return toAjax(reconciliationDateService.insertReconciliationDate(reconciliationDate));
}
/**
* 修改渠道对账
*/
@PreAuthorize("@ss.hasPermi('bst:reconciliationDate:edit')")
@Log(title = "渠道对账", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ReconciliationDate reconciliationDate)
{
return toAjax(reconciliationDateService.updateReconciliationDate(reconciliationDate));
}
/**
* 删除渠道对账
*/
@PreAuthorize("@ss.hasPermi('bst:reconciliationDate:remove')")
@Log(title = "渠道对账", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(reconciliationDateService.deleteReconciliationDateByIds(ids));
}
} }