diff --git a/cloud-modules/cloud-modules-carmanage/.gitignore b/cloud-modules/cloud-modules-carmanage/.gitignore new file mode 100644 index 0000000..af665ab --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store diff --git a/cloud-modules/cloud-modules-carmanage/pom.xml b/cloud-modules/cloud-modules-carmanage/pom.xml new file mode 100644 index 0000000..21532f7 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/pom.xml @@ -0,0 +1,111 @@ + + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + cloud-modules-carmanage + + + 17 + 17 + UTF-8 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + com.muyu + cloud-common-xxl + + + + com.muyu + cloud-common-rabbit + + + + org.bouncycastle + bcpkix-jdk15on + 1.70 + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/CloudCarApplication.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/CloudCarApplication.java new file mode 100644 index 0000000..662105f --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/CloudCarApplication.java @@ -0,0 +1,21 @@ +package com.muyu.car; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 系统模块 + * + * @author muyu + */ +@EnableCustomConfig +//@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class CloudCarApplication { + public static void main (String[] args) { + SpringApplication.run(CloudCarApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/constant/RedisConstant.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/constant/RedisConstant.java new file mode 100644 index 0000000..521fc56 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/constant/RedisConstant.java @@ -0,0 +1,10 @@ +package com.muyu.car.constant; + +public class RedisConstant { + + public static final String MESSAGE_DETAIL = "messageDetail"; + + public static final String VEHICLE_ENTERPRISE = "vehicleEnterprise"; + + public static final String INDEX_WARNING = "indexWarning"; +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarController.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarController.java new file mode 100644 index 0000000..189e777 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarController.java @@ -0,0 +1,131 @@ +package com.muyu.car.controller; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.car.domain.SysCar; +import com.muyu.car.service.ISysCarService; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.security.utils.SecurityUtils; +import org.springframework.validation.annotation.Validated; +import com.muyu.common.core.web.page.TableDataInfo; + +/** + * 车辆基础信息Controller + * + * @author muyu + * @date 2024-09-17 + */ +@RestController +@RequestMapping("/car") +public class SysCarController extends BaseController +{ + @Autowired + private ISysCarService sysCarService; + + + /** + * 查询车辆基础信息列表 + */ + @RequiresPermissions("car:car:list") + @GetMapping("/list") + public Result> list(SysCar sysCar) + { + startPage(); + List list = sysCarService.selectSysCarList(sysCar); + return getDataTable(list); + } + + /** + * 导出车辆基础信息列表 + */ + @RequiresPermissions("car:car:export") + @PostMapping("/export") + public void export(HttpServletResponse response, SysCar sysCar) + { + List list = sysCarService.selectSysCarList(sysCar); + ExcelUtil util = new ExcelUtil(SysCar.class); + util.exportExcel(response, list, "车辆基础信息数据"); + } + + /** + * 获取车辆基础信息详细信息 + */ + @RequiresPermissions("car:car:query") + @GetMapping(value = "/{id}") + public Result> getInfo(@PathVariable("id") Long id) + { + return success(sysCarService.selectSysCarById(id)); + } + + /** + * 新增车辆基础信息 + */ + @RequiresPermissions("car:car:add") + @PostMapping + public Result add( + @Validated @RequestBody SysCar sysCar) + { + // 获取当前时间(没有时区) + LocalDateTime now = LocalDateTime.now(); + // 假设我们使用系统默认时区 + ZoneId zoneId = ZoneId.systemDefault(); + // 将LocalDateTime转换为ZonedDateTime(添加了时区信息) + ZonedDateTime zdt = now.atZone(zoneId); + // 将ZonedDateTime转换为Instant(UTC时间线上的点) + Instant instant = zdt.toInstant(); + // 将Instant转换为Date + Date date = Date.from(instant); + sysCar.setCarLastJoinTime(date); + if (sysCarService.checkIdUnique(sysCar)) { + return error("新增 车辆基础信息 '" + sysCar + "'失败,车辆基础信息已存在"); + } + + return toAjax(sysCarService.save(sysCar)); + } + + /** + * 修改车辆基础信息 + */ + @RequiresPermissions("car:car:edit") + @PutMapping + public Result edit( + @Validated @RequestBody SysCar sysCar) + { + if (!sysCarService.checkIdUnique(sysCar)) { + return error("修改 车辆基础信息 '" + sysCar + "'失败,车辆基础信息不存在"); + } + + return toAjax(sysCarService.updateById(sysCar)); + } + + /** + * 删除车辆基础信息 + */ + @RequiresPermissions("car:car:remove") + @DeleteMapping("/{ids}") + public Result remove(@PathVariable("ids") Long[] ids) + { + sysCarService.removeBatchByIds(Arrays.asList(ids)); + return success(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarMessageController.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarMessageController.java new file mode 100644 index 0000000..9617880 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysCarMessageController.java @@ -0,0 +1,178 @@ +package com.muyu.car.controller; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import com.muyu.car.domain.SysCarMessage; +import com.muyu.car.domain.SysMessageType; +import com.muyu.car.domain.VO.SysMessageVO; +import com.muyu.car.service.ISysCarMessageService; +import jakarta.servlet.http.HttpServletResponse; +import javax.annotation.Resource; + +import jakarta.servlet.http.HttpSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.security.utils.SecurityUtils; +import org.springframework.validation.annotation.Validated; +import com.muyu.common.core.web.page.TableDataInfo; + +/** + * 车辆报文记录Controller + * + * @author muyu + * @date 2024-09-18 + */ +@RestController +@RequestMapping("/messageInfo") +public class SysCarMessageController extends BaseController +{ + @Resource + private ISysCarMessageService sysCarMessageService; + @Autowired + private HttpSession session; + + static String TEST = "7E 56 45 48 49 43 4C 45 5F 4D 53 47 3A 56 49 4E 31 32 B6 A1 C0 F2 B3 E5 D9 A8 C1 B2 E3 F4 A6 D7 C9 F1 E0 A3 B5 C8 D4 E2 A1 F5 B6 C7 E8 D9 A0 E3 B2 C4 F5 D6 A8 C0 E1 F2 B7 D8 A4 E3 C2 B1 A5 D9 F6 C8 E7 A0 B2 C3 D1 F4 E5 A9 3F 2A 7B D9 1E C8 4D A3 6F 5B 9A 0C 3E 7D F2 8B 46 1A 5E 9F 2D 73 8C 4A B1 6C 5D E2 7E C4 39 0B AD 7C 1F 0E 3C 68 92 B4 5A 7F 6E 81 0D 4B A5 E3 F9 2E 8A 37 6D 14 5C 73 8E D2 04 9B 3A 6C F1 70 BF 29 5F 8C 43 61 24 5D 7A 9C 0A D5 1B 3D 6E F4 78 3E 5B"; + + @RequiresPermissions("message:message:test") + @GetMapping("/test") + public Result test() throws InterruptedException, ExecutionException { + List list = (List) session.getAttribute("list"); + + // 检查 list 是否为空 + if (list == null || list.isEmpty()) { + return Result.success(new String[0]); // 或者返回一个适当的错误消息 + } + + String[] test = TEST.split(" "); + String[] results = new String[list.size()]; + + List> futures = new ArrayList<>(); + + for (SysCarMessage carMessage : list) { + futures.add(CompletableFuture.supplyAsync(() -> { + int startIndex = Integer.parseInt(carMessage.getMessageStartIndex()) - 1; + int endIndex = Integer.parseInt(carMessage.getMessageEndIndex()); + StringBuilder hexBuilder = new StringBuilder(); + + for (int j = startIndex; j < endIndex; j++) { + hexBuilder.append(test[j]); + } + + String hex = hexBuilder.toString(); + char[] result = new char[hex.length() / 2]; + + for (int x = 0; x < hex.length(); x += 2) { + int high = Character.digit(hex.charAt(x), 16); + int low = Character.digit(hex.charAt(x + 1), 16); + result[x / 2] = (char) ((high << 4) + low); + } + + return new String(result); + })); + } + + for (int i = 0; i < futures.size(); i++) { + results[i] = futures.get(i).get(); + } + + return Result.success(results); + } + + + /** + * 查询车辆报文记录列表 + */ + @RequiresPermissions("message:message:list") + @GetMapping("/list") + public Result> list(SysCarMessage sysCarMessage) + { + List list = sysCarMessageService.selectSysCarMessageList(sysCarMessage); + session.setAttribute("list", list); + return Result.success(list); + } + + @RequiresPermissions("message:message:dobList") + @GetMapping("/dobList") + public Result> dobList(SysMessageVO sysMessageVO) + { + List list = sysCarMessageService.dobList(sysMessageVO); + return Result.success(list); + } + + + /** + * 导出车辆报文记录列表 + */ + @RequiresPermissions("message:message:export") + @PostMapping("/export") + public void export(HttpServletResponse response, SysCarMessage sysCarMessage) + { + List list = sysCarMessageService.selectSysCarMessageList(sysCarMessage); + ExcelUtil util = new ExcelUtil(SysCarMessage.class); + util.exportExcel(response, list, "车辆报文记录数据"); + } + + /** + * 获取车辆报文记录详细信息 + */ + @RequiresPermissions("message:message:query") + @GetMapping(value = "/{id}") + public Result> getInfo(@PathVariable("id") Long id) + { + return success(sysCarMessageService.selectSysCarMessageById(id)); + } + + /** + * 新增车辆报文记录 + */ + @RequiresPermissions("message:message:add") + @PostMapping + public Result add( + @Validated @RequestBody SysCarMessage sysCarMessage) + { + if (sysCarMessageService.checkIdUnique(sysCarMessage)) { + return error("新增 车辆报文记录 '" + sysCarMessage + "'失败,车辆报文记录已存在"); + } + return toAjax(sysCarMessageService.save(sysCarMessage)); + } + + /** + * 修改车辆报文记录 + */ + @RequiresPermissions("message:message:edit") + @PutMapping + public Result edit( + @Validated @RequestBody SysCarMessage sysCarMessage) + { + if (!sysCarMessageService.checkIdUnique(sysCarMessage)) { + return error("修改 车辆报文记录 '" + sysCarMessage + "'失败,车辆报文记录不存在"); + } + return toAjax(sysCarMessageService.updateById(sysCarMessage)); + } + + /** + * 删除车辆报文记录 + */ + @RequiresPermissions("message:message:remove") + @DeleteMapping("/{ids}") + public Result remove(@PathVariable("ids") Long[] ids) + { + sysCarMessageService.removeBatchByIds(Arrays.asList(ids)); + return success(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysMessageTypeController.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysMessageTypeController.java new file mode 100644 index 0000000..c93875a --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/controller/SysMessageTypeController.java @@ -0,0 +1,116 @@ +package com.muyu.car.controller; + +import java.util.Arrays; +import java.util.List; + +import com.muyu.car.domain.SysMessageType; +import com.muyu.car.service.ISysMessageTypeService; +import jakarta.servlet.http.HttpServletResponse; +import javax.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.security.utils.SecurityUtils; +import org.springframework.validation.annotation.Validated; +import com.muyu.common.core.web.page.TableDataInfo; + +/** + * 车辆报文类型Controller + * + * @author muyu + * @date 2024-09-18 + */ +@RestController +@RequestMapping("/messageType") +public class SysMessageTypeController extends BaseController +{ + @Resource + private ISysMessageTypeService sysMessageTypeService; + + /** + * 查询车辆报文类型列表 + */ + @RequiresPermissions("message:messageType:list") + @GetMapping("/list") + public Result> list(SysMessageType sysMessageType) + { + List list = sysMessageTypeService.selectSysMessageTypeList(sysMessageType); + return Result.success(list); + } + + /** + * 导出车辆报文类型列表 + */ + @RequiresPermissions("message:messageType:export") + @PostMapping("/export") + public void export(HttpServletResponse response, SysMessageType sysMessageType) + { + List list = sysMessageTypeService.selectSysMessageTypeList(sysMessageType); + ExcelUtil util = new ExcelUtil(SysMessageType.class); + util.exportExcel(response, list, "车辆报文类型数据"); + } + + /** + * 获取车辆报文类型详细信息 + */ + @RequiresPermissions("message:messageType:query") + @GetMapping(value = "/{messageCode}") + public Result> getInfo(@PathVariable("messageCode") String[] messageCodes) + { + SysMessageType[] list = new SysMessageType[messageCodes.length]; // 确保数组大小 + for (int i = 0; i < messageCodes.length; i++) { + list[i] = sysMessageTypeService.selectSysMessageTypeByMessageCode(messageCodes[i]); + } + return success(list); + } + + /** + * 新增车辆报文类型 + */ + @RequiresPermissions("message:messageType:add") + @PostMapping + public Result add( + @Validated @RequestBody SysMessageType sysMessageType) + { + if (sysMessageTypeService.checkIdUnique(sysMessageType)) { + return error("新增 车辆报文类型 '" + sysMessageType + "'失败,车辆报文类型已存在"); + } + + return toAjax(sysMessageTypeService.save(sysMessageType)); + } + + /** + * 修改车辆报文类型 + */ + @RequiresPermissions("message:messageType:edit") + @PutMapping + public Result edit( + @Validated @RequestBody SysMessageType sysMessageType) + { + if (!sysMessageTypeService.checkIdUnique(sysMessageType)) { + return error("修改 车辆报文类型 '" + sysMessageType + "'失败,车辆报文类型不存在"); + } + + return toAjax(sysMessageTypeService.updateById(sysMessageType)); + } + + /** + * 删除车辆报文类型 + */ + @RequiresPermissions("message:messageType:remove") + @DeleteMapping("/{ids}") + public Result remove(@PathVariable("ids") Long[] ids) + { + sysMessageTypeService.removeBatchByIds(Arrays.asList(ids)); + return success(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCar.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCar.java new file mode 100644 index 0000000..d7d7efd --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCar.java @@ -0,0 +1,86 @@ +package com.muyu.car.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.*; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; + +/** + * 车辆基础信息对象 sys_car + * + * @author muyu + * @date 2024-09-17 + */ + +@Data +@Setter +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_car") +public class SysCar { + private static final long serialVersionUID = 1L; + + /** 自增主键 */ + @TableId( type = IdType.AUTO) + private Long id; + + /** 车辆VIN码 */ + @Excel(name = "车辆VIN码") + private String carVin; + + /** 车辆车牌号 */ + @Excel(name = "车辆车牌号") + private String carPlate; + + /** 车辆品牌 */ + @Excel(name = "车辆品牌") + private String carBrand; + + /** 车辆型号 */ + @Excel(name = "车辆型号") + private String carModel; + + /** 车辆车型(如客车,卡车,公交车等) */ + @Excel(name = "车辆车型(如客车,卡车,公交车等)") + private String carType; + + /** 最后一次连线时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "最后一次连线时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date carLastJoinTime; + + /** 最后一次离线时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "最后一次离线时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date carLastOfflineTime; + + /** 启用状态(1.在线 2.离线 3.已断开 4.待连接 5.维修中 */ + @Excel(name = "启用状态(1.在线 2.离线 3.已断开 4.待连接 5.维修中") + private String state; + + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("carVin", getCarVin()) + .append("carPlate", getCarPlate()) + .append("carBrand", getCarBrand()) + .append("carModel", getCarModel()) + .append("carType", getCarType()) + .append("carLastJoinTime", getCarLastJoinTime()) + .append("carLastOfflineTime", getCarLastOfflineTime()) + .append("state", getState()) + .toString(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCarMessage.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCarMessage.java new file mode 100644 index 0000000..0f045c9 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysCarMessage.java @@ -0,0 +1,66 @@ +package com.muyu.car.domain; + +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.*; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; + +/** + * 车辆报文记录对象 sys_car_message + * + * @author muyu + * @date 2024-09-18 + */ + +@Data +@Setter +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_car_message") +public class SysCarMessage { + private static final long serialVersionUID = 1L; + + /** 自增主键 */ + @TableId( type = IdType.AUTO) + private Long id; + + /** 车辆型号编码 */ + @Excel(name = "车辆型号编码") + private String modelCode; + + /** 车辆报文类型编码 */ + @Excel(name = "i") + private String messageTypeCode; + + /** 开始位下标 */ + @Excel(name = "开始位下标") + private String messageStartIndex; + + /** 结束位下标 */ + @Excel(name = "结束位下标") + private String messageEndIndex; + + /** 报文分类 */ + @Excel(name = "报文分类") + private String messageType; + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("modelCode", getModelCode()) + .append("messageTypeCode", getMessageTypeCode()) + .append("messageStartIndex", getMessageStartIndex()) + .append("messageEndIndex", getMessageEndIndex()) + .append("messageType", getMessageType()) + .toString(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysMessageType.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysMessageType.java new file mode 100644 index 0000000..c2f3e04 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/SysMessageType.java @@ -0,0 +1,59 @@ +package com.muyu.car.domain; + +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.*; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; + +/** + * 车辆报文类型对象 sys_message_type + * + * @author muyu + * @date 2024-09-18 + */ + +@Data +@Setter +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_message_type") +public class SysMessageType { + private static final long serialVersionUID = 1L; + + /** 自增主键 */ + @TableId( type = IdType.AUTO) + private Long id; + + /** 报文编码 */ + @Excel(name = "报文编码") + private String messageCode; + + /** 报文名称 */ + @Excel(name = "报文名称") + private String messageName; + + /** 报文分类 */ + @Excel(name = "报文分类") + private String messageType; + @Excel(name = "报文字段类型") + private String messageClass; + + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("messageCode", getMessageCode()) + .append("messageName", getMessageName()) + .append("messageType", getMessageType()) + .toString(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VO/SysMessageVO.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VO/SysMessageVO.java new file mode 100644 index 0000000..ea7c14a --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VO/SysMessageVO.java @@ -0,0 +1,26 @@ +package com.muyu.car.domain.VO; + +import com.muyu.common.core.annotation.Excel; +import lombok.*; + +/** + * 车辆报文类型对象 sys_message_type + * + * @author muyu + * @date 2024-09-18 + */ + +@Data +public class SysMessageVO { + private static final long serialVersionUID = 1L; + + private Long id; + + private String modelCode; + private String messageTypeCode; + private String messageStartIndex; + private String messageEndIndex; + private String messageType; + + private String messageName; +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VehicleMessage.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VehicleMessage.java new file mode 100644 index 0000000..f50e817 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/domain/VehicleMessage.java @@ -0,0 +1,205 @@ +package com.muyu.car.domain; + +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class VehicleMessage extends BaseEntity { + + /** + * VIN码 + */ + private String carVin; + /** + * 时间戳 + */ + private Long startTime; + /** + * 经度 + */ + private String longitude; + /** + * 纬度 + */ + private String latitude; + /** + * 车速 + */ + private String speed; + /** + * 总里程 + */ + private String totalMileage; + /** + * 总电压 + */ + private String totalVoltage; + /** + * 总电流 + */ + private String combinedCurrent; + /** + * 绝缘电阻 + */ + private String insulationResistance; + /** + * 档位 + */ + private String gearPosition; + /** + * 加速踏板行程值 + */ + private String acceleratorPedalTravelValue; + /** + * 制动踏板行程值 + */ + private String brakePedalTravelValue; + /** + * 燃料消耗率 + */ + private String specificFuelConsumption; + /** + * 电机控制器温度 + */ + private String motorControllerTemperature; + /** + * 电机转速 + */ + private String motorSpeed; + /** + * 电机转矩 + */ + private String motorTorque; + /** + * 电机温度 + */ + private String motorTemperature; + /** + * 电机电压 + */ + private String motorVoltage; + /** + * 电机电流 + */ + private String motorCurrent; + /** + * 动力电池剩余电量SOC + */ + private String powerBatteryRemainingSOC; + /** + * 当前状态允许的最大反馈功率 + */ + private String maximumPower; + /** + * 当前状态允许最大放电功率 + */ + private String maximumDischargePower; + /** + * BMS自检计数器 + */ + private String BMSSelfCheckCounter; + /** + * 动力电池充放电电流 + */ + private String electricCurrent; + /** + * 动力电池负载端总电压V3 + */ + private String totalVoltageV3; + /** + * 单次最大电压 + */ + private String singleMaximumVoltage; + /** + * 单体电池最低电压 + */ + private String minimumVoltageOfABattery; + /** + * 单体电池最高温度 + */ + private String maximumBatteryTemperature; + /** + * 单体电池最低温度 + */ + private String minimumBatteryTemperature; + /** + * 动力电池可用容量 + */ + private String powerBatteryAvailableCapacity; + /** + * 车辆状态 + */ + private String vehicleStatus; + /** + * 充电状态 + */ + private String chargingState; + /** + * 运行状态 + */ + private String runningState; + /** + * SOC + */ + private String SOC; + /** + * 可充电储能装置工作状态 + */ + private String workStatus; + /** + * 驱动电机状态 + */ + private String driveMotorCondition; + /** + * 定位是否有效 + */ + private String orientation; + /** + * EAS + */ + private String eas; + /** + * PTC + */ + private String ptc; + /** + * EPS + */ + private String eps; + /** + * ABS + */ + private String abs; + /** + * MCU + */ + private String mcu; + /** + * 动力电池加热状态 + */ + private String heatingState; + /** + * 动力电池当前状态 + */ + private String currentStatus; + /** + * 动力电池保温状态 + */ + private String insulationState; + /** + * DCDC + */ + private String dcdc; + /** + * CHG + */ + private String chg; +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMapper.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMapper.java new file mode 100644 index 0000000..1711c48 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMapper.java @@ -0,0 +1,16 @@ +package com.muyu.car.mapper; + +import java.util.List; +import com.muyu.car.domain.SysCar; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 车辆基础信息Mapper接口 + * + * @author muyu + * @date 2024-09-17 + */ +public interface SysCarMapper extends BaseMapper{ + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMessageMapper.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMessageMapper.java new file mode 100644 index 0000000..b41073c --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysCarMessageMapper.java @@ -0,0 +1,19 @@ +package com.muyu.car.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.car.domain.SysCarMessage; +import com.muyu.car.domain.VO.SysMessageVO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 车辆报文记录Mapper接口 + * + * @author muyu + * @date 2024-09-18 + */ +@Mapper +public interface SysCarMessageMapper extends BaseMapper{ + ListdobList(SysMessageVO sysMessageVO); +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysMessageTypeMapper.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysMessageTypeMapper.java new file mode 100644 index 0000000..2fec6bb --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/mapper/SysMessageTypeMapper.java @@ -0,0 +1,18 @@ +package com.muyu.car.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.car.domain.SysMessageType; +import org.apache.ibatis.annotations.Mapper; + +/** + * 车辆报文类型Mapper接口 + * + * @author muyu + * @date 2024-09-18 + */ +@Mapper +public interface SysMessageTypeMapper extends BaseMapper{ + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/redis/RedisInitialize.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/redis/RedisInitialize.java new file mode 100644 index 0000000..d0798fd --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/redis/RedisInitialize.java @@ -0,0 +1,157 @@ +package com.muyu.car.redis; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +import com.muyu.car.constant.RedisConstant; +import com.muyu.car.domain.VehicleMessage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.List; + +@Component +public class RedisInitialize { + + + @Autowired + private RedisTemplateredisTemplate; + + @PostConstruct + public void a() { + + new Thread(()->{ + try { + Thread.sleep(1000); + }catch (Exception exception){ + throw new RuntimeException(exception); + } + }); + VehicleMessage message1 = new VehicleMessage(); + message1.setStartTime(System.currentTimeMillis()); + message1.setSpeed("50"); + message1.setLongitude("126.397428"); + message1.setLatitude("37.90923"); + message1.setTotalMileage("1010"); + message1.setTotalVoltage("22.5"); + message1.setAcceleratorPedalTravelValue("1.5"); + message1.setBrakePedalTravelValue("1.2"); + message1.setSpecificFuelConsumption("1.8"); + message1.setMotorControllerTemperature("59"); + message1.setMotorSpeed("850"); + message1.setMotorTorque("110"); + message1.setMotorTemperature("53"); + message1.setMotorVoltage("12.5"); + message1.setMotorCurrent("1.1"); + message1.setPowerBatteryRemainingSOC("88"); + message1.setMaximumPower("999"); + message1.setMaximumDischargePower("950"); + message1.setDcdc("2"); + message1.setChg("2"); + message1.setBMSSelfCheckCounter("2"); + message1.setElectricCurrent("2.3"); + message1.setTotalVoltageV3("13.1"); + message1.setSingleMaximumVoltage("14.1"); + message1.setMinimumVoltageOfABattery("12.2"); + message1.setMaximumBatteryTemperature("85"); + message1.setMinimumBatteryTemperature("51"); + message1.setPowerBatteryAvailableCapacity("560"); + message1.setCombinedCurrent("1.1"); + message1.setRunningState("2"); + message1.setWorkStatus("2"); + message1.setDriveMotorCondition("1"); + message1.setVehicleStatus("1"); + message1.setChargingState("1"); + message1.setHeatingState("1"); + message1.setCarVin("1HGCM826X3A004352"); + + redisTemplate.opsForValue().set(RedisConstant.VEHICLE_ENTERPRISE + message1.getCarVin(), JSON.toJSONString(message1)); + } + + @PostConstruct + public void initialize() { + + +// +// new Thread(() -> { +// try { +// Thread.sleep(500); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } +// List vehicleMessageMiddleList = vehicleMessageMiddleService.list(); +// vehicleMessageMiddleList.forEach(vehicleMessageMiddle -> { +// List messageDetailList = messageDetailService.list(new LambdaQueryWrapper<>() {{ +// in(MessageDetail::getId, Arrays.asList(vehicleMessageMiddle.getMessageIds().split(","))); +// }}); +// String jsonString = JSON.toJSONString(messageDetailList); +// redisTemplate.opsForHash().put(RedisConstant.MESSAGE_DETAIL, vehicleMessageMiddle.getCarVin(), jsonString); +// }); +// }); + +// MessageDetail messageDetail = new MessageDetail(); +// messageDetail.setKeyCode("1"); +// messageDetail.setLabel("测试"); +// messageDetail.setStartBit(0); +// messageDetail.setStopBit(8); +// messageDetail.setType("1"); + +// List list = vehicleMessageMiddleService.list(); +// list.forEach(vehicleMessageMiddle -> { +// List messageDetailList = messageDetailService.list(new LambdaQueryWrapper<>() {{ +// in(MessageDetail::getId, Arrays.asList(vehicleMessageMiddle.getMessageIds().split(","))); +// }); +// String jsonString = JSON.toJSONString(messageDetailList); +// redisTemplate.opsForHash().put(RedisConstant.VEHICLE_ENTERPRISE, message1.getCarVin(), String.valueOf(jsonString)); + + new Thread(()->{ + try { + Thread.sleep(500); + }catch (Exception exception){ + throw new RuntimeException(exception); + } + }); + VehicleMessage message1 = new VehicleMessage(); + message1.setStartTime(System.currentTimeMillis()); + message1.setSpeed("50"); + message1.setLongitude("116.397428"); + message1.setLatitude("39.90923"); + message1.setTotalMileage("1000"); + message1.setTotalVoltage("12.5"); + message1.setAcceleratorPedalTravelValue("0.5"); + message1.setBrakePedalTravelValue("0.2"); + message1.setSpecificFuelConsumption("0.8"); + message1.setMotorControllerTemperature("60"); + message1.setMotorSpeed("800"); + message1.setMotorTorque("100"); + message1.setMotorTemperature("70"); + message1.setMotorVoltage("12.6"); + message1.setMotorCurrent("1.2"); + message1.setPowerBatteryRemainingSOC("80"); + message1.setMaximumPower("1000"); + message1.setMaximumDischargePower("900"); + message1.setDcdc("1"); + message1.setChg("1"); + message1.setBMSSelfCheckCounter("1"); + message1.setElectricCurrent("2.5"); + message1.setTotalVoltageV3("13.5"); + message1.setSingleMaximumVoltage("14.5"); + message1.setMinimumVoltageOfABattery("12.0"); + message1.setMaximumBatteryTemperature("80"); + message1.setMinimumBatteryTemperature("50"); + message1.setPowerBatteryAvailableCapacity("800"); + message1.setCombinedCurrent("1.5"); + message1.setRunningState("1"); + message1.setWorkStatus("1"); + message1.setDriveMotorCondition("1"); + message1.setVehicleStatus("1"); + message1.setChargingState("1"); + message1.setHeatingState("1"); + message1.setCarVin("1HGCM826X3A004352"); + + redisTemplate.opsForValue().set(RedisConstant.VEHICLE_ENTERPRISE + message1.getCarVin(), JSON.toJSONString(message1)); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarMessageService.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarMessageService.java new file mode 100644 index 0000000..5c6c792 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarMessageService.java @@ -0,0 +1,41 @@ +package com.muyu.car.service; + +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.car.domain.SysCarMessage; +import com.muyu.car.domain.VO.SysMessageVO; + +/** + * 车辆报文记录Service接口 + * + * @author muyu + * @date 2024-09-18 + */ +public interface ISysCarMessageService extends IService { + + ListdobList(SysMessageVO sysMessageVO); + /** + * 精确查询车辆报文记录 + * + * @param id 车辆报文记录主键 + * @return 车辆报文记录 + */ + public SysCarMessage selectSysCarMessageById(Long id); + + /** + * 查询车辆报文记录列表 + * + * @param sysCarMessage 车辆报文记录 + * @return 车辆报文记录集合 + */ + public List selectSysCarMessageList(SysCarMessage sysCarMessage); + + /** + * 判断 车辆报文记录 id是否唯一 + * @param sysCarMessage 车辆报文记录 + * @return 结果 + */ + Boolean checkIdUnique(SysCarMessage sysCarMessage); + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarService.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarService.java new file mode 100644 index 0000000..3b010ff --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysCarService.java @@ -0,0 +1,37 @@ +package com.muyu.car.service; + +import java.util.List; +import com.muyu.car.domain.SysCar; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 车辆基础信息Service接口 + * + * @author muyu + * @date 2024-09-17 + */ +public interface ISysCarService extends IService { + /** + * 精确查询车辆基础信息 + * + * @param id 车辆基础信息主键 + * @return 车辆基础信息 + */ + public SysCar selectSysCarById(Long id); + + /** + * 查询车辆基础信息列表 + * + * @param sysCar 车辆基础信息 + * @return 车辆基础信息集合 + */ + public List selectSysCarList(SysCar sysCar); + + /** + * 判断 车辆基础信息 id是否唯一 + * @param sysCar 车辆基础信息 + * @return 结果 + */ + Boolean checkIdUnique(SysCar sysCar); + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysMessageTypeService.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysMessageTypeService.java new file mode 100644 index 0000000..e744241 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/ISysMessageTypeService.java @@ -0,0 +1,38 @@ +package com.muyu.car.service; + +import java.util.List; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.car.domain.SysMessageType; + +/** + * 车辆报文类型Service接口 + * + * @author muyu + * @date 2024-09-18 + */ +public interface ISysMessageTypeService extends IService { + /** + * 精确查询车辆报文类型 + * + * @param messageCode 车辆报文类型主键 + * @return 车辆报文类型 + */ + public SysMessageType selectSysMessageTypeByMessageCode(String messageCode); + + /** + * 查询车辆报文类型列表 + * + * @param sysMessageType 车辆报文类型 + * @return 车辆报文类型集合 + */ + public List selectSysMessageTypeList(SysMessageType sysMessageType); + + /** + * 判断 车辆报文类型 id是否唯一 + * @param sysMessageType 车辆报文类型 + * @return 结果 + */ + Boolean checkIdUnique(SysMessageType sysMessageType); + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarMessageServiceImpl.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarMessageServiceImpl.java new file mode 100644 index 0000000..30568a5 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarMessageServiceImpl.java @@ -0,0 +1,81 @@ +package com.muyu.car.service.impl; + +import java.util.List; + +import com.muyu.car.domain.SysCarMessage; +import com.muyu.car.domain.VO.SysMessageVO; +import com.muyu.car.mapper.SysCarMessageMapper; +import com.muyu.car.service.ISysCarMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.utils.StringUtils; +import org.springframework.util.Assert; + +/** + * 车辆报文记录Service业务层处理 + * + * @author muyu + * @date 2024-09-18 + */ +@Service +public class SysCarMessageServiceImpl + extends ServiceImpl + implements ISysCarMessageService { + @Autowired + private SysCarMessageMapper mapper; + + @Override + public List dobList(SysMessageVO sysMessageVO) { + return mapper.dobList(sysMessageVO); + } + + /** + * 精确查询车辆报文记录 + * + * @param id 车辆报文记录主键 + * @return 车辆报文记录 + */ + @Override + public SysCarMessage selectSysCarMessageById(Long id) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(id, "id不可为空"); + queryWrapper.eq(SysCarMessage::getId, id); + return this.getOne(queryWrapper); + } + + + /** + * 查询车辆报文记录列表 + * + * @param sysCarMessage 车辆报文记录 + * @return 车辆报文记录 + */ + @Override + public List selectSysCarMessageList(SysCarMessage sysCarMessage) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(sysCarMessage.getModelCode())){ + queryWrapper.eq(SysCarMessage::getModelCode, sysCarMessage.getModelCode()); + } + if (StringUtils.isNotEmpty(sysCarMessage.getMessageType())){ + queryWrapper.eq(SysCarMessage::getMessageType, sysCarMessage.getMessageType()); + } + return this.list(queryWrapper); + } + + /** + * 唯一 判断 + * @param sysCarMessage 车辆报文记录 + * @return 车辆报文记录 + */ + @Override + public Boolean checkIdUnique(SysCarMessage sysCarMessage) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCarMessage::getId, sysCarMessage.getId()); + return this.count(queryWrapper) > 0; + } + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarServiceImpl.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarServiceImpl.java new file mode 100644 index 0000000..309faaf --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysCarServiceImpl.java @@ -0,0 +1,90 @@ +package com.muyu.car.service.impl; + +import java.util.List; +import com.muyu.common.core.utils.DateUtils; +import org.springframework.stereotype.Service; +import com.muyu.car.mapper.SysCarMapper; +import com.muyu.car.domain.SysCar; +import com.muyu.car.service.ISysCarService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.utils.StringUtils; +import org.springframework.util.Assert; + +/** + * 车辆基础信息Service业务层处理 + * + * @author muyu + * @date 2024-09-17 + */ +@Service +public class SysCarServiceImpl + extends ServiceImpl + implements ISysCarService { + + /** + * 精确查询车辆基础信息 + * + * @param id 车辆基础信息主键 + * @return 车辆基础信息 + */ + @Override + public SysCar selectSysCarById(Long id) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(id, "id不可为空"); + queryWrapper.eq(SysCar::getId, id); + return this.getOne(queryWrapper); + } + + + /** + * 查询车辆基础信息列表 + * + * @param sysCar 车辆基础信息 + * @return 车辆基础信息 + */ + @Override + public List selectSysCarList(SysCar sysCar) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(sysCar.getCarVin())){ + queryWrapper.eq(SysCar::getCarVin, sysCar.getCarVin()); + } + if (StringUtils.isNotEmpty(sysCar.getCarPlate())){ + queryWrapper.eq(SysCar::getCarPlate, sysCar.getCarPlate()); + } + if (StringUtils.isNotEmpty(sysCar.getCarBrand())){ + queryWrapper.eq(SysCar::getCarBrand, sysCar.getCarBrand()); + } + if (StringUtils.isNotEmpty(sysCar.getCarModel())){ + queryWrapper.eq(SysCar::getCarModel, sysCar.getCarModel()); + } + if (StringUtils.isNotEmpty(sysCar.getCarType())){ + queryWrapper.eq(SysCar::getCarType, sysCar.getCarType()); + } + if (sysCar.getCarLastJoinTime()!= null){ + queryWrapper.eq(SysCar::getCarLastJoinTime, sysCar.getCarLastJoinTime()); + } + if (sysCar.getCarLastOfflineTime()!= null){ + queryWrapper.eq(SysCar::getCarLastOfflineTime, sysCar.getCarLastOfflineTime()); + } + if (StringUtils.isNotEmpty(sysCar.getState())){ + queryWrapper.eq(SysCar::getState, sysCar.getState()); + } + return this.list(queryWrapper); + } + + /** + * 唯一 判断 + * @param sysCar 车辆基础信息 + * @return 车辆基础信息 + */ + @Override + public Boolean checkIdUnique(SysCar sysCar) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCar::getId, sysCar.getId()); + return this.count(queryWrapper) > 0; + } + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysMessageTypeServiceImpl.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysMessageTypeServiceImpl.java new file mode 100644 index 0000000..4e428c8 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/service/impl/SysMessageTypeServiceImpl.java @@ -0,0 +1,72 @@ +package com.muyu.car.service.impl; + +import java.util.List; + +import com.muyu.car.domain.SysMessageType; +import com.muyu.car.mapper.SysMessageTypeMapper; +import com.muyu.car.service.ISysMessageTypeService; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.utils.StringUtils; +import org.springframework.util.Assert; + +/** + * 车辆报文类型Service业务层处理 + * + * @author muyu + * @date 2024-09-18 + */ +@Service +public class SysMessageTypeServiceImpl + extends ServiceImpl + implements ISysMessageTypeService { + + /** + * 精确查询车辆报文类型 + * + * @param id 车辆报文类型主键 + * @return 车辆报文类型 + */ + @Override + public SysMessageType selectSysMessageTypeByMessageCode(String messageCode) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(messageCode, "messageCode不可为空"); + queryWrapper.eq(SysMessageType::getMessageCode, messageCode); + return this.getOne(queryWrapper); + } + + + /** + * 查询车辆报文类型列表 + * + * @param sysMessageType 车辆报文类型 + * @return 车辆报文类型 + */ + @Override + public List selectSysMessageTypeList(SysMessageType sysMessageType) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(sysMessageType.getMessageName())){ + queryWrapper.like(SysMessageType::getMessageName, sysMessageType.getMessageName()); + } + if (StringUtils.isNotEmpty(sysMessageType.getMessageType())){ + queryWrapper.eq(SysMessageType::getMessageType, sysMessageType.getMessageType()); + } + return this.list(queryWrapper); + } + + /** + * 唯一 判断 + * @param sysMessageType 车辆报文类型 + * @return 车辆报文类型 + */ + @Override + public Boolean checkIdUnique(SysMessageType sysMessageType) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysMessageType::getId, sysMessageType.getId()); + return this.count(queryWrapper) > 0; + } + +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/util/SSLUtils.java b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/util/SSLUtils.java new file mode 100644 index 0000000..794b2d9 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/java/com/muyu/car/util/SSLUtils.java @@ -0,0 +1,75 @@ +package com.muyu.car.util; + +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.openssl.PEMKeyPair; +import org.bouncycastle.openssl.PEMParser; +import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; + +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManagerFactory; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.FileReader; +import java.security.KeyPair; +import java.security.KeyStore; +import java.security.Security; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +public class SSLUtils { + public static SSLSocketFactory getSocketFactory(final String caCrtFile, + final String crtFile, final String keyFile, final String password) + throws Exception { + Security.addProvider(new BouncyCastleProvider()); + + // load CA certificate + X509Certificate caCert = null; + + FileInputStream fis = new FileInputStream(caCrtFile); + BufferedInputStream bis = new BufferedInputStream(fis); + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + + while (bis.available() > 0) { + caCert = (X509Certificate) cf.generateCertificate(bis); + } + + // load client certificate + bis = new BufferedInputStream(new FileInputStream(crtFile)); + X509Certificate cert = null; + while (bis.available() > 0) { + cert = (X509Certificate) cf.generateCertificate(bis); + } + + // load client private key + PEMParser pemParser = new PEMParser(new FileReader(keyFile)); + Object object = pemParser.readObject(); + JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); + KeyPair key = converter.getKeyPair((PEMKeyPair) object); + pemParser.close(); + + // CA certificate is used to authenticate server + KeyStore caKs = KeyStore.getInstance(KeyStore.getDefaultType()); + caKs.load(null, null); + caKs.setCertificateEntry("ca-certificate", caCert); + TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); + tmf.init(caKs); + + // client key and certificates are sent to server so it can authenticate + KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); + ks.load(null, null); + ks.setCertificateEntry("certificate", cert); + ks.setKeyEntry("private-key", key.getPrivate(), password.toCharArray(), + new java.security.cert.Certificate[]{cert}); + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory + .getDefaultAlgorithm()); + kmf.init(ks, password.toCharArray()); + + // finally, create SSL socket factory + SSLContext context = SSLContext.getInstance("TLSv1.2"); + context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); + + return context.getSocketFactory(); + } +} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/banner.txt b/cloud-modules/cloud-modules-carmanage/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-carmanage/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..6048e61 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/bootstrap.yml @@ -0,0 +1,61 @@ +# Tomcat +server: + port: 10010 + +# nacos线上地址 +nacos: + addr: 49.235.136.60:8848 + user-name: nacos + password: nacos + namespace: wyh +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all +# Spring +spring: + amqp: + deserialization: + trust: + all: true + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-car + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} +# # nacos用户名 +# username: ${nacos.user-name} +# # nacos密码 +# password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + config: + # 服务注册地址 + server-addr: ${nacos.addr} +# # nacos用户名 +# username: ${nacos.user-name} +# # nacos密码 +# password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # xxl-job 配置文件 + - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # rabbit 配置文件 + - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.system.mapper: DEBUG + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..d1b5629 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..76a0d8f --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/test.xml new file mode 100644 index 0000000..76a0d8f --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMapper.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMapper.xml new file mode 100644 index 0000000..5113cd6 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, car_vin, car_plate, car_brand, car_model, car_type, car_last_join_time, car_last_offline_time, state, create_by, create_time, update_by, update_time, remark from sys_car + + + + + + + + insert into sys_car + + car_vin, + car_plate, + car_brand, + car_model, + car_type, + car_last_join_time, + car_last_offline_time, + state, + create_by, + create_time, + update_by, + update_time, + remark, + + + #{carVin}, + #{carPlate}, + #{carBrand}, + #{carModel}, + #{carType}, + #{carLastJoinTime}, + #{carLastOfflineTime}, + #{state}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + #{remark}, + + + + + update sys_car + + car_vin = #{carVin}, + car_plate = #{carPlate}, + car_brand = #{carBrand}, + car_model = #{carModel}, + car_type = #{carType}, + car_last_join_time = #{carLastJoinTime}, + car_last_offline_time = #{carLastOfflineTime}, + state = #{state}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + remark = #{remark}, + + where id = #{id} + + + + delete from sys_car where id = #{id} + + + + delete from sys_car where id in + + #{id} + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMessageMapper.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMessageMapper.xml new file mode 100644 index 0000000..3b10785 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysCarMessageMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + select id, model_code, message_type_code, message_start_index, message_end_index from sys_car_message + + + + + + + + + insert into sys_car_message + + model_code, + message_type_code, + message_start_index, + message_end_index, + + + #{modelCode}, + #{messageTypeCode}, + #{messageStartIndex}, + #{messageEndIndex}, + + + + + update sys_car_message + + model_code = #{modelCode}, + message_type_code = #{messageTypeCode}, + message_start_index = #{messageStartIndex}, + message_end_index = #{messageEndIndex}, + + where id = #{id} + + + + delete from sys_car_message where id = #{id} + + + + delete from sys_car_message where id in + + #{id} + + + diff --git a/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysMessageTypeMapper.xml b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysMessageTypeMapper.xml new file mode 100644 index 0000000..3d1d939 --- /dev/null +++ b/cloud-modules/cloud-modules-carmanage/src/main/resources/mapper/car/SysMessageTypeMapper.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + select id, message_code, message_name, message_type from sys_message_type + + + + + + + + insert into sys_message_type + + message_code, + message_name, + message_type, + + + #{messageCode}, + #{messageName}, + #{messageType}, + + + + + update sys_message_type + + message_code = #{messageCode}, + message_name = #{messageName}, + message_type = #{messageType}, + + where id = #{id} + + + + delete from sys_message_type where id = #{id} + + + + delete from sys_message_type where id in + + #{id} + + + diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserPost.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserPost.java new file mode 100644 index 0000000..229dc70 --- /dev/null +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserPost.java @@ -0,0 +1,28 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户和岗位关联 sys_user_post + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPost { + /** + * 用户ID + */ + private Long userId; + + /** + * 岗位ID + */ + private Long postId; + +} diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserRole.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserRole.java new file mode 100644 index 0000000..ee9c945 --- /dev/null +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/domain/SysUserRole.java @@ -0,0 +1,27 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户和角色关联 sys_user_role + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRole { + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; +} diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml index cbe470c..1d52970 100644 --- a/cloud-modules/pom.xml +++ b/cloud-modules/pom.xml @@ -17,6 +17,7 @@ cloud-modules-car cloud-modules-rail cloud-modules-warn + cloud-modules-carmanage cloud-modules