ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/UserListQueryDto.java
@@ -18,4 +18,10 @@ Integer vipTypeId; @ApiModelProperty(value = "单位id") Integer companyId; @ApiModelProperty(value = "到期天数1") Integer vipEndTime1; @ApiModelProperty(value = "到期天数2") Integer vipEndTime2; } ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUser.java
@@ -118,5 +118,9 @@ @TableField(exist = false) private Long orderCount; @ApiModelProperty("剩余天数") @TableField(exist = false) private Long lastDays; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetPermissionConfigurationDTO.java
@@ -17,5 +17,5 @@ @ApiModelProperty(value = "备注") private String permissionRemarks; @ApiModelProperty(value = "权限菜单") private Map<String, Object> menu; private List<Map<String, Object>> menu; } ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/dto/GetSiteListDTO.java
@@ -17,6 +17,8 @@ private String code; @ApiModelProperty(value = "站点名称") private String name; @ApiModelProperty(value = "合作商id") private Integer partnerId; @ApiModelProperty(value = "合作商名称") private String partnerName; @ApiModelProperty(value = "站点类型(0=其他,1=公共,2=个人,3=公交(专业),4=环卫(专用),5=物流(专用),6=出租车(专用))") ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/Site.java
@@ -10,6 +10,7 @@ import lombok.Data; import java.time.LocalDate; import java.time.LocalDateTime; /** * @author zhibing.pu @@ -204,7 +205,7 @@ @TableField("establishment_time") @ApiModelProperty(value = "建站时间", notes = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDate establishmentTime; private LocalDateTime establishmentTime; /** * 排序 */ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java
@@ -58,7 +58,7 @@ @ApiModelProperty(value = "站点名称") @TableField(exist = false) private Integer siteName; private String siteName; @ApiModelProperty(value = "合作商id", required = true) @TableField("partner_id") @@ -66,7 +66,7 @@ @ApiModelProperty(value = "合作商名称") @TableField(exist = false) private Integer partnerName; private String partnerName; @ApiModelProperty(value = "生产商机构代码") @TableField("manufacturer_code") ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/TChargingGunVO.java
@@ -11,23 +11,23 @@ @ApiModelProperty(value = "策略名称") private String strategyName; @ApiModelProperty(value = "编辑权限") private boolean authUpdate = true; @ApiModelProperty(value = "删除权限") private boolean authDelete = true; @ApiModelProperty(value = "查看费率权限") private boolean authViewRates = true; @ApiModelProperty(value = "编辑权限") @ApiModelProperty(value = "下载二维码权限") private boolean authDownloadQRCode = true; @ApiModelProperty(value = "编辑权限") @ApiModelProperty(value = "查看详情权限") private boolean authQueryInfo = true; @ApiModelProperty(value = "编辑权限") @ApiModelProperty(value = "结束充电权限") private boolean authEndCharge = true; } ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/OrderFallbackFactory.java
@@ -7,7 +7,7 @@ import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.other.api.dto.ExchangeDto; import com.ruoyi.order.api.vo.ExchangeDto; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/OrderClient.java
@@ -5,9 +5,9 @@ import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory; import com.ruoyi.order.api.factory.OrderFallbackFactory; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.vo.ExchangeDto; import com.ruoyi.order.api.query.TActivityStatisticsQuery; import com.ruoyi.order.api.vo.TActivityVO; import com.ruoyi.other.api.dto.ExchangeDto; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/ExchangeDto.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.order.api.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ExchangeDto { @ApiModelProperty("商品id") Integer goodId; @ApiModelProperty("地址id") Integer addressId; @ApiModelProperty("备注") String remark; @ApiModelProperty(hidden = true) Long userId; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/ExchangeDto.java
@@ -13,7 +13,6 @@ String remark; @ApiModelProperty(hidden = true) Long userId; @ApiModelProperty(hidden = true) Integer userId; } ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -69,20 +69,20 @@ return chain.filter(exchange); } //防抖校验 try { antiShake(request); }catch (Exception e){ log.error("[重复提交]请求路径:{}", exchange.getRequest().getPath()); return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage(), HttpStatus.SUCCESS); } // try { // antiShake(request); // }catch (Exception e){ // log.error("[重复提交]请求路径:{}", exchange.getRequest().getPath()); // return ServletUtils.webFluxResponseWriter(exchange.getResponse(), e.getMessage(), HttpStatus.SUCCESS); // } //校验账户是否有效 try { verifyToken(request); verifyAccount(request); }catch (Exception e){ return unauthorizedResponse(exchange, e.getMessage()); } // try { // verifyToken(request); // verifyAccount(request); // }catch (Exception e){ // return unauthorizedResponse(exchange, e.getMessage()); // } String token = getToken(request); Claims claims = JwtUtils.parseToken(token); String userkey = JwtUtils.getUserKey(claims); ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
@@ -45,6 +45,18 @@ return AjaxResult.ok(appUserAddressService.list(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId))); } /** * 查询用户默认地址列表 */ @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户默认地址列表") @GetMapping(value = "/queryDefaultAddress") public AjaxResult<TAppUserAddress> queryDefaultAddress() { // 用户id Long userId = tokenService.getLoginUserApplet().getUserId(); return AjaxResult.ok(appUserAddressService.getOne(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId) .eq(TAppUserAddress::getDefaultAddress,1))); } /** * 添加用户地址管理 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -236,12 +236,15 @@ } //列表查询 Page<TAppUser> page = appUserService.lambdaQuery() .ge(TAppUser::getVipEndTime, LocalDateTime.now()) .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone()) .eq(userListQueryDto.getCompanyId() != null, TAppUser::getCompanyId, userListQueryDto.getCompanyId()) .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode()) .eq(userListQueryDto.getStatus() != null, TAppUser::getStatus, userListQueryDto.getStatus()) .eq(userListQueryDto.getVipTypeId() != null, TAppUser::getVipId, userListQueryDto.getVipTypeId()) .in(!userIds.isEmpty(),TAppUser::getId,userIds) .ge(userListQueryDto.getVipEndTime1() != null, TAppUser::getVipEndTime, userListQueryDto.getVipEndTime1() == null ? null : LocalDateTime.now().plusDays(userListQueryDto.getVipEndTime1())) .le(userListQueryDto.getVipEndTime2() != null, TAppUser::getVipEndTime, userListQueryDto.getVipEndTime2() == null ? null : LocalDateTime.now().plusDays(userListQueryDto.getVipEndTime2())) .in(!userIds.isEmpty(), TAppUser::getId, userIds) .page(Page.of(userListQueryDto.getPageCurr(), userListQueryDto.getPageSize())); if (page.getRecords().isEmpty()){ return R.ok(page); @@ -255,15 +258,19 @@ //拿到最新的tagId TAppUserTag one = appUserTagService.lambdaQuery().eq(TAppUserTag::getAppUserId, appUser.getId()).orderByDesc(TAppUserTag::getCreateTime).last("limit 1").one(); //设置最新的tagName R<TUserTag> byIdTag = otherClient.getByIdTag(one.getUserTagId()); if (byIdTag.getData()!=null) { appUser.setTagName(byIdTag.getData().getName()); if (one!=null) { R<TUserTag> byIdTag = otherClient.getByIdTag(one.getUserTagId()); if (byIdTag.getData() != null) { appUser.setTagName(byIdTag.getData().getName()); } } //匹配vipMap的值 appUser.setVipName(vipMap.getData().get(appUser.getVipId())); //累计充电次数 R<Long> useOrderCount = chargingOrderClient.useOrderCount(appUser.getId()); appUser.setOrderCount(useOrderCount.getData()); appUser.setLastDays( Duration.between(LocalDateTime.now(), appUser.getVipEndTime()).toDays()); appUser.setUid(appUser.getId().toString()); } return R.ok(page); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/config/FileUploadConfig.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.chargingPile.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * <p>文件上传配置</p> * * @author mouseyCat * @date 2020/10/13 16:10 */ @Data @Component @ConfigurationProperties(prefix = "file.upload") public class FileUploadConfig { private String accessPath; private String allowExt; private String location; private String qrLocation; } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/FileController.java
New file @@ -0,0 +1,142 @@ package com.ruoyi.chargingPile.controller; import com.ruoyi.chargingPile.config.FileUploadConfig; import com.ruoyi.common.core.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; /** * 文件上传控制类 * * @author junelee * @date 2020/3/20 20:21 */ @Api(tags = "服务器文件上传") @RestController @CrossOrigin @RequestMapping("/file/") public class FileController { @Autowired private FileUploadConfig fileUploadConfig; @ApiOperation(value = "单文件上传", notes = "单文件上传,rename 默认不重命名") @PostMapping(value = "upload", headers = "content-type=multipart/form-data") public AjaxResult uploadImageMany(@RequestParam(value = "file") MultipartFile mf) throws IOException { if (mf.isEmpty()) { return AjaxResult.error("请传入文件!"); } String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String realPath = fileUploadConfig.getLocation() + TimeDir; // String realPath = "D:\\file\\" + TimeDir; File file = new File(realPath); // 没有目录就创建 if (!file.exists()) { file.mkdirs(); } // 获取文件名称 String filename = mf.getOriginalFilename(); // 获取文件后缀 String ext = filename.substring(filename.lastIndexOf("."), filename.length()); // 检查文件类型 if (!fileUploadConfig.getAllowExt().contains(ext)) { return AjaxResult.error("上传文件格式不正确,仅支持" + fileUploadConfig.getAllowExt()); } File targetFile = new File(realPath, filename);//目标文件 //开始从源文件拷贝到目标文件 //传图片一步到位 mf.transferTo(targetFile); //拼接数据 String imgstr = fileUploadConfig.getAccessPath() + TimeDir +"/"+ filename; // String imgstr = TimeDir +"/"+ filename; return AjaxResult.success(imgstr); } // @ApiOperation(value = "单文件上传", notes = "单文件上传,rename 默认不重命名") // @PostMapping(value = "strUpload", headers = "content-type=multipart/form-data") // public String strUpload(@RequestParam(value = "file") MultipartFile mf,@RequestParam(value = "fileName")String fileName) throws IOException { // if (mf.isEmpty()) { // return "请传入文件!"; // } // String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); // String realPath = fileUploadConfig.getQrLocation() + TimeDir; // File file = new File(realPath); // // 没有目录就创建 // if (!file.exists()) { // file.mkdirs(); // } // File targetFile = new File(realPath, fileName);//目标文件 // //开始从源文件拷贝到目标文件 // //传图片一步到位 // mf.transferTo(targetFile); // //拼接数据 // return fileUploadConfig.getQrLocation() + TimeDir +"\\"+ fileName; // } @ApiOperation(value = "单文件上传", notes = "单文件上传,rename 默认不重命名") @PostMapping(value = "strUpload", headers = "content-type=multipart/form-data") public String strUpload(@RequestParam(value = "file") MultipartFile mf,@RequestParam(value = "fileName")String fileName) throws IOException { if (mf.isEmpty()) { return "请传入文件!"; } String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); // String realPath = "D:\\file\\" + TimeDir; String realPath = fileUploadConfig.getLocation() + TimeDir; File file = new File(realPath); // 没有目录就创建 if (!file.exists()) { file.mkdirs(); } File targetFile = new File(realPath, fileName);//目标文件 //开始从源文件拷贝到目标文件 //传图片一步到位 mf.transferTo(targetFile); String imgstr = fileUploadConfig.getAccessPath() + TimeDir +"/"+ fileName; //拼接数据 // return TimeDir +"/"+ fileName; return imgstr; } @ApiOperation(value = "单文件上传(覆盖服务器原文件)", notes = "单文件上传,rename 默认不重命名") @PostMapping(value = "test/upload", headers = "content-type=multipart/form-data") public AjaxResult uploadTest(@RequestParam(value = "file") MultipartFile mf) throws IOException { if (mf.isEmpty()) { return AjaxResult.error("请传入文件!"); } String TimeDir = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String realPath = fileUploadConfig.getLocation() + "2021-11-17"; File file = new File(realPath); // 没有目录就创建 if (!file.exists()) { file.mkdirs(); } // 判断文件大小 String filename = "6u2mGlqHkeE75e2ab51b4a03c6982ff7d68f4c024d43.jpg"; // 获取文件后缀 String ext = filename.substring(filename.lastIndexOf("."), filename.length()); // 检查文件类型 if (!fileUploadConfig.getAllowExt().contains(ext)) { return AjaxResult.error("上传文件格式不正确,仅支持" + fileUploadConfig.getAllowExt()); } File targetFile = new File(realPath, filename);//目标文件 //开始从源文件拷贝到目标文件 //传图片一步到位 mf.transferTo(targetFile); //拼接数据 String imgstr = fileUploadConfig.getAccessPath() + "2021-11-17" + "/" + filename; return AjaxResult.success(imgstr); } } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -165,7 +165,7 @@ @ResponseBody @PostMapping("/getSiteInfo") @PostMapping("/getSiteInfo/{id}") @ApiOperation(value = "获取站点详情", tags = {"管理后台-站点管理"}) public AjaxResult<Site> getSiteInfo(@PathVariable Integer id){ Site site = siteService.getById(id); ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java
@@ -183,39 +183,38 @@ return AjaxResult.ok(accountingStrategyService.pageList(query)); } @ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "审核") @PostMapping(value = "/auth/pass") public AjaxResult<PageInfo<TAccountingStrategyVO>> authPass(@RequestBody SteategyPassDto steategyPassDto) { TAccountingStrategy byId = accountingStrategyService.getById(steategyPassDto.getId()); Long userId = tokenService.getLoginUser().getSysUser().getUserId(); if (byId.getAuditStatus()==1&&byId.getFirstUserId()!=userId){ return AjaxResult.error("您不是一级审核人员,无法审核"); } if (byId.getAuditStatus()==2&&byId.getTwoUserId()!=userId){ return AjaxResult.error("您不是二级审核人员,无法审核"); } if (steategyPassDto.getPass()==1){ if (byId.getAuditStatus()==1){ byId.setAuditStatus(2); byId.setFirstRemark(steategyPassDto.getRemark()); }else if (byId.getAuditStatus()==2){ byId.setAuditStatus(3); byId.setTwoRemark(steategyPassDto.getRemark()); } }else { byId.setAuditStatus(4); } return AjaxResult.success(); } // @ApiOperation(tags = {"后台-申请表单-计费模板审核"},value = "审核") // @PostMapping(value = "/auth/pass") // public AjaxResult<PageInfo<TAccountingStrategyVO>> authPass(@RequestBody SteategyPassDto steategyPassDto) { // TAccountingStrategy byId = accountingStrategyService.getById(steategyPassDto.getId()); // Long userId = tokenService.getLoginUser().getSysUser().getUserId(); // if (byId.getAuditStatus()==1&&byId.getFirstUserId()!=userId){ // return AjaxResult.error("您不是一级审核人员,无法审核"); // } // if (byId.getAuditStatus()==2&&byId.getTwoUserId()!=userId){ // return AjaxResult.error("您不是二级审核人员,无法审核"); // } // if (steategyPassDto.getPass()==1){ // if (byId.getAuditStatus()==1){ // // byId.setAuditStatus(2); // byId.setFirstRemark(steategyPassDto.getRemark()); // // }else if (byId.getAuditStatus()==2){ // byId.setAuditStatus(3); // byId.setTwoRemark(steategyPassDto.getRemark()); // // } // }else { // byId.setAuditStatus(4); // } // // // // // // // } /** * 小程序远程调用 根据会员折扣、预付金额 计算服务费 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TApplyChargingPileController.java
@@ -74,6 +74,18 @@ applyChargingPileService.updateById(byId); return AjaxResult.success(); } @ApiOperation(tags = {"后台-申请表单-申请建桩"},value = "删除") @DeleteMapping(value = "/remark") public AjaxResult remark(String ids) { String[] split = ids.split(","); for (String s : split) { applyChargingPileService.removeById(s); } return AjaxResult.success(); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -83,7 +83,7 @@ @ResponseBody @GetMapping("/pageChargingPileList") @ApiOperation(value = "获取充电桩列表数据", tags = {"管理后台-充电桩信息"}) public AjaxResult<PageInfo<PageChargingPileListDTO>> pageChargingPileList(@RequestBody PageChargingPileList page){ public AjaxResult<PageInfo<PageChargingPileListDTO>> pageChargingPileList(PageChargingPileList page){ PageInfo<PageChargingPileListDTO> list = chargingPileService.pageChargingPileList(page); return AjaxResult.success(list); } ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/TChargingPileMapper.java
@@ -39,7 +39,7 @@ * @param id * @return */ TChargingPile getChargingPile(Integer id); TChargingPile getChargingPile(@Param("id") Integer id); /** * 获取站点下充电桩及充电枪列表 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java
@@ -328,7 +328,6 @@ Partner partner = this.getById(partnerId); GetPermissionConfigurationDTO dto = new GetPermissionConfigurationDTO(); dto.setPermissionRemarks(partner.getPermissionRemarks()); Map<String, Object> menu = new HashMap<>(); List<TPartnerSite> list = partnerSiteService.list(new LambdaQueryWrapper<TPartnerSite>() .eq(TPartnerSite::getPartnerId, partnerId) .eq(TPartnerSite::getSiteId, siteId)); @@ -337,7 +336,9 @@ .eq(TSiteMenu::getParentId, 0) .eq(TSiteMenu::getVisible, 0) .eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum)); List<Map<String, Object>> list1 = new ArrayList<>(); for (TSiteMenu tSiteMenu : tSiteMenus) { Map<String, Object> menu = new HashMap<>(); menu.put("id", tSiteMenu.getMenuId()); menu.put("name", tSiteMenu.getMenuName()); menu.put("path", tSiteMenu.getPath()); @@ -347,18 +348,21 @@ .eq(TSiteMenu::getParentId, tSiteMenu.getMenuId()) .eq(TSiteMenu::getVisible, 0) .eq(TSiteMenu::getStatus, 0).orderByAsc(TSiteMenu::getOrderNum)); Map<String, Object> child = new HashMap<>(); List<Map<String, Object>> list2 = new ArrayList<>(); for (TSiteMenu siteMenu : tSiteMenus1) { Map<String, Object> child = new HashMap<>(); child.put("id", siteMenu.getMenuId()); child.put("name", siteMenu.getMenuName()); child.put("path", siteMenu.getPath()); child.put("type", siteMenu.getMenuType()); child.put("selected", collect.contains(siteMenu.getMenuId())); list2.add(child); } menu.put("selected", child.keySet().size() > 0 ? true : false); menu.put("child", child); menu.put("selected", list2.size() > 0 ? true : false); menu.put("child", list2); list1.add(menu); } dto.setMenu(menu); dto.setMenu(list1); return dto; } ruoyi-service/ruoyi-chargingPile/src/main/resources/logback.xml
@@ -58,11 +58,11 @@ </appender> <!-- 系统模块日志级别控制 --> <logger name="com.ruoyi" level="info" /> <logger name="com.ruoyi" level="debug" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <logger name="org.springframework" level="debug" /> <root level="info"> <root level="debug"> <appender-ref ref="console" /> </root> ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
@@ -52,6 +52,7 @@ a.id, a.code, a.name, a.partner_id as partnerId, b.name as partnerName, a.site_type as siteType, a.business_category as businessCategory, ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingGunMapper.xml
@@ -34,29 +34,29 @@ </sql> <select id="pageList" resultType="com.ruoyi.chargingPile.api.vo.TChargingGunVO"> SELECT tas.id, tas.code, tas.site_id, tas.partner_id, tas.charging_pile_id, tas.`name`, tas.`type`, tas.status, tas.charge_mode, tas.accounting_strategy_id, tas.upper_rated_voltage, tas.lower_limit_of_rated_voltage, tas.rated_current, tas.rated_power, tas.parking_number, tas.parking_status, tas.parking_lock_state, tas.national_standard, tas.remark, tas.create_time, tas.del_flag,tcg.name AS strategyName tcg.id, tcg.code, tcg.site_id, tcg.partner_id, tcg.charging_pile_id, tcg.`name`, tcg.`type`, tcg.status, tcg.charge_mode, tcg.accounting_strategy_id, tcg.upper_rated_voltage, tcg.lower_limit_of_rated_voltage, tcg.rated_current, tcg.rated_power, tcg.parking_number, tcg.parking_status, tcg.parking_lock_state, tcg.national_standard, tcg.remark, tcg.create_time, tcg.del_flag,tas.name AS strategyName FROM t_charging_gun tcg LEFT JOIN t_accounting_strategy tas ON tas.id = tcg.accounting_strategy_id <where> <if test="query.siteId != null"> AND tas.site_id = #{query.siteId} AND tcg.site_id = #{query.siteId} </if> <if test="query.chargingPileId != null"> AND tas.charging_pile_id = #{query.chargingPileId} AND tcg.charging_pile_id = #{query.chargingPileId} </if> <if test="query.name != null and query.name != ''"> AND tas.`name` LIKE concat('%',#{query.name},'%') AND tcg.`name` LIKE concat('%',#{query.name},'%') </if> <if test="query.type != null"> AND tas.`type` = #{query.type} AND tcg.`type` = #{query.type} </if> <if test="query.status != null"> AND tas.status = #{query.status} AND tcg.status = #{query.status} </if> <if test="query.chargeMode != null"> AND tas.chargeMode = #{query.chargeMode} AND tcg.chargeMode = #{query.chargeMode} </if> <if test="null != siteIds"> and tcg.site_id in @@ -64,9 +64,9 @@ #{item} </foreach> </if> AND tas.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND tcg.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> ORDER BY tas.create_time DESC ORDER BY tcg.create_time DESC </select> </mapper> ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/TChargingPileMapper.xml
@@ -31,22 +31,22 @@ <select id="pageChargingPileList" resultType="com.ruoyi.chargingPile.api.dto.PageChargingPileListDTO"> select id, code, name, number, type, a.id, a.code, a.name, a.number, a.type, a.site_id as siteId, b.name as siteName, a.partner_id as partnerId, c.name as partnerName, a.manufacturer, a.equipment_type as equipmentType, a.ratedPower a.rated_power as ratedPower from t_charging_pile a left join t_site b on (a.site_id = b.id) left join t_partner c on (a.partner_id = c.id) where del_flag = 0 where a.del_flag = 0 <if test="null != item.siteId"> and a.site_id = #{item.siteId} </if> @@ -74,6 +74,7 @@ from t_charging_pile a left join t_site b on (a.site_id = b.id) left join t_partner c on (a.partner_id = c.id) where a.id = #{id} </select> <select id="getChargingGunList" resultType="com.ruoyi.chargingPile.api.vo.TChargingPileVO"> select id,code, `name`, `number` from t_charging_pile ruoyi-service/ruoyi-integration/pom.xml
@@ -127,12 +127,30 @@ <version>4.7.1</version> </dependency> <!--spirngboot集成mongodb--> <!--mongodb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <!--华为云--> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-core</artifactId> <version>[3.0.40-rc, 3.2.0)</version> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-iotda</artifactId> <version>[3.0.40-rc, 3.2.0)</version> </dependency> <dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-bundle</artifactId> <version>3.1.87</version> </dependency> </dependencies> <build> ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/builder/IotBuilder.java
New file @@ -0,0 +1,57 @@ package com.ruoyi.integration.iotda.builder; import com.huaweicloud.sdk.core.auth.AbstractCredentials; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.region.Region; import com.huaweicloud.sdk.iam.v3.IamClient; import com.huaweicloud.sdk.iam.v3.region.IamRegion; import com.huaweicloud.sdk.iotda.v5.IoTDAClient; import com.ruoyi.integration.iotda.config.IotDAConfig; import com.ruoyi.integration.iotda.constant.IotConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Slf4j @Component public class IotBuilder { @Autowired private IotDAConfig config; /** * iot build * * @return */ public IoTDAClient buildIot() { ICredential auth = new BasicCredentials() // 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate"; .withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE) // Used in derivative ak/sk authentication scenarios .withAk(config.getAk()) .withSk(config.getSk()); return IoTDAClient.newBuilder() .withCredential(auth) // 标准版/企业版:需自行创建Region对象,基础版:请使用IoTDARegion的region对象,如"withRegion(IoTDARegion.CN_NORTH_4)" .withRegion(new Region("cn-north-4", IotConstant.URL)) .build(); } /** * iam build * * @return */ public IamClient buildIam() { ICredential auth = new BasicCredentials() // 标准版/企业版需要使用衍生算法,基础版请删除配置"withDerivedPredicate"; .withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE) // Used in derivative ak/sk authentication scenarios .withAk(config.getAk()) .withSk(config.getSk()); return IamClient.newBuilder() .withCredential(auth) .withRegion(IamRegion.valueOf("cn-north-4")) .build(); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotAccountConfig.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.integration.iotda.config; import lombok.Data; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @ToString @Component @ConfigurationProperties(prefix = "iot.account.conf") public class IotAccountConfig { /** * hostAccount配置 */ private String hostAccount; /** * iamAccount配置 */ private String iamAccount; /** * iamPassword配置 */ private String iamPassword; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/config/IotDAConfig.java
New file @@ -0,0 +1,35 @@ package com.ruoyi.integration.iotda.config; import lombok.Data; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @ToString @Component @ConfigurationProperties(prefix = "iot.conf") public class IotDAConfig { /** * ak配置 */ private String ak; /** * sk配置 */ private String sk; /** * endpoint配置 938d8d39e2.iotda.cn-north-4.myhuaweicloud.com */ private String endpoint; /** * project_id配置 0cc59978c61e4b4da24e8c3d02937b45 */ private String projectId; /** * Instance-Id配置 c60f266a-57a2-460c-a24e-eabda84602eb */ private String instanceId; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/IotConstant.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.integration.iotda.constant; public class IotConstant { /** * 华为云iot token */ public static final String IOT_TOKEN = "iot_token"; /** * 模式 */ public static final String PASSWORD = "password"; /** * URL */ public static final String URL = "https://iotda.cn-north-4.myhuaweicloud.com"; /** * 创建产品 */ public static final String CREATE_PRODUCT = URL+"/v5/iot/{project_id}/products"; /** * 创建产品 */ public static final String DELETE_PRODUCT = URL+"/v5/iot/{project_id}/products/{product_id}"; } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java
New file @@ -0,0 +1,261 @@ package com.ruoyi.integration.iotda.utils.api; import com.huaweicloud.sdk.core.auth.AbstractCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.iotda.v5.IoTDAClient; import com.huaweicloud.sdk.iotda.v5.model.*; import com.ruoyi.common.core.utils.CodeGenerateUtils; import com.ruoyi.common.core.utils.uuid.UUID; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotAccountConfig; import com.ruoyi.integration.iotda.config.IotDAConfig; import com.ruoyi.integration.iotda.constant.IotConstant; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; /** * iot接口调用工具类 */ @Slf4j @Component public class IotInterfaceUtil { private static final String dataFormat = "json"; private static final String protocolType = "HTTPS"; private static final String deviceType = "充电桩"; private static final String serviceType = "直流充电"; @Autowired private IotBuilder iotBuilder; @Autowired private IotDAConfig iotDAConfig; private String decodeUrl(String url) { return MessageFormat.format(url, iotDAConfig.getProjectId()); } public static void main(String[] args) { } /** * 创建产品 * @param productId 产品ID,使用UUID.randomUUID().toString()生成 需替换特殊字符 "-" 为空 * @param productName 产品名称 * @return CreateProductResponse */ public CreateProductResponse createProductSolution(String productId,String productName) { CreateProductRequest request = new CreateProductRequest(); AddProduct body = new AddProduct(); List<ServiceCapability> listbodyServiceCapabilities = new ArrayList<>(); listbodyServiceCapabilities.add( new ServiceCapability() .withServiceId(CodeGenerateUtils.generateVolumeSn()) .withServiceType(serviceType) ); body.withServiceCapabilities(listbodyServiceCapabilities); body.withDataFormat(dataFormat); body.withProtocolType(protocolType); body.withDeviceType(deviceType); body.withName(productName); body.withProductId(productId); request.withBody(body); request.withInstanceId(iotDAConfig.getInstanceId()); try { CreateProductResponse response = iotBuilder.buildIot().createProduct(request); log.info("创建产品:{}",response.toString()); return response; } catch (ConnectionException | RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); log.info(String.valueOf(e.getHttpStatusCode())); log.info(e.getRequestId()); log.info(e.getErrorCode()); log.info(e.getErrorMsg()); } return null; } /** * 删除产品 * @param productId 产品ID,使用UUID.randomUUID().toString()生成 需替换特殊字符 "-" 为空 * @return DeleteProductResponse */ public DeleteProductResponse deleteProductRequest(String productId) { DeleteProductRequest request = new DeleteProductRequest(); request.withProductId(productId); request.withInstanceId(iotDAConfig.getInstanceId()); try { DeleteProductResponse response = iotBuilder.buildIot().deleteProduct(request); log.info("删除产品:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 创建设备 * @param productId 产品ID * @param nodeId 设备标识码 通常使用IMEI、MAC地址或Serial No作为node_id * @param deviceId 设备ID 使用CodeGenerateUtils.generateVolumeSn() * @param deviceName 设备名称 * @param description 设备描述 * @return AddDeviceResponse */ public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceId,String deviceName,String description) { AddDeviceRequest request = new AddDeviceRequest(); AddDevice body = new AddDevice(); body.withDeviceId(deviceId); body.withNodeId(nodeId); body.withDeviceName(deviceName); body.withProductId(productId); body.withDescription(description); request.withBody(body); try { AddDeviceResponse response = iotBuilder.buildIot().addDevice(request); log.info("创建设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 修改设备 * @param deviceId 设备ID 使用已有设备编号 * @param deviceName 设备名称 * @param description 设备描述 * @return UpdateDeviceResponse */ public UpdateDeviceResponse updateDeviceRequest(String deviceId,String deviceName,String description) { UpdateDeviceRequest request = new UpdateDeviceRequest(); request.withDeviceId(deviceId); UpdateDevice body = new UpdateDevice(); body.withDescription(description); body.withDeviceName(deviceName); request.withBody(body); try { UpdateDeviceResponse response = iotBuilder.buildIot().updateDevice(request); log.info("修改设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 冻结设备 * @param deviceId 设备ID 使用已有设备编号 * @return FreezeDeviceResponse */ public FreezeDeviceResponse freezeDeviceRequest(String deviceId) { FreezeDeviceRequest request = new FreezeDeviceRequest(); request.withDeviceId(deviceId); try { FreezeDeviceResponse response = iotBuilder.buildIot().freezeDevice(request); log.info("冻结设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 解冻设备 * @param deviceId 设备ID 使用已有设备编号 * @return UnfreezeDeviceResponse */ public UnfreezeDeviceResponse unfreezeDeviceRequest(String deviceId) { UnfreezeDeviceRequest request = new UnfreezeDeviceRequest(); request.withDeviceId(deviceId); try { UnfreezeDeviceResponse response = iotBuilder.buildIot().unfreezeDevice(request); log.info("解冻设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } /** * 删除设备 * @param deviceId 设备ID 使用已有设备编号 * @return DeleteDeviceResponse */ public DeleteDeviceResponse deleteDeviceRequest(String deviceId) { DeleteDeviceRequest request = new DeleteDeviceRequest(); request.withDeviceId(deviceId); try { DeleteDeviceResponse response = iotBuilder.buildIot().deleteDevice(request); log.info("删除设备:{}",response.toString()); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.integration.iotda.utils.listener; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** * iotda消息监听 */ @Slf4j @Component public class IotMessageListener { } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/produce/IotMessageProduce.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.integration.iotda.utils.produce; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; /** * iotda消息发送 */ @Slf4j @Component public class IotMessageProduce { } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/time/UtcToSeconds.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.integration.iotda.utils.time; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; public class UtcToSeconds { public static long convertToSeconds(String utcTimeString) { Instant instant = Instant.parse(utcTimeString); long seconds = instant.atOffset(ZoneOffset.UTC).toEpochSecond(); return seconds; } public static void main(String[] args) { String utcTimeString = "2023-04-01T12:00:00Z"; long seconds = convertToSeconds(utcTimeString); System.out.println("Seconds since epoch: " + seconds); } } ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/token/IotTokenUtil.java
New file @@ -0,0 +1,72 @@ package com.ruoyi.integration.iotda.utils.token; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.iam.v3.model.*; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.integration.iotda.constant.IotConstant; import com.ruoyi.integration.iotda.builder.IotBuilder; import com.ruoyi.integration.iotda.config.IotAccountConfig; import com.ruoyi.integration.iotda.utils.time.UtcToSeconds; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @Slf4j @Component public class IotTokenUtil { @Autowired private IotBuilder iotBuilder; @Autowired private IotAccountConfig accountConfig; @Autowired private RedisService redisService; /** * 获取token * @return */ public KeystoneCreateUserTokenByPasswordResponse getToken() { KeystoneCreateUserTokenByPasswordRequest request = new KeystoneCreateUserTokenByPasswordRequest(); KeystoneCreateUserTokenByPasswordRequestBody body = new KeystoneCreateUserTokenByPasswordRequestBody(); PwdPasswordUserDomain domainUser = new PwdPasswordUserDomain(); domainUser.withName(accountConfig.getHostAccount()); PwdPasswordUser userPassword = new PwdPasswordUser(); userPassword.withDomain(domainUser) .withName(accountConfig.getIamAccount()) .withPassword(accountConfig.getIamPassword()); PwdPassword passwordIdentity = new PwdPassword(); passwordIdentity.withUser(userPassword); List<PwdIdentity.MethodsEnum> listIdentityMethods = new ArrayList<>(); listIdentityMethods.add(PwdIdentity.MethodsEnum.fromValue(IotConstant.PASSWORD)); PwdIdentity identityAuth = new PwdIdentity(); identityAuth.withMethods(listIdentityMethods) .withPassword(passwordIdentity); PwdAuth authbody = new PwdAuth(); authbody.withIdentity(identityAuth); body.withAuth(authbody); request.withBody(body); try { KeystoneCreateUserTokenByPasswordResponse response = iotBuilder.buildIam().keystoneCreateUserTokenByPassword(request); redisService.setCacheObject(IotConstant.IOT_TOKEN, response.getXSubjectToken(), UtcToSeconds.convertToSeconds(response.getToken().getExpiresAt()), TimeUnit.SECONDS); return response; } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { e.printStackTrace(); } catch (ServiceResponseException e) { e.printStackTrace(); System.out.println(e.getHttpStatusCode()); System.out.println(e.getRequestId()); System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } return null; } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEnterpriseUserApplicationController.java
@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.dto.EnterpriseQuery; import com.ruoyi.account.api.feignClient.AppUserClient; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.TEnterpriseUserApplication; import com.ruoyi.other.query.PassDto; import com.ruoyi.other.service.TEnterpriseUserApplicationService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -45,7 +47,7 @@ * 添加计费策略管理 */ @Log(title = "添加集团用户申请", businessType = BusinessType.INSERT) @ApiOperation(tags = {"小程序-集团用户","后台-申请表单-集团用户"},value = "添加集团用户申请") @ApiOperation(tags = {"小程序-集团用户"},value = "添加集团用户申请") @PostMapping(value = "/add") public AjaxResult<Boolean> add(@Validated @RequestBody TEnterpriseUserApplication dto) { // 用户id @@ -53,31 +55,40 @@ return AjaxResult.ok(enterpriseUserApplicationService.save(dto)); } @Log(title = "添加集团用户申请", businessType = BusinessType.INSERT) @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "后台添加集团用户申请") @PostMapping(value = "/back/add") public AjaxResult<Boolean> backAdd(@Validated @RequestBody TEnterpriseUserApplication dto) { // 用户id return AjaxResult.ok(enterpriseUserApplicationService.save(dto)); } @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "集团用户列表") @PostMapping(value = "/page") public AjaxResult<Page<TEnterpriseUserApplication>> page(EnterpriseQuery enterpriseQuery) { public R<Page<TEnterpriseUserApplication>> page(EnterpriseQuery enterpriseQuery) { // 用户id if (enterpriseQuery.getPhone()!=null) { List<Long> userIds = appUserClient.getUserIdsByPhone(enterpriseQuery.getPhone()).getData(); if (userIds.isEmpty()){ return AjaxResult.warn("未查询到用户"); return R.ok(); } Page<TEnterpriseUserApplication> page = enterpriseUserApplicationService.lambdaQuery().in(TEnterpriseUserApplication::getAppUserId, userIds).page(Page.of(enterpriseQuery.getPageCurr(), enterpriseQuery.getPageSize())); return AjaxResult.ok(page); return R.ok(page); }else { Page<TEnterpriseUserApplication> page = enterpriseUserApplicationService.lambdaQuery().page(Page.of(enterpriseQuery.getPageCurr(), enterpriseQuery.getPageSize())); return AjaxResult.ok(page); return R.ok(page); } } @ApiOperation(tags = {"后台-申请表单-集团用户"},value = "备注") @GetMapping(value = "/remark") public AjaxResult pass(Integer id,String remark) { @PostMapping(value = "/remark") public AjaxResult pass(@RequestBody PassDto passDto) { // 用户id TEnterpriseUserApplication byId = enterpriseUserApplicationService.getById(id); byId.setRemark(remark); TEnterpriseUserApplication byId = enterpriseUserApplicationService.getById(passDto.getId()); byId.setRemark(passDto.getRemark()); enterpriseUserApplicationService.updateById(byId); return AjaxResult.success(); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/query/PassDto.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.other.query; import lombok.Data; /** * @author zhibing.pu * @date 2024/8/20 18:25 */ @Data public class PassDto { Integer id; String remark; } ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TAdvertisingMapper.xml
@@ -24,16 +24,16 @@ <select id="pageList" resultType="com.ruoyi.other.api.domain.TAdvertising"> select * from t_advertising <where> <if test="req.name != null and req.name != ''"> AND `name` LIKE concat('%',#{req.name}, '%') <if test="req.title != null and req.title != ''"> AND `name` LIKE concat('%',#{req.title}, '%') </if> <if test="req.state == 1"> <if test="req.startState == 1"> AND start_time >= NOW() </if> <if test="req.state == 2"> <if test="req.startState == 2"> AND start_time <= NOW() AND end_time >= NOW() </if> <if test="req.state == 3"> <if test="req.startState == 3"> AND end_time <= NOW() </if> AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} ruoyi-service/ruoyi-other/src/main/resources/mybatis-config.xml
@@ -10,7 +10,7 @@ <setting name="cacheEnabled" value="true"/> <!-- 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。默认 false --> <!-- <setting name="lazyLoadingEnabled" value="true"/> --> <setting name="mapUnderscoreToCamelCase" value="false"/><!--是否将map下划线方式转为驼峰式命名--> <setting name="mapUnderscoreToCamelCase" value="true"/><!--是否将map下划线方式转为驼峰式命名--> <!-- 当开启时,任何方法的调用都会加载该对象的所有属性。默认 false,可通过select标签的 fetchType来覆盖--> <!-- <setting name="aggressiveLazyLoading" value="false"/>--> <!-- Mybatis 创建具有延迟加载能力的对象所用到的代理工具,默认JAVASSIST -->