diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java index 60535c5c8..8615000ee 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/JumpController.java @@ -72,4 +72,14 @@ public class JumpController extends BaseController { return response; } + /** + * 更新接口 + * http://localhost:8080/app-xcx-h5/pile/updateOrderDetail + */ + @GetMapping("updateOrderDetail") + public RestApiResponse updateOrderDetail() { + orderBasicInfoService.updateElecAmount(); + return new RestApiResponse<>(); + } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java index 0b2a5023f..962e33ea6 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PayController.java @@ -142,7 +142,7 @@ public class PayController extends BaseController { public RestApiResponse getPayMode(HttpServletRequest request, @RequestBody GetPayModeDTO dto) { RestApiResponse response; try { - // dto.setMemberId(getMemberIdByAuthorization(request)); + dto.setMemberId(getMemberIdByAuthorization(request)); List list = orderService.getPayMode(dto); response = new RestApiResponse<>(ImmutableMap.of("list", list)); } catch (BusinessException e) { diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PileController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PileController.java index 695d60b38..ea0f6cc8d 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PileController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/PileController.java @@ -11,13 +11,13 @@ import com.jsowell.pile.dto.QueryConnectorListDTO; import com.jsowell.pile.dto.QueryStationDTO; import com.jsowell.pile.service.IPileConnectorInfoService; import com.jsowell.pile.service.IPileStationInfoService; -import com.jsowell.pile.vo.base.StationInfoVO; -import com.jsowell.pile.vo.uniapp.PersonalPileInfoVO; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; -import java.util.List; /** * 充电桩相关接口 @@ -89,6 +89,27 @@ public class PileController extends BaseController { return response; } + /** + * 根据充电站id查询枪口列表 + * @param request + * @param dto + * @return + */ + @PostMapping("/selectStationConnectorList") + public RestApiResponse selectStationConnectorList(HttpServletRequest request, @RequestBody QueryConnectorListDTO dto) { + logger.info("查询充电枪口列表 params:{}", JSONObject.toJSONString(dto)); + RestApiResponse response = null; + try { + PageResponse pageResponse = pileConnectorInfoService.selectStationConnectorList(dto); + response = new RestApiResponse<>(pageResponse); + } catch (Exception e) { + logger.error("查询充电枪口列表异常", e); + response = new RestApiResponse<>(ReturnCodeEnum.CODE_GET_CONNECTOR_INFO_BY_STATION_ID_ERROR); + } + logger.info("查询充电枪口列表 result:{}", response); + return response; + } + } diff --git a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java index 0d2353940..a0c34254b 100644 --- a/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java +++ b/jsowell-admin/src/main/java/com/jsowell/lianlian/LianLianController.java @@ -4,19 +4,17 @@ import com.alibaba.fastjson2.JSONObject; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.response.RestApiResponse; -import com.jsowell.common.util.StringUtils; -import com.jsowell.thirdparty.dto.QueryStationInfoDTO; +import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.thirdparty.domain.StationStatsInfo; import com.jsowell.thirdparty.service.LianLianService; +import com.jsowell.thirdparty.vo.EquipmentAuthVO; import com.jsowell.thirdparty.vo.LianLianPageResponse; import org.apache.commons.collections4.CollectionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; -import java.util.Collections; -import java.util.List; /** * 对接联联平台controller @@ -55,8 +53,8 @@ public class LianLianController extends BaseController { } /** - * 查询充电站状态信息 - * @param dto + * 联联平台查询充电站状态信息 + * @param StationIDs * @return */ @PostMapping("/query_station_status") @@ -76,4 +74,44 @@ public class LianLianController extends BaseController { logger.info("联联平台查询充电站状态信息 result:{}", response); return response; } + + /** + * 查询统计信息 + * @param dto + * @return + */ + @PostMapping("/query_station_stats") + public RestApiResponse query_station_stats(@RequestBody QueryStationInfoDTO dto) { + logger.info("联联平台查询统计信息 params :{}", JSONObject.toJSONString(dto)); + RestApiResponse response; + try { + StationStatsInfo stationStatsInfo = lianLianService.query_station_stats(dto); + response = new RestApiResponse<>(stationStatsInfo); + } catch (Exception e) { + logger.error("联联平台查询统计信息 error", e); + response = new RestApiResponse<>(e); + } + logger.info("联联平台查询统计信息 result :{}", response); + return response; + } + + /** + * 请求设备认证 + * @param dto + * @return + */ + @PostMapping("/query_equip_auth") + public RestApiResponse query_equip_auth(@RequestBody QueryEquipmentDTO dto) { + logger.info("联联平台请求设备认证 params :{}", JSONObject.toJSONString(dto)); + RestApiResponse response; + try { + EquipmentAuthVO equipmentAuthVO = lianLianService.query_equip_auth(dto); + response = new RestApiResponse<>(equipmentAuthVO); + } catch (Exception e) { + logger.error("联联平台请求设备认证 error", e); + response = new RestApiResponse<>(e); + } + logger.info("联联平台请求设备认证 result :{}", response); + return response; + } } diff --git a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java index 038881e7c..e0af62f28 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/OrderService.java @@ -34,6 +34,7 @@ import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.domain.OrderInvoiceRecord; import com.jsowell.pile.domain.OrderPayRecord; +import com.jsowell.pile.domain.PileStationWhitelist; import com.jsowell.pile.domain.WxpayCallbackRecord; import com.jsowell.pile.dto.ApplyOrderInvoiceDTO; import com.jsowell.pile.dto.BasicPileDTO; @@ -57,6 +58,7 @@ import com.jsowell.pile.service.IOrderInvoiceRecordService; import com.jsowell.pile.service.IOrderPayRecordService; import com.jsowell.pile.service.IPileBillingTemplateService; import com.jsowell.pile.service.IPileStationInfoService; +import com.jsowell.pile.service.IPileStationWhitelistService; import com.jsowell.pile.service.WechatPayService; import com.jsowell.pile.service.WxpayCallbackRecordService; import com.jsowell.pile.transaction.dto.OrderTransactionDTO; @@ -140,6 +142,9 @@ public class OrderService { @Autowired private IOrderInvoiceRecordService orderInvoiceRecordService; + @Autowired + private IPileStationWhitelistService pileStationWhitelistService; + @Autowired private RedisCache redisCache; @@ -408,16 +413,29 @@ public class OrderService { orderBasicInfo.setAppointmentTime(DateUtils.parseDate(dto.getAppointmentTime(), DateUtils.YYYY_MM_DD_HH_MM_SS)); } // 订单详情 + BillingTemplateVO billingTemplate = dto.getBillingTemplate(); + BigDecimal sharpElectricityPrice = billingTemplate.getSharpElectricityPrice() != null ? billingTemplate.getSharpElectricityPrice() : BigDecimal.ZERO; + BigDecimal sharpServicePrice = billingTemplate.getSharpServicePrice() != null ? billingTemplate.getSharpServicePrice() : BigDecimal.ZERO; + BigDecimal peakElectricityPrice = billingTemplate.getPeakElectricityPrice() != null ? billingTemplate.getPeakElectricityPrice() : BigDecimal.ZERO; + BigDecimal peakServicePrice = billingTemplate.getPeakServicePrice() != null ? billingTemplate.getPeakServicePrice() : BigDecimal.ZERO; + BigDecimal flatElectricityPrice = billingTemplate.getFlatElectricityPrice() != null ? billingTemplate.getFlatElectricityPrice() : BigDecimal.ZERO; + BigDecimal flatServicePrice = billingTemplate.getFlatServicePrice() != null ? billingTemplate.getFlatServicePrice() : BigDecimal.ZERO; + BigDecimal valleyElectricityPrice = billingTemplate.getValleyElectricityPrice() != null ? billingTemplate.getValleyElectricityPrice() : BigDecimal.ZERO; + BigDecimal valleyServicePrice = billingTemplate.getValleyServicePrice() != null ? billingTemplate.getValleyServicePrice() : BigDecimal.ZERO; OrderDetail orderDetail = OrderDetail.builder() .orderCode(orderCode) - .sharpElectricityPrice(dto.getBillingTemplate().getSharpElectricityPrice()) - .sharpServicePrice(dto.getBillingTemplate().getSharpServicePrice()) - .peakElectricityPrice(dto.getBillingTemplate().getPeakElectricityPrice()) - .peakServicePrice(dto.getBillingTemplate().getPeakServicePrice()) - .flatElectricityPrice(dto.getBillingTemplate().getFlatElectricityPrice()) - .flatServicePrice(dto.getBillingTemplate().getFlatServicePrice()) - .valleyElectricityPrice(dto.getBillingTemplate().getValleyElectricityPrice()) - .valleyServicePrice(dto.getBillingTemplate().getValleyServicePrice()) + .sharpPrice(sharpElectricityPrice.add(sharpServicePrice)) + .sharpElectricityPrice(sharpElectricityPrice) + .sharpServicePrice(sharpServicePrice) + .peakPrice(peakElectricityPrice.add(peakServicePrice)) + .peakElectricityPrice(peakElectricityPrice) + .peakServicePrice(peakServicePrice) + .flatPrice(flatElectricityPrice.add(flatServicePrice)) + .flatElectricityPrice(flatElectricityPrice) + .flatServicePrice(flatServicePrice) + .valleyPrice(valleyElectricityPrice.add(valleyServicePrice)) + .valleyElectricityPrice(valleyElectricityPrice) + .valleyServicePrice(valleyServicePrice) .build(); OrderTransactionDTO createOrderTransactionDTO = OrderTransactionDTO.builder() @@ -821,7 +839,7 @@ public class OrderService { vo.setReason(orderBasicInfo.getReason()); vo.setOrderAmount(String.valueOf(orderBasicInfo.getOrderAmount())); vo.setPayAmount(String.valueOf(orderBasicInfo.getPayAmount())); - + vo.setPayMode(orderBasicInfo.getPayMode()); // 订单状态描述 String orderStatusDescribe = orderBasicInfoService.transformOrderStatusDescribe(orderStatus, orderBasicInfo.getPayStatus()); vo.setOrderStatusDescribe(orderStatusDescribe); @@ -963,7 +981,8 @@ public class OrderService { public List getPayMode(GetPayModeDTO dto) { List result = Lists.newArrayList(); // 查询会员在站点是否是白名单用户 - boolean flag = false; + PileStationWhitelist whitelist = pileStationWhitelistService.queryWhitelistByMemberId(dto.getStationId(), dto.getMemberId()); + boolean flag = whitelist != null; if (flag) { result.add( PayModeVO.builder() diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationWhitelistController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationWhitelistController.java new file mode 100644 index 000000000..aa649d72c --- /dev/null +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/PileStationWhitelistController.java @@ -0,0 +1,98 @@ +package com.jsowell.web.controller.pile; + +import com.jsowell.common.annotation.Log; +import com.jsowell.common.core.controller.BaseController; +import com.jsowell.common.core.domain.AjaxResult; +import com.jsowell.common.core.page.TableDataInfo; +import com.jsowell.common.enums.BusinessType; +import com.jsowell.common.util.poi.ExcelUtil; +import com.jsowell.pile.domain.PileStationWhitelist; +import com.jsowell.pile.service.IPileStationWhitelistService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 站点白名单Controller + * + * @author jsowell + * @date 2023-04-20 + */ +@RestController +@RequestMapping("/pile/whitelist") +public class PileStationWhitelistController extends BaseController { + @Autowired + private IPileStationWhitelistService pileStationWhitelistService; + + /** + * 查询站点白名单列表 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:list')") + @GetMapping("/list") + public TableDataInfo list(PileStationWhitelist pileStationWhitelist) { + startPage(); + List list = pileStationWhitelistService.selectPileStationWhitelistList(pileStationWhitelist); + return getDataTable(list); + } + + /** + * 导出站点白名单列表 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:export')") + @Log(title = "站点白名单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, PileStationWhitelist pileStationWhitelist) { + List list = pileStationWhitelistService.selectPileStationWhitelistList(pileStationWhitelist); + ExcelUtil util = new ExcelUtil(PileStationWhitelist.class); + util.exportExcel(response, list, "站点白名单数据"); + } + + /** + * 获取站点白名单详细信息 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) { + return AjaxResult.success(pileStationWhitelistService.selectPileStationWhitelistById(id)); + } + + /** + * 新增站点白名单 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:add')") + @Log(title = "站点白名单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody PileStationWhitelist pileStationWhitelist) { + return toAjax(pileStationWhitelistService.insertPileStationWhitelist(pileStationWhitelist)); + } + + /** + * 修改站点白名单 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:edit')") + @Log(title = "站点白名单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody PileStationWhitelist pileStationWhitelist) { + return toAjax(pileStationWhitelistService.updatePileStationWhitelist(pileStationWhitelist)); + } + + /** + * 删除站点白名单 + */ + @PreAuthorize("@ss.hasPermi('pile:whitelist:remove')") + @Log(title = "站点白名单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) { + return toAjax(pileStationWhitelistService.deletePileStationWhitelistByIds(ids)); + } +} diff --git a/jsowell-admin/src/main/resources/logback.xml b/jsowell-admin/src/main/resources/logback.xml index b8eda8ca3..3abfdc498 100644 --- a/jsowell-admin/src/main/resources/logback.xml +++ b/jsowell-admin/src/main/resources/logback.xml @@ -38,27 +38,27 @@ - - <!– 日志文件名格式 –> + ${log.path}/netty9011.%d{yyyy-MM-dd}.log - <!– 日志最大的历史–> + ${maxHistory} ${log.pattern} - <!– 过滤的级别 –> + INFO - <!– 匹配时的操作:接收(记录) –> + ACCEPT - <!– 不匹配时的操作:拒绝(不记录) –> + DENY - --> + @@ -102,9 +102,9 @@ - + diff --git a/jsowell-admin/src/test/java/SpringBootTestController.java b/jsowell-admin/src/test/java/SpringBootTestController.java index 2a40c2d3b..b2a2df73b 100644 --- a/jsowell-admin/src/test/java/SpringBootTestController.java +++ b/jsowell-admin/src/test/java/SpringBootTestController.java @@ -154,6 +154,11 @@ public class SpringBootTestController { @Autowired private IPileAuthCardService pileAuthCardService; + @Test + public void testupdateElecAmount() { + orderBasicInfoService.updateElecAmount(); + } + @Test public void testSelectSomeStatusCardInfo() { PileAuthCard pileAuthCard = pileAuthCardService.selectCardInfoByLogicCard("1111111111111111"); diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java index b6631ead0..82bd3702a 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java @@ -149,7 +149,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } } - public static void main(String[] args) { + public static void main(String[] args) throws ParseException { // String str = "2023-01-07 11:17:12"; // Date date = parseDate(str); // String str1 = parseDateToStr(YYYY_MM_DD_HH_MM_SS, date); diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java index aacc527b9..8299a91dc 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/YKCUtils.java @@ -133,6 +133,10 @@ public class YKCUtils { String s = transitionTemperature(bytes); System.out.println(s); + byte[] bytess = new byte[]{(byte) 0x80, (byte) 0x1A, 0x06, 0x00}; + String s1 = convertDecimalPoint(bytess, 5); + System.out.println(s1); + } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileStationWhitelist.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileStationWhitelist.java new file mode 100644 index 000000000..04c298d36 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/PileStationWhitelist.java @@ -0,0 +1,98 @@ +package com.jsowell.pile.domain; + +import com.jsowell.common.annotation.Excel; +import com.jsowell.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 站点白名单对象 pile_station_whitelist + * + * @author jsowell + * @date 2023-04-19 + */ +public class PileStationWhitelist extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + private Long id; + + /** + * 站点id + */ + @Excel(name = "站点id") + private String stationId; + + /** + * 会员id + */ + @Excel(name = "会员id") + private String memberId; + + /** + * 手机号 + */ + @Excel(name = "手机号") + private String mobileNumber; + + /** + * 删除标识(0-正常;1-删除) + */ + private String delFlag; + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public void setStationId(String stationId) { + this.stationId = stationId; + } + + public String getStationId() { + return stationId; + } + + public void setMemberId(String memberId) { + this.memberId = memberId; + } + + public String getMemberId() { + return memberId; + } + + public String getMobileNumber() { + return mobileNumber; + } + + public void setMobileNumber(String mobileNumber) { + this.mobileNumber = mobileNumber; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getDelFlag() { + return delFlag; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("id", getId()) + .append("stationId", getStationId()) + .append("memberId", getMemberId()) + .append("createTime", getCreateTime()) + .append("createBy", getCreateBy()) + .append("updateTime", getUpdateTime()) + .append("updateBy", getUpdateBy()) + .append("delFlag", getDelFlag()) + .toString(); + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryEquipmentDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryEquipmentDTO.java new file mode 100644 index 000000000..587697ea6 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryEquipmentDTO.java @@ -0,0 +1,27 @@ +package com.jsowell.pile.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 联联平台请求设备认证 + * + * @author JS-ZZA + * @date 2023/4/19 10:08 + */ +@Data +public class QueryEquipmentDTO { + /** + * 设备认证流水号 + * 格式“运营商 ID+yyyyMMddHHmmss+4 位随机数”, + * 27 字符 + */ + @JsonProperty(value = "EquipAuthSeq") + private String EquipAuthSeq; + + /** + * 充电设备接口编码 + */ + @JsonProperty(value = "ConnectorID") + private String ConnectorID; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/dto/QueryStationInfoDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStationInfoDTO.java similarity index 75% rename from jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/dto/QueryStationInfoDTO.java rename to jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStationInfoDTO.java index 9f9a61834..c4a3ac15e 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/dto/QueryStationInfoDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/QueryStationInfoDTO.java @@ -1,5 +1,6 @@ -package com.jsowell.thirdparty.dto; +package com.jsowell.pile.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,35 +24,41 @@ public class QueryStationInfoDTO { * 格式“yyyy-MM-dd HH:mm:ss”,可以为空,如果 * 不填写,则查询所有的充电站信息 */ + @JsonProperty(value = "LastQueryTime") private String LastQueryTime; /** * 查询页码 * 不填写默认为 1 */ + @JsonProperty(value = "PageNo") private Integer PageNo; /** * 每页数量 * 不填写默认为 10 */ + @JsonProperty(value = "PageSize") private Integer PageSize; /** * 充电站 ID */ + @JsonProperty(value = "StationID") private String StationID; /** * 统计开始时间 * 格式“yyyy-MM-dd” */ + @JsonProperty(value = "StartTime") private String StartTime; /** * 统计结束时间 * 格式“yyyy-MM-dd” */ + @JsonProperty(value = "EndTime") private String EndTime; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java index 90addf337..3b93c9d53 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/OrderBasicInfoMapper.java @@ -5,6 +5,8 @@ import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.dto.IndexQueryDTO; import com.jsowell.pile.dto.QueryOrderDTO; import com.jsowell.pile.dto.QueryPersonPileDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; import com.jsowell.pile.vo.uniapp.OrderVO; import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.SendMessageVO; @@ -192,4 +194,15 @@ public interface OrderBasicInfoMapper { List getAppointmentOrder(LocalDateTime dateTime); List getListByOrderCodes(@Param("orderCodes") List orderCodes); + + /** + * 联联平台 获取累计数据用 + * @param dto + * @return + */ + List getAccumulativeInfoForLianLian(QueryStationInfoDTO dto); + + List queryElecAmountNullList(); + + int batchUpdateOrderDetail(@Param("list") List orderDetailList); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationWhitelistMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationWhitelistMapper.java new file mode 100644 index 000000000..071bf3627 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/PileStationWhitelistMapper.java @@ -0,0 +1,66 @@ +package com.jsowell.pile.mapper; + +import com.jsowell.pile.domain.PileStationWhitelist; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * 站点白名单Mapper接口 + * + * @author jsowell + * @date 2023-04-19 + */ +@Repository +public interface PileStationWhitelistMapper { + /** + * 查询站点白名单 + * + * @param id 站点白名单主键 + * @return 站点白名单 + */ + public PileStationWhitelist selectPileStationWhitelistById(Long id); + + /** + * 查询站点白名单列表 + * + * @param pileStationWhitelist 站点白名单 + * @return 站点白名单集合 + */ + public List selectPileStationWhitelistList(PileStationWhitelist pileStationWhitelist); + + /** + * 新增站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + public int insertPileStationWhitelist(PileStationWhitelist pileStationWhitelist); + + /** + * 修改站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + public int updatePileStationWhitelist(PileStationWhitelist pileStationWhitelist); + + /** + * 删除站点白名单 + * + * @param id 站点白名单主键 + * @return 结果 + */ + public int deletePileStationWhitelistById(Long id); + + /** + * 批量删除站点白名单 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deletePileStationWhitelistByIds(Long[] ids); + + PileStationWhitelist queryWhitelistByMemberId(@Param("stationId") String stationId, @Param("memberId") String memberId); +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java index 6aa159ca1..932706d90 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IOrderBasicInfoService.java @@ -4,10 +4,8 @@ import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.core.domain.ykc.TransactionRecordsData; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; -import com.jsowell.pile.dto.GenerateOrderDTO; -import com.jsowell.pile.dto.IndexQueryDTO; -import com.jsowell.pile.dto.QueryOrderDTO; -import com.jsowell.pile.dto.QueryPersonPileDTO; +import com.jsowell.pile.dto.*; +import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; import com.jsowell.pile.vo.uniapp.OrderVO; import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; import com.jsowell.pile.vo.uniapp.SendMessageVO; @@ -27,13 +25,6 @@ import java.util.Map; * @date 2022-09-30 */ public interface IOrderBasicInfoService { - /** - * 查询订单 - * - * @param id 订单主键 - * @return 订单 - */ - OrderBasicInfo selectOrderBasicInfoById(Long id); /** * 条件查询订单基础信息 @@ -128,6 +119,8 @@ public interface IOrderBasicInfoService { List getListByMemberIdAndOrderStatus(String memberId, List orderStatusList, LocalDateTime dateTime); + void updateElecAmount(); + /** * 结算订单退款和用户余额退款调这个方法 */ @@ -222,4 +215,11 @@ public interface IOrderBasicInfoService { List getAppointmentOrder(LocalDateTime dateTime); Map generateOrderByCard(GenerateOrderDTO dto); + + /** + * 联联平台 获取累计数据用 + * @param dto + * @return + */ + List getAccumulativeInfoForLianLian(QueryStationInfoDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileConnectorInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileConnectorInfoService.java index 33aba530f..798420031 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileConnectorInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileConnectorInfoService.java @@ -132,4 +132,6 @@ public interface IPileConnectorInfoService { List getConnectorListForLianLian(Long stationId); List selectConnectorInfoList(String pileSn); + + PageResponse selectStationConnectorList(QueryConnectorListDTO dto); } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileStationWhitelistService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileStationWhitelistService.java new file mode 100644 index 000000000..6d2469e87 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/IPileStationWhitelistService.java @@ -0,0 +1,63 @@ +package com.jsowell.pile.service; + +import java.util.List; + +import com.jsowell.pile.domain.PileStationWhitelist; + +/** + * 站点白名单Service接口 + * + * @author jsowell + * @date 2023-04-19 + */ +public interface IPileStationWhitelistService { + /** + * 查询站点白名单 + * + * @param id 站点白名单主键 + * @return 站点白名单 + */ + public PileStationWhitelist selectPileStationWhitelistById(Long id); + + /** + * 查询站点白名单列表 + * + * @param pileStationWhitelist 站点白名单 + * @return 站点白名单集合 + */ + public List selectPileStationWhitelistList(PileStationWhitelist pileStationWhitelist); + + /** + * 新增站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + public int insertPileStationWhitelist(PileStationWhitelist pileStationWhitelist); + + /** + * 修改站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + public int updatePileStationWhitelist(PileStationWhitelist pileStationWhitelist); + + /** + * 批量删除站点白名单 + * + * @param ids 需要删除的站点白名单主键集合 + * @return 结果 + */ + public int deletePileStationWhitelistByIds(Long[] ids); + + /** + * 删除站点白名单信息 + * + * @param id 站点白名单主键 + * @return 结果 + */ + public int deletePileStationWhitelistById(Long id); + + PileStationWhitelist queryWhitelistByMemberId(String stationId, String memberId); +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 7cafeb1ce..50cb0093b 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -3,6 +3,8 @@ package com.jsowell.pile.service.impl; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.jsowell.common.constant.CacheConstants; @@ -35,11 +37,7 @@ import com.jsowell.pile.domain.PileAuthCard; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.WxpayCallbackRecord; import com.jsowell.pile.domain.WxpayRefundCallback; -import com.jsowell.pile.dto.GenerateOrderDTO; -import com.jsowell.pile.dto.IndexQueryDTO; -import com.jsowell.pile.dto.QueryOrderDTO; -import com.jsowell.pile.dto.QueryPersonPileDTO; -import com.jsowell.pile.dto.RefundableWxPayOrderData; +import com.jsowell.pile.dto.*; import com.jsowell.pile.mapper.OrderBasicInfoMapper; import com.jsowell.pile.service.IMemberBasicInfoService; import com.jsowell.pile.service.IOrderAbnormalRecordService; @@ -55,6 +53,7 @@ import com.jsowell.pile.service.WxpayRefundCallbackService; import com.jsowell.pile.transaction.dto.OrderTransactionDTO; import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.vo.base.PileInfoVO; +import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; import com.jsowell.pile.vo.uniapp.MemberVO; import com.jsowell.pile.vo.uniapp.OrderVO; import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO; @@ -145,17 +144,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { @Autowired private IPileAuthCardService pileAuthCardService; - /** - * 查询订单 - * - * @param id 订单主键 - * @return 订单 - */ - @Override - public OrderBasicInfo selectOrderBasicInfoById(Long id) { - return orderBasicInfoMapper.selectOrderBasicInfoById(id); - } - /** * 条件查询订单基本信息 * @@ -608,9 +596,8 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { // 更新订单详情 try { - // 总电费金额,总服务费金额 + // 总电费金额 BigDecimal totalElectricityAmount = BigDecimal.ZERO; - BigDecimal totalServiceAmount = BigDecimal.ZERO; // 尖时段用电量 String sharpUsedElectricity = data.getSharpUsedElectricity(); @@ -697,6 +684,83 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { } } + @Override + public void updateElecAmount() { + // 查询 elecAmount为空的订单数据 + int pageNum = 1; + int pageSize = 500; + + int total = 0; + int batch = 1; + while (true) { + // 分页处理 + PageHelper.startPage(pageNum, pageSize); + List list = orderBasicInfoMapper.queryElecAmountNullList(); + PageInfo pageInfo = new PageInfo<>(list); + if (CollectionUtils.isEmpty(pageInfo.getList())) { + break; + } + + // 计算电量总金额 + List orderDetailList = calculateData(pageInfo.getList()); + + // 更新数据库 + int i = orderBasicInfoMapper.batchUpdateOrderDetail(orderDetailList); + total += i; + logger.info("updateElecAmount==第{}批次更新完成", batch); + batch += 1; + } + logger.info("updateElecAmount==共更新{}条数据", total); + } + + // 计算数据 + private List calculateData(List list) { + for (OrderDetail orderDetail : list) { + try { + // 总电费金额 + BigDecimal totalElectricityAmount = BigDecimal.ZERO; + + // 尖时段用电量 + BigDecimal sharpUsedElectricity = orderDetail.getSharpUsedElectricity(); + if (sharpUsedElectricity != null) { + // 计算该时段电费 + BigDecimal multiply = orderDetail.getSharpElectricityPrice().multiply(sharpUsedElectricity).setScale(2,BigDecimal.ROUND_DOWN); + totalElectricityAmount = totalElectricityAmount.add(multiply); + } + + // 峰时段用电量 + BigDecimal peakUsedElectricity = orderDetail.getPeakUsedElectricity(); + if (peakUsedElectricity != null) { + // 计算该时段电费 + BigDecimal multiply = orderDetail.getPeakElectricityPrice().multiply(peakUsedElectricity).setScale(2,BigDecimal.ROUND_DOWN); + totalElectricityAmount = totalElectricityAmount.add(multiply); + } + + // 平时段用电量 + BigDecimal flatUsedElectricity = orderDetail.getFlatUsedElectricity(); + if (flatUsedElectricity != null) { + // 计算该时段电费 + BigDecimal multiply = orderDetail.getFlatElectricityPrice().multiply(flatUsedElectricity).setScale(2,BigDecimal.ROUND_DOWN); + totalElectricityAmount = totalElectricityAmount.add(multiply); + } + + // 谷时段用电量 + BigDecimal valleyUsedElectricity = orderDetail.getValleyUsedElectricity(); + if (valleyUsedElectricity != null) { + // 计算该时段电费 + BigDecimal multiply = orderDetail.getValleyElectricityPrice().multiply(valleyUsedElectricity).setScale(2,BigDecimal.ROUND_DOWN); + totalElectricityAmount = totalElectricityAmount.add(multiply); + } + + orderDetail.setTotalElectricityAmount(totalElectricityAmount); + orderDetail.setTotalServiceAmount(orderDetail.getTotalOrderAmount().subtract(totalElectricityAmount)); + }catch (Exception e) { + logger.info("发生异常", e); + } + } + return list; + } + /** * 余额支付 计算需要退回的金额 * @@ -1327,4 +1391,14 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService { resultMap.put("accountBalance", totalAccountAmount); return resultMap; } + + /** + * 联联平台 获取累计数据用 + * @param dto + * @return + */ + @Override + public List getAccumulativeInfoForLianLian(QueryStationInfoDTO dto) { + return orderBasicInfoMapper.getAccumulativeInfoForLianLian(dto); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java index bd0139300..be7b3c4b0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileConnectorInfoServiceImpl.java @@ -361,6 +361,16 @@ public class PileConnectorInfoServiceImpl implements IPileConnectorInfoService { PageInfo pageInfo = new PageInfo<>(pileConnectorInfoList); + // 查询枪口当前订单 + for (PileConnectorInfoVO pileConnectorInfoVO : pageInfo.getList()) { + String pileConnectorCode = pileConnectorInfoVO.getPileConnectorCode(); + pileConnectorInfoVO.setConnectorQrCodeUrl(getPileConnectorQrCodeUrl(pileConnectorCode)); // 枪口号二维码 + OrderBasicInfo order = orderBasicInfoService.queryChargingByPileConnectorCode(pileConnectorCode); + if (order != null) { + pileConnectorInfoVO.setOrderCode(order.getOrderCode()); + } + } + queryRealTimeData(pageInfo.getList()); // 返回结果集 @@ -423,6 +433,12 @@ public class PileConnectorInfoServiceImpl implements IPileConnectorInfoService { return connectorInfoList; } + @Override + public PageResponse selectStationConnectorList(QueryConnectorListDTO dto) { + PageResponse response = getUniAppConnectorInfoListByParams(dto); + return response; + } + /** * 查询充电枪口的实时数据 */ @@ -447,8 +463,8 @@ public class PileConnectorInfoServiceImpl implements IPileConnectorInfoService { pileConnectorInfoVO.setChargingAmount(new BigDecimal(realTimeMonitorData.getChargingAmount())); pileConnectorInfoVO.setChargingDegree(new BigDecimal(realTimeMonitorData.getChargingDegree())); pileConnectorInfoVO.setGunLineTemperature(realTimeMonitorData.getGunLineTemperature()); // 枪线温度 - pileConnectorInfoVO.setTimeRemaining(realTimeMonitorData.getTimeRemaining()); - pileConnectorInfoVO.setChargingTime(realTimeMonitorData.getSumChargingTime()); + pileConnectorInfoVO.setTimeRemaining(realTimeMonitorData.getTimeRemaining()); // 剩余时间 + pileConnectorInfoVO.setChargingTime(realTimeMonitorData.getSumChargingTime()); // 已充时长 // 计算实时功率(单位:kw) BigDecimal instantPowerTemp = outputVoltage.multiply(outputCurrent); BigDecimal instantPower = instantPowerTemp.divide(new BigDecimal(1000)); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java index fc2fe25cc..d3d8227da 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationInfoServiceImpl.java @@ -361,6 +361,7 @@ public class PileStationInfoServiceImpl implements IPileStationInfoService { stationVO.setFastFree(fastFree); stationVO.setSlowTotal(slowTotal); stationVO.setSlowFree(slowFree); + stationVO.setTotalFree(fastFree + slowFree); // 查询当前时段电费 CurrentTimePriceDetails currentTimePriceDetails = pileBillingTemplateService.getCurrentTimePriceDetails(stationVO.getStationId()); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationWhitelistServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationWhitelistServiceImpl.java new file mode 100644 index 000000000..369de838c --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/PileStationWhitelistServiceImpl.java @@ -0,0 +1,112 @@ +package com.jsowell.pile.service.impl; + +import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.StringUtils; +import com.jsowell.pile.domain.MemberBasicInfo; +import com.jsowell.pile.domain.PileStationWhitelist; +import com.jsowell.pile.mapper.PileStationWhitelistMapper; +import com.jsowell.pile.service.IMemberBasicInfoService; +import com.jsowell.pile.service.IPileStationWhitelistService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 站点白名单Service业务层处理 + * + * @author jsowell + * @date 2023-04-19 + */ +@Service +public class PileStationWhitelistServiceImpl implements IPileStationWhitelistService { + @Autowired + private PileStationWhitelistMapper pileStationWhitelistMapper; + + @Autowired + private IMemberBasicInfoService memberBasicInfoService; + + /** + * 查询站点白名单 + * + * @param id 站点白名单主键 + * @return 站点白名单 + */ + @Override + public PileStationWhitelist selectPileStationWhitelistById(Long id) { + return pileStationWhitelistMapper.selectPileStationWhitelistById(id); + } + + /** + * 查询站点白名单列表 + * + * @param pileStationWhitelist 站点白名单 + * @return 站点白名单 + */ + @Override + public List selectPileStationWhitelistList(PileStationWhitelist pileStationWhitelist) { + return pileStationWhitelistMapper.selectPileStationWhitelistList(pileStationWhitelist); + } + + /** + * 新增站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + @Override + public int insertPileStationWhitelist(PileStationWhitelist pileStationWhitelist) { + // pileStationWhitelist.setCreateTime(DateUtils.getNowDate()); + if (StringUtils.isBlank(pileStationWhitelist.getMobileNumber())) { + return 0; + } + MemberBasicInfo info = memberBasicInfoService.selectInfoByMobileNumber(pileStationWhitelist.getMobileNumber()); + if (info == null) { + return 0; + } + pileStationWhitelist.setMemberId(info.getMemberId()); + return pileStationWhitelistMapper.insertPileStationWhitelist(pileStationWhitelist); + } + + /** + * 修改站点白名单 + * + * @param pileStationWhitelist 站点白名单 + * @return 结果 + */ + @Override + public int updatePileStationWhitelist(PileStationWhitelist pileStationWhitelist) { + pileStationWhitelist.setUpdateTime(DateUtils.getNowDate()); + return pileStationWhitelistMapper.updatePileStationWhitelist(pileStationWhitelist); + } + + /** + * 批量删除站点白名单 + * + * @param ids 需要删除的站点白名单主键 + * @return 结果 + */ + @Override + public int deletePileStationWhitelistByIds(Long[] ids) { + return pileStationWhitelistMapper.deletePileStationWhitelistByIds(ids); + } + + /** + * 删除站点白名单信息 + * + * @param id 站点白名单主键 + * @return 结果 + */ + @Override + public int deletePileStationWhitelistById(Long id) { + return pileStationWhitelistMapper.deletePileStationWhitelistById(id); + } + + @Override + public PileStationWhitelist queryWhitelistByMemberId(String stationId, String memberId) { + if (StringUtils.isBlank(stationId) || StringUtils.isBlank(memberId)) { + return null; + } + return pileStationWhitelistMapper.queryWhitelistByMemberId(stationId, memberId); + } +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/transaction/service/TransactionService.java b/jsowell-pile/src/main/java/com/jsowell/pile/transaction/service/TransactionService.java index 41c2f0fa8..ae864f450 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/transaction/service/TransactionService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/transaction/service/TransactionService.java @@ -50,6 +50,7 @@ public class TransactionService { @Autowired private MemberWalletInfoMapper memberWalletInfoMapper; + @Autowired private IOrderBasicInfoService orderBasicInfoService; @Autowired @@ -160,7 +161,11 @@ public class TransactionService { orderBasicInfoMapper.updateOrderDetail(dto.getOrderDetail()); } // 清缓存 - orderBasicInfoService.cleanCacheByOrderCode(orderCode, transactionCode); + try { + orderBasicInfoService.cleanCacheByOrderCode(orderCode, transactionCode); + } catch (Exception e) { + log.error("清缓存异常", e); + } } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/StationInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/StationInfoVO.java index b229e0727..0433204d0 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/StationInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/base/StationInfoVO.java @@ -75,6 +75,11 @@ public class StationInfoVO { */ private int slowFree; + /** + * 总空闲枪口数 + */ + private int totalFree; + /** * 经度 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/lianlian/AccumulativeInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/lianlian/AccumulativeInfoVO.java new file mode 100644 index 000000000..526491d93 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/lianlian/AccumulativeInfoVO.java @@ -0,0 +1,48 @@ +package com.jsowell.pile.vo.lianlian; + +import lombok.Data; + +/** + * 对接联联平台 获取累计数据 + * + * @author JS-ZZA + * @date 2023/4/17 14:06 + */ +@Data +public class AccumulativeInfoVO { + + /** + * 订单编号 + */ + private String orderCode; + + /** + * 枪口编号 + */ + private String pileConnectorCode; + + /** + * 桩编码 + */ + private String pileSn; + + /** + * 站点id + */ + private String stationId; + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + /** + * 枪口充电量 + */ + private String connectorElectricity; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderVO.java index 38c0e464b..e2aa752e4 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/uniapp/UniAppOrderVO.java @@ -58,6 +58,11 @@ public class UniAppOrderVO { */ private String payAmount; + /** + * 支付方式 + */ + private String payMode; + /** * 订单金额 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java index 3f5fa89cb..56b937774 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/web/PileConnectorInfoVO.java @@ -102,6 +102,11 @@ public class PileConnectorInfoVO { */ private String chargingTime; + /** + * 剩余时间 + */ + private String timeRemaining; + /** * 电压 */ @@ -152,8 +157,4 @@ public class PileConnectorInfoVO { */ private String ratedPower; - /** - * 剩余时间 - */ - private String timeRemaining; } diff --git a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml index 6a1d44560..1f5c08795 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/OrderBasicInfoMapper.xml @@ -922,4 +922,56 @@ #{orderCode,jdbcType=VARCHAR} + + + + + + + update order_detail + + + + + when id=#{item.id} then #{item.totalElectricityAmount} + + + + + + + when id=#{item.id} then #{item.totalServiceAmount} + + + + + where + + id=#{i.id} + + \ No newline at end of file diff --git a/jsowell-pile/src/main/resources/mapper/pile/PileStationWhitelistMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/PileStationWhitelistMapper.xml new file mode 100644 index 000000000..6ce1738e3 --- /dev/null +++ b/jsowell-pile/src/main/resources/mapper/pile/PileStationWhitelistMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + id, station_id, member_id, mobile_number, create_time, create_by, update_time, update_by, del_flag + + + + select + + from pile_station_whitelist + + + + + + + + insert into pile_station_whitelist + + id, + station_id, + member_id, + mobile_number, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{id}, + #{stationId}, + #{memberId}, + #{mobileNumber}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update pile_station_whitelist + + station_id = #{stationId}, + member_id = #{memberId}, + mobile_number = #{mobileNumber}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + + where id = #{id} + + + + delete from pile_station_whitelist where id = #{id} + + + + delete from pile_station_whitelist where id in + + #{id} + + + + + \ No newline at end of file diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/domain/StationStatsInfo.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/domain/StationStatsInfo.java index 096cd70ba..e189c2652 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/domain/StationStatsInfo.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/domain/StationStatsInfo.java @@ -1,6 +1,9 @@ package com.jsowell.thirdparty.domain; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.List; @@ -12,6 +15,9 @@ import java.util.List; * @date 2023/4/15 9:29 */ @Data +@NoArgsConstructor +@AllArgsConstructor +@Builder public class StationStatsInfo { /** * 充电站 ID diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java index e37c3eea9..b249c3670 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/LianLianService.java @@ -1,7 +1,9 @@ package com.jsowell.thirdparty.service; -import com.jsowell.thirdparty.domain.StationInfo; -import com.jsowell.thirdparty.dto.QueryStationInfoDTO; +import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.thirdparty.domain.StationStatsInfo; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.thirdparty.vo.EquipmentAuthVO; import com.jsowell.thirdparty.vo.LianLianPageResponse; import java.util.List; @@ -31,5 +33,18 @@ public interface LianLianService { LianLianPageResponse query_station_status(List StationIDs); - LianLianPageResponse query_station_stats(QueryStationInfoDTO dto); + /** + * 查询统计信息 + * @param dto + * @return + */ + StationStatsInfo query_station_stats(QueryStationInfoDTO dto); + + + /** + * 请求设备认证 + * @param dto + * @return + */ + EquipmentAuthVO query_equip_auth(QueryEquipmentDTO dto); } diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java index 4c6e703da..c16df19ce 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/service/impl/LianLianServiceImpl.java @@ -2,8 +2,10 @@ package com.jsowell.thirdparty.service.impl; import cn.hutool.core.util.PageUtil; import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; import com.jsowell.common.core.domain.ykc.RealTimeMonitorData; import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum; +import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.DateUtils; import com.jsowell.common.util.PageUtils; import com.jsowell.common.util.StringUtils; @@ -11,13 +13,31 @@ import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.PileBasicInfo; import com.jsowell.pile.domain.PileConnectorInfo; import com.jsowell.pile.domain.PileStationInfo; -import com.jsowell.pile.service.*; +import com.jsowell.pile.dto.QueryEquipmentDTO; +import com.jsowell.pile.dto.QueryStationInfoDTO; +import com.jsowell.pile.service.IOrderBasicInfoService; +import com.jsowell.pile.service.IPileBasicInfoService; +import com.jsowell.pile.service.IPileConnectorInfoService; +import com.jsowell.pile.service.IPileMerchantInfoService; +import com.jsowell.pile.service.IPileModelInfoService; +import com.jsowell.pile.service.IPileStationInfoService; import com.jsowell.pile.vo.base.ConnectorInfoVO; import com.jsowell.pile.vo.base.MerchantInfoVO; +import com.jsowell.pile.vo.lianlian.AccumulativeInfoVO; +import com.jsowell.pile.vo.web.PileConnectorInfoVO; import com.jsowell.pile.vo.web.PileModelInfoVO; -import com.jsowell.thirdparty.domain.*; -import com.jsowell.thirdparty.dto.QueryStationInfoDTO; +import com.jsowell.thirdparty.domain.ConnectorChargeStatusInfo; +import com.jsowell.thirdparty.domain.ConnectorInfo; +import com.jsowell.thirdparty.domain.ConnectorStatsInfo; +import com.jsowell.thirdparty.domain.ConnectorStatusInfo; +import com.jsowell.thirdparty.domain.EquipmentInfo; +import com.jsowell.thirdparty.domain.EquipmentStatsInfo; +import com.jsowell.thirdparty.domain.OperatorInfo; +import com.jsowell.thirdparty.domain.StationInfo; +import com.jsowell.thirdparty.domain.StationStatsInfo; +import com.jsowell.thirdparty.domain.StationStatusInfo; import com.jsowell.thirdparty.service.LianLianService; +import com.jsowell.thirdparty.vo.EquipmentAuthVO; import com.jsowell.thirdparty.vo.LianLianPageResponse; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +46,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.Objects; +import java.util.Map; import java.util.stream.Collectors; @Service @@ -205,14 +225,131 @@ public class LianLianServiceImpl implements LianLianService { } /** - * TODO 查询统计信息 + * 查询统计信息 * @param dto * @return */ @Override - public LianLianPageResponse query_station_stats(QueryStationInfoDTO dto) { + public StationStatsInfo query_station_stats(QueryStationInfoDTO dto) { + // 根据站点id 查出这段时间的充电量 + List list = orderBasicInfoService.getAccumulativeInfoForLianLian(dto); + if (CollectionUtils.isEmpty(list)) { + return StationStatsInfo.builder() + .StationID(dto.getStationID()) + .StartTime(dto.getStartTime()) + .EndTime(dto.getEndTime()) + .StationElectricity(BigDecimal.ZERO) + .equipmentStatsInfos(Lists.newArrayList()) // 设备列表 + .build(); + } + + // 根据充电桩编号分组 key=充电桩编号 + Map> pileMap = list.stream() + .collect(Collectors.groupingBy(AccumulativeInfoVO::getPileSn)); + + // 存放所有充电桩设备 + List equipmentStatsInfoList = Lists.newArrayList(); + // 站点用电量 + BigDecimal stationElectricity = BigDecimal.ZERO; + // 用于记录枪口用电量 在循环每个枪口的时候初始化 + BigDecimal pileElec; + for (String pileSn : pileMap.keySet()) { + // 该充电桩下 所有枪口的用电数据 + List accumulativeInfoVOS = pileMap.get(pileSn); + if (CollectionUtils.isEmpty(accumulativeInfoVOS)) { + continue; + } + + // 存放充电桩用电量 + pileElec = BigDecimal.ZERO; + + // key=枪口编号 value 该枪口的用电数据 + Map> collect = accumulativeInfoVOS.stream() + .collect(Collectors.groupingBy(AccumulativeInfoVO::getPileConnectorCode)); + + List connectorStatsInfos = Lists.newArrayList(); + for (Map.Entry> entry : collect.entrySet()) { + String pileConnectorCode = entry.getKey(); + List value = entry.getValue(); + // 枪口用电量求和 + BigDecimal connectorElec = value.stream() + .map(AccumulativeInfoVO::getConnectorElectricity) + .map(BigDecimal::new) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + connectorStatsInfos.add( + ConnectorStatsInfo.builder() + .ConnectorID(pileConnectorCode) + .ConnectorElectricity(connectorElec) + .build() + ); + // 充电桩电量为枪口用电量累计 + pileElec = pileElec.add(connectorElec); + } + + EquipmentStatsInfo build = EquipmentStatsInfo.builder() + .EquipmentID(pileSn) + .EquipmentElectricity(pileElec) + .ConnectorStatsInfos(connectorStatsInfos) + .build(); + equipmentStatsInfoList.add(build); + + // 所有充电桩用电量之和 + stationElectricity = stationElectricity.add(pileElec); + } - return null; + StationStatsInfo stationStatsInfo = StationStatsInfo.builder() + .StationID(dto.getStationID()) + .StartTime(dto.getStartTime()) + .EndTime(dto.getEndTime()) + .StationElectricity(stationElectricity) + .equipmentStatsInfos(equipmentStatsInfoList) // 设备列表 + .build(); + + return stationStatsInfo; + } + + /** + * 请求设备认证 + * @param dto + * @return + */ + @Override + public EquipmentAuthVO query_equip_auth(QueryEquipmentDTO dto) { + EquipmentAuthVO vo = new EquipmentAuthVO(); + + String equipAuthSeq = dto.getEquipAuthSeq(); + String pileConnectorCode = dto.getConnectorID(); + // 通过运营商id + 枪口编码查询数据 + String merchantId = StringUtils.substring(equipAuthSeq, 0, 9); + String pileSn = StringUtils.substring(pileConnectorCode, 0, 14); + // 能查到为成功 + vo.setSuccStat(1); // 1-失败 0-成功 + PileBasicInfo pileBasicInfo = pileBasicInfoService.selectPileBasicInfoBySN(pileSn); + if (pileBasicInfo == null) { + vo.setFailReason(2); // 设备检测失败 + vo.setFailReasonMsg("未查到该桩的数据"); + throw new BusinessException("", ""); + } + if (pileBasicInfo.getMerchantId() == Long.parseLong(merchantId)) { + vo.setSuccStat(0); + // 查询当前数据 + PileConnectorInfoVO connectorInfo = pileConnectorInfoService.getPileConnectorInfoByConnectorCode(pileConnectorCode); + if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), String.valueOf(connectorInfo.getStatus())) + || StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue(), String.valueOf(connectorInfo.getStatus())) + || StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_APPOINTMENT_LOCK.getValue(), String.valueOf(connectorInfo.getStatus())) + ) { + vo.setFailReason(0); + } else { + vo.setFailReason(1); // 1- 此设备尚未插枪; + } + vo.setFailReasonMsg(""); + } + + vo.setEquipAuthSeq(equipAuthSeq); + vo.setConnectorID(pileConnectorCode); + + return vo; } /** diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/EquipmentAuthVO.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/EquipmentAuthVO.java new file mode 100644 index 000000000..3ccb1e022 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/vo/EquipmentAuthVO.java @@ -0,0 +1,52 @@ +package com.jsowell.thirdparty.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 请求设备认证VO + * + * @author JS-ZZA + * @date 2023/4/19 9:57 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class EquipmentAuthVO { + + /** + * 设备认证流水号 + * 格式“运营商 ID+yyyyMMddHHmmss+4 位随机数” + */ + private String EquipAuthSeq; + + /** + * 充电设备接口编码 + */ + private String ConnectorID; + + /** + * 成功状态 + * 0:成功; + * 1:失败 + */ + private int SuccStat; + + /** + * 失败原因 + * 0:无; + * 1:此设备尚未插枪; + * 2:设备检测失败: + * 3~99:自定义 + */ + private int FailReason; + + /** + * 失败原因描述 + * 如果设备认证失败则必传,描述力求简单明了,用户一看即懂 + */ + private String FailReasonMsg; +} diff --git a/jsowell-ui/src/api/pile/whitelist.js b/jsowell-ui/src/api/pile/whitelist.js new file mode 100644 index 000000000..291a99f90 --- /dev/null +++ b/jsowell-ui/src/api/pile/whitelist.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询站点白名单列表 +export function listWhitelist(query) { + return request({ + url: '/pile/whitelist/list', + method: 'get', + params: query + }) +} + +// 查询站点白名单详细 +export function getWhitelist(id) { + return request({ + url: '/pile/whitelist/' + id, + method: 'get' + }) +} + +// 新增站点白名单 +export function addWhitelist(data) { + return request({ + url: '/pile/whitelist', + method: 'post', + data: data + }) +} + +// 修改站点白名单 +export function updateWhitelist(data) { + return request({ + url: '/pile/whitelist', + method: 'put', + data: data + }) +} + +// 删除站点白名单 +export function delWhitelist(id) { + return request({ + url: '/pile/whitelist/' + id, + method: 'delete' + }) +} diff --git a/jsowell-ui/src/components/MapContainer/MapContainer.vue b/jsowell-ui/src/components/MapContainer/MapContainer.vue index c5b155a46..82c0839c5 100644 --- a/jsowell-ui/src/components/MapContainer/MapContainer.vue +++ b/jsowell-ui/src/components/MapContainer/MapContainer.vue @@ -7,6 +7,7 @@ v-model="inputObject.userInput" placeholder="请输入你要查找的关键词" type="text" + @keyup.enter.native="send" > 搜索 @@ -16,17 +17,31 @@
-
- - 上传图片 -
+
上传图片
+ + + + + + + + + + + + + + + + + + + @@ -41,6 +56,11 @@ window._AMapSecurityConfig = { export default { data() { return { + dialogImageUrl: '', + dialogVisible: false, + // headers:{ + // Authorization:this.$store.state.user.token + // }, map: null, autoOptions: { input: "", @@ -58,6 +78,14 @@ export default { }; }, methods: { + handleRemove(file, fileList) { + console.log(file, fileList); + }, + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + console.log(this.dialogImageUrl) + this.dialogVisible = true; + }, // 点击搜索按钮 send() { this.searchPlaceInput = this.inputObject.userInput; @@ -160,6 +188,7 @@ export default { }); }, onFileChange(e) { + console.log(e,'上传图片') // 1.获取用户选择的文件列表 const fileList = e.target.files; console.log(fileList); diff --git a/jsowell-ui/src/components/MapContainer/MapContainer11111.vue b/jsowell-ui/src/components/MapContainer/MapContainer11111.vue deleted file mode 100644 index 8f6c29149..000000000 --- a/jsowell-ui/src/components/MapContainer/MapContainer11111.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - - - diff --git a/jsowell-ui/src/views/pile/station/components/billing.vue b/jsowell-ui/src/views/pile/station/components/billing.vue index b25d62f43..e0ffee51e 100644 --- a/jsowell-ui/src/views/pile/station/components/billing.vue +++ b/jsowell-ui/src/views/pile/station/components/billing.vue @@ -65,8 +65,7 @@ size="mini" @click="clickImport" v-has-permi = "['pile:station:edit']" - >导入
+ >导入 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +