【admin】新增# 1、新增客户站点管理、新增、列表、编辑、批量删除

dev
renfan 2024-09-05 21:24:13 +08:00
parent de487cf3ac
commit fd0df4fe69
17 changed files with 649 additions and 4 deletions

View File

@ -0,0 +1,99 @@
package com.hcy.admin.controller.client;
import com.hcy.admin.config.aop.Log;
import com.hcy.admin.service.client.IClientSiteService;
import com.hcy.admin.validate.client.ClientSiteParam;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.vo.client.ClientSiteDetailVo;
import com.hcy.admin.vo.client.ClientSiteListVo;
import com.hcy.common.core.AjaxResult;
import com.hcy.common.validator.annotation.IDMust;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
*
*/
@RestController
@RequestMapping("api/clientSite")
public class ClientSiteController {
@Resource
IClientSiteService iClientSiteService;
/**
*
*
* @author hcy
* @param pageParam
* @param clientSiteParam
* @return Object
*/
@GetMapping("/list")
public Object list(@Validated PageParam pageParam,
ClientSiteParam clientSiteParam) {
List<ClientSiteListVo> list = iClientSiteService.list(pageParam, clientSiteParam);
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @param id ID
* @return Object
*/
@GetMapping("/detail")
public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) {
ClientSiteDetailVo detail = iClientSiteService.detail(id);
return AjaxResult.success(detail);
}
/**
*
*
* @author hcy
* @param clientSiteParam
* @return Object
*/
@Log(title = "站点新增")
@PostMapping("/add")
public Object add(@Validated(value = ClientSiteParam.create.class) @RequestBody ClientSiteParam clientSiteParam) {
iClientSiteService.add(clientSiteParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param clientSiteParam
* @return Object
*/
@Log(title = "站点编辑")
@PostMapping("/edit")
public Object edit(@Validated(value = ClientSiteParam.update.class) @RequestBody ClientSiteParam clientSiteParam) {
iClientSiteService.edit(clientSiteParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param clientSiteParam
* @return Object
*/
@Log(title = "站点删除")
@PostMapping("/del")
public Object del(@RequestBody ClientSiteParam clientSiteParam) {
iClientSiteService.del(clientSiteParam.getIds());
return AjaxResult.success();
}
}

View File

@ -0,0 +1,59 @@
package com.hcy.admin.service.client;
import com.hcy.admin.validate.client.ClientSiteParam;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.vo.client.ClientSiteDetailVo;
import com.hcy.admin.vo.client.ClientSiteListVo;
import java.util.List;
/**
*
*/
public interface IClientSiteService {
/**
*
*
* @author hcy
* @param pageParam
* @param clientSiteParam
* @return PageResult<SiteVo>
*/
List<ClientSiteListVo> list(PageParam pageParam, ClientSiteParam clientSiteParam);
/**
*
*
* @author hcy
* @param id ID
* @return Site
*/
ClientSiteDetailVo detail(Integer id);
/**
*
*
* @author hcy
* @param clientSiteParam
*/
void add(ClientSiteParam clientSiteParam);
/**
*
*
* @author hcy
* @param clientSiteParam
*/
void edit(ClientSiteParam clientSiteParam);
/**
*
*
* @author hcy
* @param ids ID
*/
void del(List<Integer> ids);
}

View File

@ -0,0 +1,218 @@
package com.hcy.admin.service.client.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hcy.admin.AdminThreadLocal;
import com.hcy.admin.service.client.IClientSiteService;
import com.hcy.admin.service.region.IDevRegionService;
import com.hcy.admin.validate.client.ClientSiteParam;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.vo.client.EquipmentListVo;
import com.hcy.admin.vo.client.EquipmentModelDetailVo;
import com.hcy.admin.vo.client.ClientSiteDetailVo;
import com.hcy.admin.vo.client.ClientSiteListVo;
import com.hcy.common.constant.GlobalConstant;
import com.hcy.common.dto.ClientSiteDto;
import com.hcy.common.entity.client.Client;
import com.hcy.common.entity.client.Equipment;
import com.hcy.common.entity.client.EquipmentModel;
import com.hcy.common.entity.client.ClientSite;
import com.hcy.common.entity.user.User;
import com.hcy.common.mapper.client.ClientMapper;
import com.hcy.common.mapper.client.EquipmentMapper;
import com.hcy.common.mapper.client.EquipmentModelMapper;
import com.hcy.common.mapper.client.ClientSiteMapper;
import com.hcy.common.mapper.user.UserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.*;
/**
*
*/
@Service
public class ClientSiteServiceImpl implements IClientSiteService {
@Resource
ClientSiteMapper clientSiteMapper;
@Resource
IDevRegionService regionService;
@Resource
EquipmentMapper equipmentMapper;
@Resource
ClientMapper clientMapper;
@Resource
EquipmentModelMapper equipmentModelMapper;
@Resource
UserMapper userMapper;
/**
*
*
* @author hcy
* @param pageParam
* @param clientSiteParam
* @return PageResult<SiteListVo>
*/
@Override
public List<ClientSiteListVo> list(PageParam pageParam, ClientSiteParam clientSiteParam) {
Integer page = pageParam.getPageNo();
Integer limit = pageParam.getPageSize();
ClientSiteDto clientSiteDto = new ClientSiteDto();
BeanUtils.copyProperties(clientSiteParam, clientSiteDto);
List<ClientSiteDto> clientSiteDtos = clientSiteMapper.siteEquipmentList(clientSiteDto);
List<ClientSiteListVo> list = new LinkedList<>();
for(ClientSiteDto item : clientSiteDtos) {
ClientSiteListVo vo = new ClientSiteListVo();
BeanUtils.copyProperties(item, vo);
// 获取设备列表
List<Equipment> equipment = equipmentMapper.selectList(new LambdaQueryWrapper<Equipment>()
.eq(Equipment::getIsDelete, GlobalConstant.NOT_DELETE)
.eq(Equipment::getClientSiteId, item.getId()));
Map<Long, String> regionMap = regionService.getRegionMap();//获取省市区
List<EquipmentListVo> equipmentList = new LinkedList<>();
if(equipment != null){
for (Equipment equipmentItem : equipment) {
EquipmentListVo equipmentListVo = new EquipmentListVo();
BeanUtils.copyProperties(equipmentItem, equipmentListVo);
equipmentListVo.setProvince(regionMap.get(equipmentListVo.getProvinceId()));
equipmentListVo.setCity(regionMap.get(equipmentListVo.getCityId()));
equipmentListVo.setDistrict(regionMap.get(equipmentListVo.getDistrictId()));
//获取客户名称
Client client = clientMapper.selectOne(
new QueryWrapper<Client>()
.eq("id", equipmentItem.getClientId())
.last("limit 1"));
if (client != null){
equipmentListVo.setClientName(client.getClientName());
}
//设置设备模块信息
EquipmentModel equipmentModel = equipmentModelMapper.findEquipmentModelByEquipmentId(vo.getId());
EquipmentModelDetailVo equipmentModelDetailVo = new EquipmentModelDetailVo();
if(equipmentModel != null){
BeanUtils.copyProperties(equipmentModel, equipmentModelDetailVo);
User insetallUser = userMapper.selectById(equipmentModel.getUserId());
if(insetallUser != null){
equipmentModelDetailVo.setInstallationName(insetallUser.getUsername());
}
}
//设置设备模块信息
equipmentListVo.setEquipmentModel(equipmentModelDetailVo);
equipmentList.add(equipmentListVo);
}
}
vo.setEquipmentList(equipmentList);
list.add(vo);
}
return list;
}
/**
*
*
* @param id
* @return Site
* @author hcy
*/
@Override
public ClientSiteDetailVo detail(Integer id) {
ClientSite model = clientSiteMapper.selectOne(
new QueryWrapper<ClientSite>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
ClientSiteDetailVo vo = new ClientSiteDetailVo();
BeanUtils.copyProperties(model, vo);
return vo;
}
/**
*
*
* @author hcy
* @param clientSiteParam
*/
@Override
public void add(ClientSiteParam clientSiteParam) {
ClientSite model = new ClientSite();
model.setClientId(clientSiteParam.getClientId()); // 客户id
model.setSiteName(clientSiteParam.getSiteName()); // 站点名称
model.setLongitude(clientSiteParam.getLongitude()); // 经度
model.setLatitude(clientSiteParam.getLatitude()); // 纬度
model.setProvinceId(clientSiteParam.getProvinceId()); // 省id
model.setDistrictId(clientSiteParam.getDistrictId()); // 区id
model.setCityId(clientSiteParam.getCityId()); // 市id
model.setDetailedAddress(clientSiteParam.getDetailedAddress()); // 详细地址
model.setCreatorId(AdminThreadLocal.getAdminId().longValue()); // 创建人id
clientSiteMapper.insert(model);
}
/**
*
*
* @author hcy
* @param clientSiteParam
*/
@Override
public void edit(ClientSiteParam clientSiteParam) {
ClientSite model = clientSiteMapper.selectOne(
new QueryWrapper<ClientSite>()
.eq("id", clientSiteParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setClientId(clientSiteParam.getClientId()); // 客户id
model.setSiteName(clientSiteParam.getSiteName()); // 站点名称
model.setLongitude(clientSiteParam.getLongitude()); // 经度
model.setLatitude(clientSiteParam.getLatitude()); // 纬度
model.setProvinceId(clientSiteParam.getProvinceId()); // 省id
model.setDistrictId(clientSiteParam.getDistrictId()); // 区id
model.setCityId(clientSiteParam.getCityId()); // 市id
model.setDetailedAddress(clientSiteParam.getDetailedAddress()); // 详细地址
clientSiteMapper.updateById(model);
}
/**
*
*
* @author hcy
* @param ids ID
*/
@Override
public void del(List<Integer> ids) {
List<ClientSite> model = clientSiteMapper.selectList(
new LambdaQueryWrapper<ClientSite>()
.in(ClientSite::getId, ids));
Assert.notNull(model, "数据不存在!");
for (ClientSite clientSite : model) {
clientSite.setIsDelete(GlobalConstant.DELETE);
clientSiteMapper.updateById(clientSite);// 进行伪删除 根据id把is_delete修改成1
}
}
}

View File

@ -78,8 +78,6 @@ public class EquipmentServiceImpl implements IEquipmentService {
equipmentDto.setCreateTimeStartLong(TimeUtil.dateToTimestamp(equipmentParam.getCreateTimeStart())); equipmentDto.setCreateTimeStartLong(TimeUtil.dateToTimestamp(equipmentParam.getCreateTimeStart()));
equipmentDto.setCreateTimeEndLong(TimeUtil.dateToTimestamp(equipmentParam.getCreateTimeEnd())); equipmentDto.setCreateTimeEndLong(TimeUtil.dateToTimestamp(equipmentParam.getCreateTimeEnd()));
Page<EquipmentDto> iPage = equipmentMapper.pageList(new Page<>(page, limit), equipmentDto); Page<EquipmentDto> iPage = equipmentMapper.pageList(new Page<>(page, limit), equipmentDto);
Map<Long, String> regionMap = regionService.getRegionMap();//获取省市区 Map<Long, String> regionMap = regionService.getRegionMap();//获取省市区
@ -164,7 +162,7 @@ public class EquipmentServiceImpl implements IEquipmentService {
if(count > 0){ if(count > 0){
throw new OperateException("设备编号不可重复!"); throw new OperateException("设备编号不可重复!");
} }
model.setClientSiteId(equipmentParam.getClientSiteId()); // 站点id
model.setClientId(equipmentParam.getClientId());//客户id model.setClientId(equipmentParam.getClientId());//客户id
model.setName(equipmentParam.getName()); model.setName(equipmentParam.getName());
model.setModel(equipmentParam.getModel()); // 设备型号 model.setModel(equipmentParam.getModel()); // 设备型号
@ -211,6 +209,7 @@ public class EquipmentServiceImpl implements IEquipmentService {
if(count > 0){ if(count > 0){
throw new OperateException("设备编号不可重复!"); throw new OperateException("设备编号不可重复!");
} }
model.setClientSiteId(equipmentParam.getClientSiteId());
model.setName(equipmentParam.getName()); model.setName(equipmentParam.getName());
model.setModel(equipmentParam.getModel()); model.setModel(equipmentParam.getModel());
model.setManufacturers(equipmentParam.getManufacturers()); model.setManufacturers(equipmentParam.getManufacturers());

View File

@ -0,0 +1,67 @@
package com.hcy.admin.validate.client;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import lombok.Data;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.List;
/**
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ClientSiteParam implements Serializable {
private static final long serialVersionUID = 1L;
public interface create{}
public interface update{}
public interface delete{}
private Long id;
@NotNull(message = "clientId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "clientId参数值不能少于0", groups = {create.class, update.class})
private Long clientId;
@NotNull(message = "siteName参数缺失", groups = {create.class, update.class})
@Length(max = 50, message = "siteName参数不能超出50个字符", groups = {create.class, update.class})
private String siteName;
@NotNull(message = "longitude参数缺失", groups = {create.class, update.class})
@Length(max = 24, message = "longitude参数不能超出24个字符", groups = {create.class, update.class})
private String longitude;
@NotNull(message = "latitude参数缺失", groups = {create.class, update.class})
@Length(max = 24, message = "latitude参数不能超出24个字符", groups = {create.class, update.class})
private String latitude;
@NotNull(message = "provinceId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "provinceId参数值不能少于0", groups = {create.class, update.class})
private Long provinceId;
@NotNull(message = "districtId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "districtId参数值不能少于0", groups = {create.class, update.class})
private Long districtId;
@NotNull(message = "cityId参数缺失", groups = {create.class, update.class})
@DecimalMin(value = "0", message = "cityId参数值不能少于0", groups = {create.class, update.class})
private Long cityId;
@NotNull(message = "detailedAddress参数缺失", groups = {create.class, update.class})
@Length(max = 255, message = "detailedAddress参数不能超出255个字符", groups = {create.class, update.class})
private String detailedAddress;
@DecimalMin(value = "0", message = "creatorId参数值不能少于0", groups = {create.class, update.class})
private Long creatorId;
private List<Integer> ids; //批量删除
}

View File

@ -84,4 +84,7 @@ public class EquipmentParam implements Serializable {
private String createTimeStart; // 开始时间 private String createTimeStart; // 开始时间
private String createTimeEnd; // 结束时间 private String createTimeEnd; // 结束时间
private Long clientSiteId; // 站点id
private String siteName; // 站点名称
} }

View File

@ -0,0 +1,26 @@
package com.hcy.admin.vo.client;
import lombok.Data;
import java.io.Serializable;
/**
* SiteVo
*/
@Data
public class ClientSiteDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键id
private Long clientId; // 客户id
private String siteName; // 站点名称
private String longitude; // 经度
private String latitude; // 纬度
private Long provinceId; // 省id
private Long districtId; // 区id
private Long cityId; // 市id
private String detailedAddress; // 详细地址
private Long creatorId; // 创建人id
}

View File

@ -0,0 +1,33 @@
package com.hcy.admin.vo.client;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* SiteVo
*/
@Data
public class ClientSiteListVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键id
private Long clientId; // 客户id
private String siteName; // 站点名称
private String longitude; // 经度
private String latitude; // 纬度
private Long provinceId; // 省id
private Long districtId; // 区id
private Long cityId; // 市id
private String detailedAddress; // 详细地址
private Long creatorId; // 创建人id
private String createTime; // 创建时间
private Integer equipmentCount; // 设备总数
private Integer normalCount; // 设备正常数量
private Integer underOverhaulCount; // 设备检修中数量
private Integer underWarrantyCount; // 设备报修中数量
private List<EquipmentListVo> equipmentList; // 设备列表
}

View File

@ -34,4 +34,7 @@ public class EquipmentDetailVo implements Serializable {
private Integer dailyAudit; // 每隔几天巡检 private Integer dailyAudit; // 每隔几天巡检
private String deviceCode; // 设备码 private String deviceCode; // 设备码
private String clientName; // 客户名称 private String clientName; // 客户名称
private Long clientSiteId; // 站点id
private String siteName; // 站点名称
} }

View File

@ -38,4 +38,6 @@ public class EquipmentListVo implements Serializable {
private String clientName; // 客户名称 private String clientName; // 客户名称
private String shortName; // 客户简称 private String shortName; // 客户简称
private EquipmentModelDetailVo equipmentModel; //设备模块信息 private EquipmentModelDetailVo equipmentModel; //设备模块信息
private Long clientSiteId; // 站点id
private String siteName; // 站点名称
} }

View File

@ -0,0 +1,37 @@
package com.hcy.common.dto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
*/
@Data
public class ClientSiteDto implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
private Long id; // 主键id
private Long clientId; // 客户id
private String siteName; // 站点名称
private String longitude; // 经度
private String latitude; // 纬度
private Long provinceId; // 省id
private Long districtId; // 区id
private Long cityId; // 市id
private String detailedAddress; // 详细地址
private Long creatorId; // 创建人id
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
private Integer isDelete; // 是否删除 0-未删除 1-删除
private Integer equipmentCount; // 设备总数
private Integer normalCount; // 设备正常数量
private Integer underOverhaulCount; // 设备检修中数量
private Integer underWarrantyCount; // 设备报修中数量
}

View File

@ -43,4 +43,7 @@ public class EquipmentDto implements Serializable {
private Long createTimeStartLong; // 开始时间 private Long createTimeStartLong; // 开始时间
private Long createTimeEndLong; // 结束时间 private Long createTimeEndLong; // 结束时间
private Long clientSiteId; // 站点id
private String siteName; // 站点名称
} }

View File

@ -0,0 +1,33 @@
package com.hcy.common.entity.client;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
*/
@Data
public class ClientSite implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value="id", type= IdType.AUTO)
private Long id; // 主键id
private Long clientId; // 客户id
private String siteName; // 站点名称
private String longitude; // 经度
private String latitude; // 纬度
private Long provinceId; // 省id
private Long districtId; // 区id
private Long cityId; // 市id
private String detailedAddress; // 详细地址
private Long creatorId; // 创建人id
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
private Integer isDelete; // 是否删除 0-未删除 1-删除
}

View File

@ -39,4 +39,7 @@ public class Equipment implements Serializable {
private Long createTime; // 创建时间 private Long createTime; // 创建时间
private Long updateTime; // 更新时间 private Long updateTime; // 更新时间
private Long deleteTime; // 删除时间 private Long deleteTime; // 删除时间
private Long clientSiteId; // 站点id
} }

View File

@ -0,0 +1,24 @@
package com.hcy.common.mapper.client;
import com.hcy.common.core.basics.IBaseMapper;
import com.hcy.common.dto.ClientSiteDto;
import com.hcy.common.entity.client.ClientSite;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Mapper
*/
@Mapper
public interface ClientSiteMapper extends IBaseMapper<ClientSite> {
/**
*
* @return
*/
List<ClientSiteDto> siteEquipmentList(@Param("form") ClientSiteDto form);
}

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hcy.common.mapper.client.ClientSiteMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.hcy.common.entity.client.ClientSite">
</resultMap>
<select id="siteEquipmentList" resultType="com.hcy.common.dto.ClientSiteDto">
SELECT
ls.*,
COUNT( le.id ) AS equipmentCount,
SUM( CASE WHEN le.device_status = 1 THEN 1 ELSE 0 END ) AS normalCount,
SUM( CASE WHEN le.device_status = 2 THEN 1 ELSE 0 END ) AS underOverhaulCount,
SUM( CASE WHEN le.device_status = 3 THEN 1 ELSE 0 END ) AS underWarrantyCount
FROM
la_client_site AS ls
LEFT JOIN la_equipment AS le ON le.client_site_id = ls.id AND le.is_delete = 0
WHERE
ls.is_delete = 0
<if test="form.clientId != null">
and ls.client_id = #{form.clientId}
</if>
<if test="form.siteName != null and form.siteName != ''">
and ls.site_name like concat('%', #{form.siteName}, '%')
</if>
GROUP BY
ls.id
ORDER BY
equipmentCount DESC
</select>
</mapper>

View File

@ -44,14 +44,18 @@
</select> </select>
<select id="pageList" resultType="com.hcy.common.dto.EquipmentDto"> <select id="pageList" resultType="com.hcy.common.dto.EquipmentDto">
select e.*,c.client_name as clientName select e.*,c.client_name as clientName,s.site_name as siteName
from la_equipment as e from la_equipment as e
LEFT JOIN la_client AS c ON e.client_id = c.id LEFT JOIN la_client AS c ON e.client_id = c.id
LEFT JOIN la_client_site AS s ON e.client_site_id = s.id
where where
e.is_delete = 0 e.is_delete = 0
<if test="form.number != null and form.number != ''"> <if test="form.number != null and form.number != ''">
and e.number like concat('%', #{form.number}, '%') and e.number like concat('%', #{form.number}, '%')
</if> </if>
<if test="form.siteName != null and form.siteName != ''">
and s.site_name like concat('%', #{form.siteName}, '%')
</if>
<if test="form.name != null and form.name != ''"> <if test="form.name != null and form.name != ''">
and e.name like concat('%', #{form.name}, '%') and e.name like concat('%', #{form.name}, '%')
</if> </if>