Merge remote-tracking branch 'origin/master'
# Conflicts:
# ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/UploadRealTimeMonitoringDataServiceImpl.java
| | |
| | | @ApiModelProperty(value = "类型(1=开始,2=结束)") |
| | | private Integer type; |
| | | @ApiModelProperty(value = "站点ids 选择全部 不传") |
| | | private List<Integer> siteIds; |
| | | private Integer siteIds; |
| | | @ApiModelProperty(value = "合作商id ") |
| | | private Integer partnerId; |
| | | @ApiModelProperty(value = "开始时间2020-01-01 00:00:00") |
| | |
| | | @ApiModelProperty(value = "结束时间2021-01-01 23:59:59") |
| | | private String endTime; |
| | | |
| | | |
| | | } |
| | |
| | | import com.ruoyi.account.mapper.TAppUserMapper; |
| | | import com.ruoyi.account.service.TAppUserService; |
| | | import com.ruoyi.account.service.TInviteUserService; |
| | | import com.ruoyi.account.util.RptUtils; |
| | | import com.ruoyi.account.wx.model.WeixinProperties; |
| | | import com.ruoyi.account.wx.pojo.AppletUserDecodeData; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | |
| | | import com.ruoyi.system.api.model.LoginUserApplet; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import java.util.HashMap; |
| | |
| | | break; |
| | | } |
| | | } |
| | | appUser.setAvatar(appletUserDecodeData.getAvatarUrl()); |
| | | |
| | | appUser.setAvatar(StringUtils.hasLength(appletUserDecodeData.getAvatarUrl())?appletUserDecodeData.getAvatarUrl():"http://221.182.45.100:8090/2024-10-26/logo.png"); |
| | | appUser.setName(StringUtils.hasLength(appletUserDecodeData.getNickName())?appletUserDecodeData.getNickName():RptUtils.around(appletUserDecodeData.getPhoneNumber(),3,4)); |
| | | appUser.setCity(appletUserDecodeData.getCity()); |
| | | appUser.setName(appletUserDecodeData.getNickName()); |
| | | appUser.setProvince(appletUserDecodeData.getProvince()); |
| | | appUser.setWxOpenid(appletUserDecodeData.getOpenId()); |
| | | this.saveOrUpdate(appUser); |
| | |
| | | } |
| | | } |
| | | appUser.setAliOpenid(response.getOpenId()); |
| | | appUser.setAvatar("http://221.182.45.100:8090/2024-10-26/logo.png"); |
| | | appUser.setName(RptUtils.around(phone,3,4)); |
| | | this.saveOrUpdate(appUser); |
| | | if(Objects.nonNull(inviteUserId)){ |
| | | inviteUserService.saveInviteUser(appUser.getId(), inviteUserId); |
| | |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京B\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京C\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京D\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京E\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京F\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京G\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京H\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京J\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京K\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京L\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京M\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"京Y\",\n" + |
| | | " \"city\": \"北京\",\n" + |
| | | " \"province\": \"北京\",\n" + |
| | | " \"Pcode\": \"BJ\",\n" + |
| | | " \"AreaCode\": \"110110\"\n" + |
| | | " \"AreaCode\": \"110100\"\n" + |
| | | " },\n" + |
| | | " {\n" + |
| | | " \"Hp\": \"豫A\",\n" + |
New file |
| | |
| | | package com.ruoyi.account.util; |
| | | |
| | | /** |
| | | * 脱敏工具类 |
| | | */ |
| | | public class RptUtils { |
| | | private static final String SYMBOL = "*"; |
| | | |
| | | /** |
| | | * 脱敏 |
| | | * @param str 待脱敏字符串 |
| | | * @param left 左边保留多少位 |
| | | * @param right 右边保留多少位 |
| | | * @return 脱敏结果,除左右外,其余字符将被替换为* |
| | | */ |
| | | public static String around(String str, int left, int right){ |
| | | if (str == null || (str.length() < left + right +1)){ |
| | | return str; |
| | | } |
| | | String regex = String.format("(?<=\\w{%d})\\w(?=\\w{%d})", left, right); |
| | | return str.replaceAll(regex, SYMBOL); |
| | | } |
| | | |
| | | /** |
| | | * 正则表达式实现金额数据脱敏 |
| | | * @param money |
| | | * @return |
| | | */ |
| | | public static String getMoney(String money){ |
| | | //保留0个数到0个结束 |
| | | return around(money,0,0); |
| | | } |
| | | } |
| | |
| | | import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; |
| | | import com.ruoyi.chargingPile.service.*; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | |
| | | Site byId = siteService.getById(one.getSiteId()); |
| | | TAccountingStrategy byId1 = accountingStrategyService.getById(byId.getAccountingStrategyId()); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list(); |
| | | list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); |
| | | for (TAccountingStrategyDetail tAccountingStrategyDetail : list) { |
| | | // 当前时间属于那个阶段 取哪个阶段的电价 |
| | | if(LocalTime.now().isAfter(LocalTime.parse(tAccountingStrategyDetail.getStartTime())) && LocalTime.now().isBefore(LocalTime.parse(tAccountingStrategyDetail.getEndTime()))){ |
| | | if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 |
| | | && DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){ |
| | | siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); |
| | | if(null != byId1.getDiscount()){ |
| | | siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); |
| | |
| | | Site byId = siteService.getById(one.getSiteId()); |
| | | TAccountingStrategy byId1 = accountingStrategyService.getById(byId.getAccountingStrategyId()); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.lambdaQuery().eq(TAccountingStrategyDetail::getAccountingStrategyId, byId1.getId()).list(); |
| | | list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); |
| | | for (TAccountingStrategyDetail tAccountingStrategyDetail : list) { |
| | | // 当前时间属于那个阶段 取哪个阶段的电价 |
| | | if(LocalTime.now().isAfter(LocalTime.parse(tAccountingStrategyDetail.getStartTime())) && LocalTime.now().isBefore(LocalTime.parse(tAccountingStrategyDetail.getEndTime()))){ |
| | | if(DateUtils.string2LocalTime(tAccountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 |
| | | && DateUtils.string2LocalTime(tAccountingStrategyDetail.getEndTime() + ("23:59:59".equals(tAccountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){ |
| | | siteInfoVO.setElectrovalence(tAccountingStrategyDetail.getElectrovalence().add(tAccountingStrategyDetail.getServiceCharge()).setScale(4, BigDecimal.ROUND_HALF_UP)); |
| | | if(null != byId1.getDiscount()){ |
| | | siteInfoVO.setVipElectrovalence((tAccountingStrategyDetail.getServiceCharge().multiply(byId1.getDiscount()).add(tAccountingStrategyDetail.getElectrovalence())).setScale(4, BigDecimal.ROUND_HALF_UP)); |
| | |
| | | import com.ruoyi.chargingPile.service.*; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.utils.DateUtils; |
| | | 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 java.time.LocalTime; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | |
| | | public R<TAccountingStrategyDetail> getDetailBySiteId(@RequestParam("siteId") Integer siteId){ |
| | | Site site = siteService.getById(siteId); |
| | | TAccountingStrategy accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); |
| | | TAccountingStrategyDetail one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) |
| | | .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); |
| | | return R.ok(one); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); |
| | | list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); |
| | | for (TAccountingStrategyDetail accountingStrategyDetail : list) { |
| | | if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 |
| | | && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){ |
| | | return R.ok(accountingStrategyDetail); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | /** |
| | | * 通过桩id查询当前时段使用的策略明细 |
| | |
| | | .eq(TChargingGun::getChargingPileId, chargingPile.getId()).eq(TChargingGun::getDelFlag, 0) |
| | | .last("LIMIT 1")); |
| | | TAccountingStrategy accountingStrategy = accountingStrategyService.getById(chargingGun.getAccountingStrategyId()); |
| | | TAccountingStrategyDetail one; |
| | | TAccountingStrategyDetail one = null; |
| | | if(Objects.nonNull(accountingStrategy)){ |
| | | one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) |
| | | .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); |
| | | list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); |
| | | for (TAccountingStrategyDetail accountingStrategyDetail : list) { |
| | | if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 |
| | | && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){ |
| | | return R.ok(accountingStrategyDetail); |
| | | } |
| | | } |
| | | }else { |
| | | Site site = siteService.getById(chargingPile.getSiteId()); |
| | | accountingStrategy = accountingStrategyService.getById(site.getAccountingStrategyId()); |
| | | one = accountingStrategyDetailService.getOne(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId()) |
| | | .last(" and DATE_FORMAT(now(), '%H:%i') between start_time and end_time")); |
| | | List<TAccountingStrategyDetail> list = accountingStrategyDetailService.list(Wrappers.<TAccountingStrategyDetail>lambdaQuery() |
| | | .eq(TAccountingStrategyDetail::getAccountingStrategyId, accountingStrategy.getId())); |
| | | list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); |
| | | for (TAccountingStrategyDetail accountingStrategyDetail : list) { |
| | | if(DateUtils.string2LocalTime(accountingStrategyDetail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 |
| | | && DateUtils.string2LocalTime(accountingStrategyDetail.getEndTime() + ("23:59:59".equals(accountingStrategyDetail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0){ |
| | | return R.ok(accountingStrategyDetail); |
| | | } |
| | | return R.ok(one); |
| | | } |
| | | } |
| | | return R.ok(); |
| | | } |
| | | /** |
| | | * 校验充电桩计费模版是否准确 |
| | |
| | | </appender> |
| | | |
| | | <!-- 系统模块日志级别控制 --> |
| | | <logger name="com.ruoyi" level="debug" /> |
| | | <logger name="com.ruoyi" level="info" /> |
| | | <!-- Spring日志级别控制 --> |
| | | <logger name="org.springframework" level="debug" /> |
| | | |
| | | <root level="debug"> |
| | | <root level="info"> |
| | | <appender-ref ref="console" /> |
| | | </root> |
| | | |
| | |
| | | query.addCriteria(Criteria.where("transaction_serial_number").regex(mongoChargingOrderQuery.getCode(), "i")); // "i" 表示不区分大小写 |
| | | } |
| | | if (mongoChargingOrderQuery.getOrderType() !=null){ |
| | | query.addCriteria(Criteria.where("order_type").is(mongoChargingOrderQuery.getOrderType())); |
| | | query.addCriteria(Criteria.where("orderType").is(mongoChargingOrderQuery.getOrderType())); |
| | | } |
| | | if (mongoChargingOrderQuery.getSiteId() != null){ |
| | | query.addCriteria(Criteria.where("site_id").is(mongoChargingOrderQuery.getSiteId())); |
| | | query.addCriteria(Criteria.where("siteId").is(mongoChargingOrderQuery.getSiteId())); |
| | | } |
| | | if (mongoChargingOrderQuery.getChargingPileCode() != null && !mongoChargingOrderQuery.getChargingPileCode().isEmpty()) { |
| | | query.addCriteria(Criteria.where("charging_pile_code").is(mongoChargingOrderQuery.getChargingPileCode())); |
| | |
| | | |
| | | @Override |
| | | public PageInfo<TSettlementConfirm> settlementList(SettlementListQuery dto) { |
| | | if (StringUtils.hasLength(dto.getStartTime())){ |
| | | dto.setType(1); |
| | | String[] split = dto.getStartTime().split(" - "); |
| | | dto.setStartTime(split[0]); |
| | | dto.setEndTime(split[1]); |
| | | } |
| | | if (StringUtils.hasLength(dto.getEndTime())){ |
| | | dto.setType(2); |
| | | String[] split = dto.getStartTime().split(" - "); |
| | | dto.setStartTime(split[0]); |
| | | dto.setEndTime(split[1]); |
| | | } |
| | | PageInfo<TSettlementConfirm> pageInfo = new PageInfo<>(dto.getPageCurr(),dto.getPageSize()); |
| | | List<TSettlementConfirm> list = tSettlementConfirmMapper.settlementList(pageInfo,dto); |
| | | for (TSettlementConfirm tSettlementConfirm : list) { |
| | |
| | | <!-- 系统模块日志级别控制 --> |
| | | <logger name="com.ruoyi" level="info" /> |
| | | <!-- Spring日志级别控制 --> |
| | | <logger name="org.springframework" level="debug" /> |
| | | <logger name="org.springframework" level="warn" /> |
| | | |
| | | <root level="debug"> |
| | | <root level="info"> |
| | | <appender-ref ref="console" /> |
| | | </root> |
| | | |
| | |
| | | select t1.* from |
| | | t_settlement_confirm t1 |
| | | where 1=1 |
| | | <if test="req.type != null "> |
| | | and t1.type = #{req.type} |
| | | </if> |
| | | <if test="req.partnerId != null "> |
| | | and t1.partnerId = #{req.partnerId} |
| | | and t1.partner_id = #{req.partnerId} |
| | | </if> |
| | | <if test="req.siteIds != null "> |
| | | and t1.site_id = #{req.siteIds} |
| | | </if> |
| | | <if test="req.type == 1 "> |
| | | <if test="req.startTime != null and req.startTime!=''"> |
| | | and (t1.start_time between #{req.startTime} and #{req.endTime} |
| | | </if> |
| | | </if> |
| | | <if test="req.siteIds != null and req.siteIds.size() > 0"> |
| | | AND t1.site_id IN |
| | | <foreach collection="req.siteIds" item="siteId" open="(" separator="," close=")"> |
| | | #{siteId} |
| | | </foreach> |
| | | </if> |
| | | <if test="req.type == 2 "> |
| | | <if test="req.startTime != null and req.startTime!=''"> |