mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-08-13 09:44:08 +08:00
Merge branch 'dev' into feature-coupon
# Conflicts: # jsowell-quartz/src/main/java/com/jsowell/quartz/task/JsowellTask.java
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package com.jsowell.pile.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.jsowell.common.annotation.Excel;
|
||||
import com.jsowell.common.core.domain.BaseEntity;
|
||||
import lombok.*;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
|
||||
/**
|
||||
* sim卡续费记录表对象 sim_recharge_record
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2026-03-06
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class SimRechargeRecord extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 充值订单号
|
||||
*/
|
||||
@Excel(name = "充值订单号")
|
||||
private String rechargeOrderCode;
|
||||
|
||||
/**
|
||||
* iccid
|
||||
*/
|
||||
@Excel(name = "iccId")
|
||||
private String iccId;
|
||||
|
||||
/**
|
||||
* 支付金额
|
||||
*/
|
||||
@Excel(name = "支付金额")
|
||||
private BigDecimal payAmount;
|
||||
|
||||
/**
|
||||
* 状态(0-成功;1-失败)
|
||||
*/
|
||||
@Excel(name = "状态", readConverterExp = "0=-成功;1-失败")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 订单金额
|
||||
*/
|
||||
@Excel(name = "订单金额")
|
||||
private BigDecimal orderAmount;
|
||||
|
||||
/**
|
||||
* 删除标识
|
||||
*/
|
||||
private String delFlag;
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.jsowell.pile.domain.batteryreport;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 电池充电报告Data
|
||||
*
|
||||
* @author Lemon
|
||||
* @Date 2025/9/10 14:29:28
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public class BatteryChargeReportData {
|
||||
private String mfrID;
|
||||
private String siteName;
|
||||
private String siteAddress;
|
||||
private String siteLongitude;
|
||||
private String siteLatitude;
|
||||
private String businessHours;
|
||||
private String serviceHotline;
|
||||
private String businessStatus;
|
||||
private Integer sitePileNumber;
|
||||
private Integer siteGunNumber;
|
||||
private String phone;
|
||||
private String siteCode;
|
||||
private String pileCode;
|
||||
private String gunNo;
|
||||
private String readBeforeCharge;
|
||||
|
||||
private Integer doorStatus;
|
||||
|
||||
private Integer bmsChargeMode;
|
||||
|
||||
|
||||
private String vin;
|
||||
private String batteryType;
|
||||
private String nominalEnergy;
|
||||
private String ratedCapacity;
|
||||
private String ratedVoltage;
|
||||
private String maxAllowTemp;
|
||||
private Integer initSoc;
|
||||
private String orderCode;
|
||||
private String beginTime;
|
||||
private Integer totalChargeTime;
|
||||
private Integer remainChargeTime;
|
||||
private String totalCharge;
|
||||
private String alarmCode;
|
||||
private String bmsVersion;
|
||||
|
||||
@JSONField(name = "data")
|
||||
private List<BatteryChargeReportData.ChargeData> chargeData;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
public static class ChargeData{
|
||||
private String dcv;
|
||||
private String dca;
|
||||
private String measuringChargeVoltage;
|
||||
private Integer bmsVoltageFault;
|
||||
private String gunTemp;
|
||||
private String singleMaxAllowVoltage;
|
||||
private String readBeforeCharge;
|
||||
private Integer doorStatus;
|
||||
private Integer bmsChargeMode;
|
||||
private String beforeChargeTotalVoltage;
|
||||
private String readCurrentCharge;
|
||||
private String singleMinVoltage;
|
||||
private String bmsDemandElectricity;
|
||||
private String chargePower;
|
||||
private String maxAllowTotalVoltage;
|
||||
private String bmsDemandVoltage;
|
||||
private String maxAllowElectricity;
|
||||
private String measuringChargeElectricity;
|
||||
private String singleMaxVoltage;
|
||||
private String singleMaxTemp;
|
||||
private String singleMinTemp;
|
||||
private String reportTime;
|
||||
private Integer currentSoc;
|
||||
private Integer socStatus;
|
||||
private Integer maxTempPointNum;
|
||||
private Integer minTempPointNum;
|
||||
private Integer maxSingleVoltageNum;
|
||||
private Integer maxSingleVoltageGroupNum;
|
||||
private Integer singleVoltageStatus;
|
||||
private String batteryInsulation;
|
||||
private Integer outputConnectStatus;
|
||||
private Integer bmsConnectError;
|
||||
private Integer bmsVoltageError;
|
||||
private Integer bmsInsulationError;
|
||||
private Integer bmsOverTempError;
|
||||
private Integer bmsHighVoltageError;
|
||||
private Integer bmsElectricityOverFault;
|
||||
private Integer bmsBatteryOverTempError;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.jsowell.pile.domain.batteryreport;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 电池报告 result 部分
|
||||
*
|
||||
* @author Lemon
|
||||
* @Date 2025/9/11 13:48:33
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class BatteryReportResult {
|
||||
private String pdfUrl;
|
||||
|
||||
private String webUrl;
|
||||
|
||||
private String fileName;
|
||||
|
||||
private String expireTime;
|
||||
|
||||
private String reportId;
|
||||
|
||||
private String fileSize;
|
||||
|
||||
private String generateTime;
|
||||
|
||||
private String taskId;
|
||||
|
||||
private String directUrl;
|
||||
|
||||
private String timestamp;
|
||||
}
|
||||
@@ -23,4 +23,6 @@ public class BatteryChargeReportDTO {
|
||||
* 1-web; 2-pdf
|
||||
*/
|
||||
private String reportType;
|
||||
|
||||
private String taskId;
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ public interface AdapayUnsplitRecordMapper {
|
||||
|
||||
int batchInsert(@Param("list") List<AdapayUnsplitRecord> list);
|
||||
|
||||
int batchInsertOrUpdateSelective(@Param("list") List<AdapayUnsplitRecord> list);
|
||||
|
||||
List<AdapayUnsplitRecord> queryUnsplitOrders(@Param("startTime") String startTime, @Param("endTime") String endTime);
|
||||
|
||||
List<AdapayUnsplitRecordVO> queryList();
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.jsowell.pile.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jsowell.pile.domain.SimRechargeRecord;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sim卡续费记录表Mapper接口
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2026-03-06
|
||||
*/
|
||||
@Repository
|
||||
public interface SimRechargeRecordMapper {
|
||||
/**
|
||||
* 查询sim卡续费记录表
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return sim卡续费记录表
|
||||
*/
|
||||
public SimRechargeRecord selectSimRechargeRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 查询sim卡续费记录表列表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return sim卡续费记录表集合
|
||||
*/
|
||||
public List<SimRechargeRecord> selectSimRechargeRecordList(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 新增sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertSimRechargeRecord(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 修改sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateSimRechargeRecord(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 删除sim卡续费记录表
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSimRechargeRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除sim卡续费记录表
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSimRechargeRecordByIds(Long[] ids);
|
||||
}
|
||||
@@ -28,6 +28,8 @@ public interface AdapayUnsplitRecordService{
|
||||
|
||||
int batchInsert(List<AdapayUnsplitRecord> list);
|
||||
|
||||
int batchInsertOrUpdateSelective(List<AdapayUnsplitRecord> list);
|
||||
|
||||
List<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime);
|
||||
|
||||
List<AdapayUnsplitRecordVO> queryList();
|
||||
|
||||
@@ -77,6 +77,8 @@ public interface OrderBasicInfoService{
|
||||
*/
|
||||
List<OrderListVO> selectOrderBasicInfoList(QueryOrderDTO dto);
|
||||
|
||||
boolean checkRefundInsuranceAmount(OrderBasicInfo orderBasicInfo);
|
||||
|
||||
void refundInsurance(OrderBasicInfo orderBasicInfo);
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.jsowell.common.enums.sim.SimCardStatusCorrespondEnum;
|
||||
import com.jsowell.common.enums.sim.SimSupplierEnum;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
@@ -15,6 +16,8 @@ import com.jsowell.common.util.id.IdUtils;
|
||||
import com.jsowell.common.util.sim.SimCardUtils;
|
||||
import com.jsowell.common.util.sim.XunZhongSimUtils;
|
||||
import com.jsowell.pile.domain.PileSimInfo;
|
||||
import com.jsowell.pile.domain.SimRechargeRecord;
|
||||
import com.jsowell.pile.dto.SimRenewDTO;
|
||||
import com.jsowell.pile.vo.web.*;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
@@ -27,6 +30,7 @@ import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -42,6 +46,9 @@ public class SimCardService {
|
||||
@Autowired
|
||||
private PileSimInfoService pileSimInfoService;
|
||||
|
||||
@Autowired
|
||||
private SimRechargeRecordService simRechargeRecordService;
|
||||
|
||||
protected final Logger logger = LoggerFactory.getLogger(SimCardService.class);
|
||||
|
||||
@Value("${xunzhong.apiId}")
|
||||
@@ -193,6 +200,69 @@ public class SimCardService {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量续费Sim卡(26年新版)
|
||||
*
|
||||
* @param dto
|
||||
*/
|
||||
public void batchRenewSimCard(SimRenewDTO dto) {
|
||||
List<String> iccIds = dto.getIccIds();
|
||||
// 先分组 key: 卡商名 value:流量卡卡号
|
||||
Map<String, List<String>> map = goupingBySimSupplier(iccIds);
|
||||
// 讯众 Sim 卡卡号
|
||||
List<String> xunZhongCards = map.get("xunzhong");
|
||||
// 智宇物联平台 Sim卡卡号
|
||||
List<String> wuLianCards = map.get("wulian");
|
||||
// 异步批量执行续费方法
|
||||
XunZhongSimRenewal(xunZhongCards, dto.getCycleNumber());
|
||||
|
||||
WuLianSimRenew(wuLianCards, dto.getCycleNumber());
|
||||
|
||||
// 将续费完成后的数据插入数据库
|
||||
// SimRechargeRecord record = SimRechargeRecord.builder()
|
||||
// .iccId(iccId)
|
||||
// .status("1")
|
||||
// .build();
|
||||
// simRechargeRecordService.insertSimRechargeRecord()
|
||||
}
|
||||
|
||||
/**
|
||||
* 将iccid按照卡商分组
|
||||
* @param iccIds
|
||||
* @return
|
||||
*/
|
||||
public Map<String, List<String>> goupingBySimSupplier(List<String> iccIds) {
|
||||
Map<String, List<String>> map = Maps.newHashMap();
|
||||
|
||||
if (CollectionUtils.isEmpty(iccIds)) {
|
||||
return Maps.newHashMap();
|
||||
}
|
||||
// 将集合中为空和0的过滤
|
||||
iccIds = iccIds.stream()
|
||||
.filter(StringUtils::isNotEmpty)
|
||||
.filter(x -> !StringUtils.equals(x, "0"))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<String> xunzhongList = new ArrayList<>();
|
||||
List<String> wulianList = new ArrayList<>();
|
||||
for (String iccId : iccIds) {
|
||||
// 查出此卡属于哪家公司(拿到code)
|
||||
SimCardVO simCardVO = searchByLoop(Lists.newArrayList(iccId)).get(0);
|
||||
String simSupplierCode = simCardVO.getSimCardFactory();
|
||||
|
||||
// 根据 code 分组
|
||||
if (StringUtils.equals(simSupplierCode, SimSupplierEnum.XUN_ZHONG.getCode())) {
|
||||
xunzhongList.add(iccId);
|
||||
}
|
||||
if (StringUtils.equals(simSupplierCode, SimSupplierEnum.WU_LIAN_INTERNET.getCode())) {
|
||||
wulianList.add(iccId);
|
||||
}
|
||||
}
|
||||
map.put("xunzhong", xunzhongList);
|
||||
map.put("wulian", wulianList);
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据不同的公司执行不同的续费方法
|
||||
@@ -396,6 +466,10 @@ public class SimCardService {
|
||||
String message = jsonResult.getString("message");
|
||||
throw new BusinessException(code, message);
|
||||
}
|
||||
// 续费成功, 将信息存库
|
||||
SimRechargeRecord record = SimRechargeRecord.builder()
|
||||
.iccId()
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.jsowell.pile.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jsowell.pile.domain.SimRechargeRecord;
|
||||
|
||||
/**
|
||||
* sim卡续费记录表Service接口
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2026-03-06
|
||||
*/
|
||||
public interface SimRechargeRecordService {
|
||||
/**
|
||||
* 查询sim卡续费记录表
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return sim卡续费记录表
|
||||
*/
|
||||
public SimRechargeRecord selectSimRechargeRecordById(Long id);
|
||||
|
||||
/**
|
||||
* 查询sim卡续费记录表列表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return sim卡续费记录表集合
|
||||
*/
|
||||
public List<SimRechargeRecord> selectSimRechargeRecordList(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 新增sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertSimRechargeRecord(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 修改sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateSimRechargeRecord(SimRechargeRecord simRechargeRecord);
|
||||
|
||||
/**
|
||||
* 批量删除sim卡续费记录表
|
||||
*
|
||||
* @param ids 需要删除的sim卡续费记录表主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSimRechargeRecordByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除sim卡续费记录表信息
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteSimRechargeRecordById(Long id);
|
||||
}
|
||||
@@ -0,0 +1,460 @@
|
||||
package com.jsowell.pile.service.batteryreport;
|
||||
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.jsowell.common.constant.CacheConstants;
|
||||
import com.jsowell.common.constant.Constants;
|
||||
import com.jsowell.common.core.domain.ykc.*;
|
||||
import com.jsowell.common.core.redis.RedisCache;
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.domain.ChargeAlgorithmRecord;
|
||||
import com.jsowell.pile.domain.batteryreport.BatteryChargeReportData;
|
||||
import com.jsowell.pile.domain.batteryreport.BatteryReportResult;
|
||||
import com.jsowell.pile.service.*;
|
||||
import com.jsowell.pile.thirdparty.ParameterConfigData;
|
||||
import com.jsowell.pile.vo.uniapp.customer.OrderVO;
|
||||
import com.jsowell.pile.vo.web.PileConnectorInfoVO;
|
||||
import com.jsowell.pile.vo.web.PileDetailVO;
|
||||
import com.jsowell.pile.vo.web.PileStationVO;
|
||||
import org.apache.commons.lang3.RandomUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 电池充电报告Service
|
||||
*
|
||||
* @author Lemon
|
||||
* @Date 2025/9/10 13:42:28
|
||||
*/
|
||||
@Service
|
||||
public class BatteryChargeReportService {
|
||||
private final Logger log = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
|
||||
@Value("${batteryChargeReport.webDomainPrefix}")
|
||||
private String webDomainPrefix;
|
||||
|
||||
@Value("${batteryChargeReport.getTaskIdApi}")
|
||||
private String getTaskIdApi;
|
||||
|
||||
@Value("${batteryChargeReport.apiPrefix}")
|
||||
private String apiPrefix;
|
||||
|
||||
@Value("${batteryChargeReport.token}")
|
||||
private String token;
|
||||
|
||||
@Value("${batteryChargeReport.mfrID}")
|
||||
private String mfrID;
|
||||
|
||||
@Autowired
|
||||
private RedisCache redisCache;
|
||||
|
||||
@Autowired
|
||||
private OrderBasicInfoService orderBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileBasicInfoService pileBasicInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileConnectorInfoService pileConnectorInfoService;
|
||||
|
||||
@Autowired
|
||||
private PileStationInfoService pileStationInfoService;
|
||||
|
||||
@Autowired
|
||||
private ChargeAlgorithmRecordService chargeAlgorithmRecordService;
|
||||
|
||||
/**
|
||||
* 通过订单号统一发送充电电池数据获取 taskId
|
||||
*
|
||||
* @param orderCode
|
||||
*/
|
||||
public String getTaskIdByOrderCode(String orderCode) {
|
||||
// 根据订单号查询订单信息
|
||||
OrderVO orderVO = orderBasicInfoService.getChargeOrderInfoByOrderCode(orderCode);
|
||||
if (orderVO == null) {
|
||||
log.error("统一发送orderCode:{} 充电电池数据 error, 订单信息为空", orderCode);
|
||||
return null;
|
||||
}
|
||||
// 先判断直流桩还是交流桩,如果是交流桩就不进行计算
|
||||
PileDetailVO pileDetailVO = pileBasicInfoService.selectPileDetailByPileSn(orderVO.getPileSn());
|
||||
if (StringUtils.equals(Constants.TWO, pileDetailVO.getChargePortType())) {
|
||||
log.info("订单:{} 为交流桩订单,不进行充电算法计算", orderCode);
|
||||
return null;
|
||||
}
|
||||
|
||||
// 查询站点信息
|
||||
PileStationVO stationVO = pileStationInfoService.getStationInfo(orderVO.getStationId());
|
||||
|
||||
// 获取各项数据
|
||||
Map<String, Object> map = getDatasByOrderVO(orderVO);
|
||||
String taskId = pushInfoGetTaskId(map, stationVO, orderVO);
|
||||
|
||||
if (StringUtils.isBlank(taskId)) {
|
||||
log.error("订单:{} 获取到 taskId 为空", orderCode);
|
||||
return null;
|
||||
}
|
||||
ChargeAlgorithmRecord record = chargeAlgorithmRecordService.queryRecordByOrderCode(orderCode);
|
||||
if (record != null) {
|
||||
record.setTaskId(taskId);
|
||||
chargeAlgorithmRecordService.updateChargeAlgorithmRecord(record);
|
||||
}else {
|
||||
record = new ChargeAlgorithmRecord();
|
||||
record.setTaskId(taskId);
|
||||
record.setOrderCode(orderCode);
|
||||
chargeAlgorithmRecordService.insertOrUpdateSelective(record);
|
||||
}
|
||||
return taskId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过taskId获取链接
|
||||
* @param taskId
|
||||
* @param reportType 1-web链接;2-pdf链接
|
||||
* @return
|
||||
*/
|
||||
public String getUrlByTaskId(String taskId, String reportType) {
|
||||
String resultUrl = "";
|
||||
// 根据 taskId 获取链接
|
||||
// 通过 taskId 获取充电算法记录
|
||||
ChargeAlgorithmRecord record = chargeAlgorithmRecordService.queryRecordByTaskId(taskId);
|
||||
if (record == null) {
|
||||
log.error("taskId:{} 获取充电算法记录为空", taskId);
|
||||
return null;
|
||||
}
|
||||
// 默认 1-web 端 url
|
||||
String apiUrl = webDomainPrefix + apiPrefix + "web/" + taskId;
|
||||
if (StringUtils.equals(Constants.TWO, reportType)) {
|
||||
// 2-pdf 端
|
||||
apiUrl = webDomainPrefix + apiPrefix + "pdf/" + taskId;
|
||||
}
|
||||
// 发送请求
|
||||
String result = HttpRequest.get(apiUrl).header("token", token).execute().body();
|
||||
log.info("发送获取报告result:{}", result);
|
||||
|
||||
// 将返回结果转化为json
|
||||
Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(result);
|
||||
String resultCode = String.valueOf(resultMap.get("code"));
|
||||
if (!StringUtils.equals(Constants.TWO_HUNDRED, resultCode)) {
|
||||
return null;
|
||||
}
|
||||
// 获取对应的 url
|
||||
// 将 result 部分转换成 BatteryReportResult 对象
|
||||
// BatteryReportResult batteryReportResult = (BatteryReportResult) resultMap.get("result");
|
||||
BatteryReportResult batteryReportResult = JSONObject.parseObject(resultMap.get("result").toString(), BatteryReportResult.class);;
|
||||
if (StringUtils.equals(Constants.ONE, reportType)) {
|
||||
if (StringUtils.isNotBlank(batteryReportResult.getWebUrl())) {
|
||||
// 1-web 端
|
||||
resultUrl = batteryReportResult.getWebUrl();
|
||||
record.setWebUrl(resultUrl);
|
||||
}
|
||||
}else {
|
||||
if (StringUtils.isNotBlank(batteryReportResult.getPdfUrl())) {
|
||||
// pdf 端
|
||||
resultUrl = batteryReportResult.getPdfUrl();
|
||||
record.setPdfUrl(resultUrl);
|
||||
}
|
||||
}
|
||||
// 保存到数据库
|
||||
chargeAlgorithmRecordService.updateChargeAlgorithmRecord(record);
|
||||
return resultUrl;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
String a = "03";
|
||||
System.out.println(String.valueOf(Integer.parseInt(a)));
|
||||
|
||||
// String taskId = "1e6e42aa613947bf863bc455c2f3357e";
|
||||
// String url = "https://wx.btiger.net/jeecg-boot" + "/api/docking/report/" + "web/" + taskId;
|
||||
// String result = HttpRequest.get(url).execute().body();
|
||||
//
|
||||
// System.out.println(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送信息获取taskId
|
||||
*
|
||||
* @param map
|
||||
* @param stationVO
|
||||
* @param orderVO
|
||||
* @return
|
||||
*/
|
||||
private String pushInfoGetTaskId(Map<String, Object> map, PileStationVO stationVO, OrderVO orderVO) {
|
||||
ChargingHandshakeData chargingHandshakeData = (ChargingHandshakeData) map.get("chargingHandshakeData"); // 0X15
|
||||
ParameterConfigData parameterConfigData = (ParameterConfigData) map.get("parameterConfigData"); // 0X17
|
||||
TransactionRecordsData transactionRecordsData = (TransactionRecordsData) map.get("transactionRecordsData"); // 0x3b
|
||||
List<BMSDemandAndChargerOutputData> chargerOutputInfoList = (List<BMSDemandAndChargerOutputData>) map.get("chargerOutputInfoList"); // 0x23List
|
||||
|
||||
BMSDemandAndChargerOutputData bmsDemandAndChargerOutputData = chargerOutputInfoList.get(0);
|
||||
// 计算充电时长
|
||||
long chargingTime = DateUtils.intervalTime(orderVO.getStartTime(), orderVO.getEndTime());
|
||||
// 查询枪口、桩数量
|
||||
List<PileConnectorInfoVO> pileConnectorInfoVOS = pileConnectorInfoService.selectConnectorListByStationId(Long.parseLong(stationVO.getId()));
|
||||
if (CollectionUtils.isEmpty(pileConnectorInfoVOS)) {
|
||||
return null;
|
||||
}
|
||||
// 将桩号进行去重汇总
|
||||
// Set<String> strings = pileConnectorInfoVOS.stream()
|
||||
// .collect(Collectors.toMap(
|
||||
// PileConnectorInfoVO::getPileSn,
|
||||
// Function.identity(),
|
||||
// (x1, x2) -> x1
|
||||
// )).keySet();
|
||||
|
||||
Set<String> snList = pileConnectorInfoVOS.stream()
|
||||
.map(PileConnectorInfoVO::getPileSn)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
String batteryType = String.valueOf(Integer.parseInt(chargingHandshakeData.getBmsBatteryType()));
|
||||
// 如果 batteryType != 1/2/3/4/5
|
||||
if (!StringUtils.equalsAny(batteryType, "1", "2", "3", "4", "5")) {
|
||||
// 随机生成一个1-3的数
|
||||
batteryType = String.valueOf(RandomUtils.nextInt(1, 4));
|
||||
}
|
||||
|
||||
BatteryChargeReportData data = BatteryChargeReportData.builder()
|
||||
.mfrID(mfrID)
|
||||
.siteName(stationVO.getStationName())
|
||||
.siteAddress(stationVO.getAddress())
|
||||
.siteLongitude(stationVO.getStationLng())
|
||||
.siteLatitude(stationVO.getStationLat())
|
||||
.businessHours(stationVO.getBusinessHours() == null ? "00:00-24:00" : stationVO.getBusinessHours())
|
||||
.serviceHotline(stationVO.getStationTel())
|
||||
.businessStatus(Constants.ZERO) // 营业状态 0-正常; 1-停运
|
||||
.sitePileNumber(snList.size()) // 桩数量
|
||||
.siteGunNumber(pileConnectorInfoVOS.size())
|
||||
.phone(orderVO.getPhoneNumber()) // 用户手机号码
|
||||
.siteCode(stationVO.getId())
|
||||
.pileCode(orderVO.getPileSn())
|
||||
.gunNo(orderVO.getConnectorCode())
|
||||
.readBeforeCharge(transactionRecordsData.getAmmeterTotalStart())
|
||||
.doorStatus(Constants.zero)
|
||||
.bmsChargeMode(Integer.parseInt(bmsDemandAndChargerOutputData.getBmsChargingModel()))
|
||||
.vin(transactionRecordsData.getVinCode())
|
||||
.batteryType(batteryType)
|
||||
.nominalEnergy(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString())
|
||||
.ratedCapacity(new BigDecimal(parameterConfigData.getBmsSumEnergy()).toBigInteger().toString())
|
||||
.ratedVoltage(chargingHandshakeData.getBmsBatteryVoltage())
|
||||
.maxAllowTemp(parameterConfigData.getBmsMaxTemperature())
|
||||
.initSoc(new BigDecimal(orderVO.getStartSoc()).intValue())
|
||||
.orderCode(orderVO.getOrderCode())
|
||||
.beginTime(orderVO.getStartTime())
|
||||
.totalChargeTime(Math.toIntExact(chargingTime))
|
||||
.remainChargeTime(Constants.zero)
|
||||
.totalCharge(orderVO.getTotalPower())
|
||||
.alarmCode(Constants.DOUBLE_ZERO)
|
||||
.bmsVersion("V1.1")
|
||||
|
||||
.build();
|
||||
|
||||
|
||||
List<BatteryChargeReportData
|
||||
.ChargeData> chargingDetailInfos = transformData(map);
|
||||
|
||||
chargingDetailInfos.stream()
|
||||
.filter(info -> info.getCurrentSoc() > 100) // 只处理 currentSoc > 100 的元素
|
||||
.forEach(info -> info.setCurrentSoc(100));
|
||||
Collections.reverse(chargingDetailInfos);
|
||||
|
||||
data.setChargeData(chargingDetailInfos);
|
||||
|
||||
// 发送请求
|
||||
String postUrl = webDomainPrefix + getTaskIdApi;
|
||||
String response = HttpRequest.post(postUrl).header("token", token).body(JSON.toJSONString(data)).execute().body();
|
||||
log.info("获取taskId发送请求收到回复 response:{}", response);
|
||||
|
||||
// 将返回结果转化为json
|
||||
Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(response);
|
||||
String resultCode = String.valueOf(resultMap.get("code"));
|
||||
String taskId = "";
|
||||
if (StringUtils.equals(Constants.TWO_HUNDRED, resultCode)) {
|
||||
// 获取 taskId
|
||||
Map<String, Object> result = (Map<String, Object>)resultMap.get("result");
|
||||
taskId = String.valueOf(result.get("taskId"));
|
||||
log.info("taskId:{}", taskId);
|
||||
}
|
||||
return taskId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据订单号查询各项充电数据
|
||||
*
|
||||
* @param orderVO
|
||||
* @return
|
||||
*/
|
||||
private Map<String, Object> getDatasByOrderVO(OrderVO orderVO) {
|
||||
Map<String, Object> map = new LinkedHashMap<>();
|
||||
// 0x15数据Data
|
||||
ChargingHandshakeData chargingHandshakeData = null;
|
||||
// 0x17数据data
|
||||
ParameterConfigData parameterConfigData = null;
|
||||
// 0x3b数据data
|
||||
TransactionRecordsData transactionRecordsData = null;
|
||||
// 0x23数据data
|
||||
BMSDemandAndChargerOutputData bmsDemandAndChargerOutputData = null;
|
||||
|
||||
String orderCode = orderVO.getOrderCode();
|
||||
String transactionCode = orderVO.getTransactionCode();
|
||||
|
||||
// 获取0x15
|
||||
String chargingHandshakeKey = CacheConstants.CHARGING_HANDSHAKE_DATA_BY_TRANSACTION_CODE + transactionCode;
|
||||
chargingHandshakeData = redisCache.getCacheObject(chargingHandshakeKey);
|
||||
if (chargingHandshakeData == null) {
|
||||
log.info("orderCode:{}, 0x15信息为空", orderCode);
|
||||
}
|
||||
|
||||
// 获取0x17
|
||||
String redisKey = CacheConstants.PARAMETER_CONFIGURATION_BY_TRANSACTION_CODE + transactionCode;
|
||||
parameterConfigData = redisCache.getCacheObject(redisKey);
|
||||
if (parameterConfigData == null) {
|
||||
log.info("orderCode:{}, 0x17信息为空", orderCode);
|
||||
}
|
||||
|
||||
// 获取0x3b缓存信息
|
||||
String transactionDataKey = CacheConstants.TRANSACTION_RECORD_BY_TRANSACTION_CODE + transactionCode;
|
||||
transactionRecordsData = redisCache.getCacheObject(transactionDataKey);
|
||||
|
||||
// 获取最后一条0x23
|
||||
List<BMSDemandAndChargerOutputData> chargerOutputInfoList = pileBasicInfoService.getBMSDemandAndChargerOutputInfoList(transactionCode);
|
||||
if (CollectionUtils.isEmpty(chargerOutputInfoList)) {
|
||||
log.info("orderCode:{}, 0x23信息为空", orderCode);
|
||||
}
|
||||
|
||||
// 获取0x25
|
||||
List<BMSChargeInfoData> bmsChargeInfoList = pileBasicInfoService.getBMSChargeInfoList(transactionCode);
|
||||
// 0x13
|
||||
List<RealTimeMonitorData> chargingRealTimeDataList = orderBasicInfoService.getChargingRealTimeData(transactionCode);
|
||||
|
||||
Map<String, List<BMSChargeInfoData>> collect_0x25 = new LinkedHashMap<>();
|
||||
Map<String, List<RealTimeMonitorData>> collect_0x13 = new LinkedHashMap<>();
|
||||
if (bmsChargeInfoList != null) {
|
||||
// 按照dateTime分组(将key设置为 yyyy-MM-dd HH:mm:00 格式)
|
||||
collect_0x25 = bmsChargeInfoList.stream()
|
||||
.map(x -> {
|
||||
x.setDateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(x.getDateTime())));
|
||||
return x;
|
||||
})
|
||||
.collect(Collectors.groupingBy(BMSChargeInfoData::getDateTime));
|
||||
|
||||
}
|
||||
if (chargingRealTimeDataList != null) {
|
||||
collect_0x13 = chargingRealTimeDataList.stream()
|
||||
.map(x -> {
|
||||
x.setDateTime(DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(x.getDateTime())));
|
||||
return x;
|
||||
})
|
||||
.collect(Collectors.groupingBy(RealTimeMonitorData::getDateTime));
|
||||
}
|
||||
|
||||
map.put("chargingHandshakeData", chargingHandshakeData); // 0x15
|
||||
map.put("parameterConfigData", parameterConfigData); // 0x17
|
||||
map.put("transactionRecordsData", transactionRecordsData); // 0x3b
|
||||
map.put("chargerOutputInfoList", chargerOutputInfoList); // 0x23List
|
||||
map.put("collect_0x25", collect_0x25);
|
||||
map.put("collect_0x13", collect_0x13);
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 封装充电数据 Datas
|
||||
* @param map
|
||||
* @return
|
||||
*/
|
||||
private List<BatteryChargeReportData.ChargeData> transformData(Map<String, Object> map) {
|
||||
List<BatteryChargeReportData.ChargeData> resultList = new ArrayList<>();
|
||||
BatteryChargeReportData.ChargeData chargeData;
|
||||
|
||||
ParameterConfigData parameterConfigData = (ParameterConfigData) map.get("parameterConfigData"); // 0X17
|
||||
TransactionRecordsData transactionRecordsData = (TransactionRecordsData) map.get("transactionRecordsData"); // 0x3b
|
||||
List<BMSDemandAndChargerOutputData> chargerOutputInfoList = (List<BMSDemandAndChargerOutputData>) map.get("chargerOutputInfoList"); // 0x23List
|
||||
Map<String, List<BMSChargeInfoData>> collect_0x25 = (Map<String, List<BMSChargeInfoData>>) map.get("collect_0x25");
|
||||
Map<String, List<RealTimeMonitorData>> collect_0x13 = (Map<String, List<RealTimeMonitorData>>) map.get("collect_0x13");
|
||||
|
||||
if (CollectionUtils.isEmpty(chargerOutputInfoList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
for (BMSDemandAndChargerOutputData realTimeData_0x23 : chargerOutputInfoList) {
|
||||
chargeData = new BatteryChargeReportData.ChargeData();
|
||||
String dateStr = DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:00", DateUtils.parseDate(realTimeData_0x23.getDateTime()));
|
||||
|
||||
// 获取该时间的0x13数据
|
||||
List<RealTimeMonitorData> RealTimeDataList = collect_0x13.get(dateStr);
|
||||
if (RealTimeDataList != null) {
|
||||
RealTimeMonitorData realTimeData_0x13 = RealTimeDataList.get(0);
|
||||
|
||||
chargeData.setGunTemp(realTimeData_0x13.getGunLineTemperature());
|
||||
chargeData.setCurrentSoc(new BigDecimal(realTimeData_0x13.getSOC()).intValue());
|
||||
chargeData.setSocStatus(new BigDecimal(realTimeData_0x13.getSOC()).intValue());
|
||||
} else {
|
||||
chargeData.setGunTemp("0");
|
||||
chargeData.setCurrentSoc(new BigDecimal(realTimeData_0x23.getSoc()).intValue());
|
||||
chargeData.setSocStatus(new BigDecimal(realTimeData_0x23.getSoc()).intValue());
|
||||
}
|
||||
chargeData.setReadBeforeCharge(transactionRecordsData.getAmmeterTotalStart());
|
||||
chargeData.setDoorStatus(Constants.zero);
|
||||
chargeData.setBmsChargeMode(Constants.two);
|
||||
chargeData.setDcv(new BigDecimal(realTimeData_0x23.getPileVoltageOutput()).toBigInteger().toString());
|
||||
chargeData.setDca(new BigDecimal(realTimeData_0x23.getPileCurrentOutput()).toBigInteger().toString());
|
||||
chargeData.setMeasuringChargeVoltage(new BigDecimal(realTimeData_0x23.getBmsChargingVoltage()).toBigInteger().toString());
|
||||
chargeData.setBmsVoltageFault(Constants.zero);
|
||||
chargeData.setSingleMaxAllowVoltage(new BigDecimal(parameterConfigData.getBmsMaxVoltage()).setScale(1, RoundingMode.HALF_DOWN).toString());
|
||||
chargeData.setBeforeChargeTotalVoltage(new BigDecimal(parameterConfigData.getBmsRealTimeVoltage()).toBigInteger().toString());
|
||||
chargeData.setReadCurrentCharge(transactionRecordsData.getAmmeterTotalEnd());
|
||||
chargeData.setSingleMinVoltage(new BigDecimal(realTimeData_0x23.getBmsMaxVoltageAndGroup()).setScale(1, RoundingMode.HALF_DOWN).toString());
|
||||
chargeData.setBmsDemandElectricity(new BigDecimal(realTimeData_0x23.getBmsCurrentDemand()).toBigInteger().toString());
|
||||
chargeData.setChargePower(realTimeData_0x23.getOutputPower());
|
||||
chargeData.setMaxAllowTotalVoltage(new BigDecimal(parameterConfigData.getBmsMaxChargingVoltage()).toBigInteger().toString());
|
||||
chargeData.setBmsDemandVoltage(new BigDecimal(realTimeData_0x23.getBmsVoltageDemand()).toBigInteger().toString());
|
||||
chargeData.setMaxAllowElectricity(new BigDecimal(parameterConfigData.getBmsMaxCurrent()).toBigInteger().toString());
|
||||
chargeData.setMeasuringChargeElectricity(new BigDecimal(realTimeData_0x23.getBmsChargingCurrent()).toBigInteger().toString());
|
||||
chargeData.setSingleMaxVoltage(new BigDecimal(realTimeData_0x23.getBmsMaxVoltageAndGroup()).setScale(1, RoundingMode.HALF_DOWN).toString());
|
||||
chargeData.setReportTime(realTimeData_0x23.getDateTime().replaceAll("[^0-9]", ""));
|
||||
chargeData.setSingleVoltageStatus(Constants.zero);
|
||||
chargeData.setOutputConnectStatus(Constants.zero);
|
||||
chargeData.setBmsConnectError(Constants.zero);
|
||||
chargeData.setBmsVoltageError(Constants.zero);
|
||||
chargeData.setBmsInsulationError(Constants.zero);
|
||||
chargeData.setBmsOverTempError(Constants.zero);
|
||||
chargeData.setBmsHighVoltageError(Constants.zero);
|
||||
chargeData.setBmsElectricityOverFault(Constants.zero);
|
||||
chargeData.setBmsBatteryOverTempError(Constants.zero);
|
||||
|
||||
|
||||
// 获取该时间的0x25数据
|
||||
List<BMSChargeInfoData> bmsChargeInfoDataList = collect_0x25.get(dateStr);
|
||||
|
||||
if (bmsChargeInfoDataList != null) {
|
||||
BMSChargeInfoData realTimeData_0x25 = bmsChargeInfoDataList.get(0);
|
||||
|
||||
chargeData.setSingleMaxTemp(realTimeData_0x25.getBmsMaxBatteryTemperature());
|
||||
chargeData.setSingleMinTemp(realTimeData_0x25.getMinBatteryTemperature());
|
||||
chargeData.setMaxSingleVoltageNum(Integer.parseInt(realTimeData_0x25.getBmsMaxVoltageNum()));
|
||||
chargeData.setMaxSingleVoltageGroupNum(Integer.parseInt(realTimeData_0x25.getBmsMaxVoltageNum()));
|
||||
chargeData.setMaxTempPointNum(Integer.parseInt(realTimeData_0x25.getMaxTemperatureDetectionNum()));
|
||||
chargeData.setMinTempPointNum(Integer.parseInt(realTimeData_0x25.getMinTemperatureDetectionNum()));
|
||||
chargeData.setBatteryInsulation(Constants.DOUBLE_ZERO);
|
||||
|
||||
// detailInfo.setVentTemp();
|
||||
// detailInfo.setEnvironmentTemp();
|
||||
}
|
||||
resultList.add(chargeData);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.common.util.StringUtils;
|
||||
import com.jsowell.pile.dto.BatteryChargeReportDTO;
|
||||
import com.jsowell.pile.service.ChargeAlgorithmRecordService;
|
||||
import com.jsowell.pile.service.batteryreport.BatteryChargeReportService;
|
||||
import com.jsowell.pile.vo.uniapp.customer.ChargeAlgorithmRecordVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -25,6 +26,9 @@ public class ChargeAlgorithmRecordServiceImpl implements ChargeAlgorithmRecordSe
|
||||
@Autowired
|
||||
private ChargeAlgorithmRecordMapper chargeAlgorithmRecordMapper;
|
||||
|
||||
@Autowired
|
||||
private BatteryChargeReportService batteryChargeReportService;
|
||||
|
||||
/**
|
||||
* 查询电池充电算法记录
|
||||
*
|
||||
@@ -125,16 +129,44 @@ public class ChargeAlgorithmRecordServiceImpl implements ChargeAlgorithmRecordSe
|
||||
*/
|
||||
@Override
|
||||
public String getUrlByParams(BatteryChargeReportDTO dto) {
|
||||
// 参数校验
|
||||
if (dto == null || StringUtils.isBlank(dto.getOrderCode())) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
ChargeAlgorithmRecord record = queryRecordByOrderCode(dto.getOrderCode());
|
||||
String reportType = dto.getReportType();
|
||||
if (record == null) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
// 获取记录中的URL
|
||||
String urlFromRecord = getUrlFromRecordByType(record, dto.getReportType());
|
||||
|
||||
if (StringUtils.isNotBlank(urlFromRecord)) {
|
||||
return urlFromRecord;
|
||||
}
|
||||
|
||||
// 如果记录中没有且taskId存在,通过服务获取
|
||||
if (StringUtils.isNotBlank(record.getTaskId())) {
|
||||
return batteryChargeReportService.getUrlByTaskId(record.getTaskId(), dto.getReportType());
|
||||
}
|
||||
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过记录获取URL
|
||||
* @param record
|
||||
* @param reportType
|
||||
* @return
|
||||
*/
|
||||
private String getUrlFromRecordByType(ChargeAlgorithmRecord record, String reportType) {
|
||||
if (StringUtils.equals(Constants.ONE, reportType)) {
|
||||
// 1-web 端
|
||||
return record.getWebUrl();
|
||||
}else if (StringUtils.equals(Constants.TWO, reportType)) {
|
||||
// 2-pdf 端
|
||||
} else if (StringUtils.equals(Constants.TWO, reportType)) {
|
||||
return record.getPdfUrl();
|
||||
}
|
||||
return "";
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -92,6 +92,9 @@ public class ClearingWithdrawInfoServiceImpl implements ClearingWithdrawInfoServ
|
||||
|
||||
@Override
|
||||
public List<ClearingBillVO> selectWithdrawInfoByOrderCodeList(List<String> orderCodeList) {
|
||||
if (CollectionUtils.isEmpty(orderCodeList)) {
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
return clearingWithdrawInfoMapper.selectWithdrawInfoByOrderCodeList(orderCodeList);
|
||||
}
|
||||
|
||||
|
||||
@@ -798,6 +798,43 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否退款保险金额
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean checkRefundInsuranceAmount(OrderBasicInfo orderBasicInfo) {
|
||||
if (Objects.isNull(orderBasicInfo)) {
|
||||
return false;
|
||||
}
|
||||
// 判断该订单是否支付保险
|
||||
BigDecimal insuranceAmount = orderBasicInfo.getInsuranceAmount();
|
||||
// 判断保险费是否大于0
|
||||
if (insuranceAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 判断是否已经退过保险费
|
||||
AdapayRefundRecord entry = new AdapayRefundRecord();
|
||||
entry.setOrderCode(orderBasicInfo.getOrderCode());
|
||||
List<AdapayRefundRecord> adapayRefundRecords = adapayRefundRecordService.selectAdapayRefundRecordList(entry);
|
||||
if (CollectionUtils.isNotEmpty(adapayRefundRecords)) {
|
||||
for (AdapayRefundRecord adapayRefundRecord : adapayRefundRecords) {
|
||||
String reason = adapayRefundRecord.getReason();
|
||||
// reason转为json
|
||||
JSONObject jsonObject = JSONObject.parseObject(reason);
|
||||
// 取scenarioType
|
||||
String scenarioType = jsonObject.getString("scenarioType");
|
||||
if (StringUtils.equals(scenarioType, ScenarioEnum.INSURANCE.getValue())) {
|
||||
// 退过保险
|
||||
logger.info("订单号:{}已经退过保险,请勿重复退保险", orderBasicInfo.getOrderCode());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退保险费,需要退保险调此方法,此方法会调用退款接口
|
||||
*/
|
||||
@@ -6437,7 +6474,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
}
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 运营端小程序查询订单
|
||||
* @param dto 查询条件
|
||||
* @return 订单查询结果
|
||||
|
||||
@@ -109,6 +109,9 @@ public class SettleOrderReportServiceImpl implements SettleOrderReportService {
|
||||
// 查询订单支付信息 分页
|
||||
int pageNum = dto.getPageNum() != null ? dto.getPageNum() : 1;
|
||||
int pageSize = dto.getPageSize() != null ? dto.getPageSize() : 10;
|
||||
if (CollectionUtils.isEmpty(orderCodes)) {
|
||||
return new PageResponse();
|
||||
}
|
||||
PageHelper.startPage(pageNum, pageSize);
|
||||
List<ClearingBillVO> clearingBillVOList = clearingWithdrawInfoService.selectWithdrawInfoByOrderCodeList(orderCodes);
|
||||
PageInfo<ClearingBillVO> pageInfo = new PageInfo<>(clearingBillVOList);
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.jsowell.pile.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jsowell.common.util.DateUtils;
|
||||
import com.jsowell.pile.service.SimRechargeRecordService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.jsowell.pile.mapper.SimRechargeRecordMapper;
|
||||
import com.jsowell.pile.domain.SimRechargeRecord;
|
||||
import com.jsowell.pile.service.SimRechargeRecordService;
|
||||
|
||||
/**
|
||||
* sim卡续费记录表Service业务层处理
|
||||
*
|
||||
* @author jsowell
|
||||
* @date 2026-03-06
|
||||
*/
|
||||
@Service
|
||||
public class SimRechargeRecordServiceImpl implements SimRechargeRecordService {
|
||||
@Autowired
|
||||
private SimRechargeRecordMapper simRechargeRecordMapper;
|
||||
|
||||
/**
|
||||
* 查询sim卡续费记录表
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return sim卡续费记录表
|
||||
*/
|
||||
@Override
|
||||
public SimRechargeRecord selectSimRechargeRecordById(Long id) {
|
||||
return simRechargeRecordMapper.selectSimRechargeRecordById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询sim卡续费记录表列表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return sim卡续费记录表
|
||||
*/
|
||||
@Override
|
||||
public List<SimRechargeRecord> selectSimRechargeRecordList(SimRechargeRecord simRechargeRecord) {
|
||||
return simRechargeRecordMapper.selectSimRechargeRecordList(simRechargeRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertSimRechargeRecord(SimRechargeRecord simRechargeRecord) {
|
||||
simRechargeRecord.setCreateTime(DateUtils.getNowDate());
|
||||
return simRechargeRecordMapper.insertSimRechargeRecord(simRechargeRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改sim卡续费记录表
|
||||
*
|
||||
* @param simRechargeRecord sim卡续费记录表
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateSimRechargeRecord(SimRechargeRecord simRechargeRecord) {
|
||||
simRechargeRecord.setUpdateTime(DateUtils.getNowDate());
|
||||
return simRechargeRecordMapper.updateSimRechargeRecord(simRechargeRecord);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除sim卡续费记录表
|
||||
*
|
||||
* @param ids 需要删除的sim卡续费记录表主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteSimRechargeRecordByIds(Long[] ids) {
|
||||
return simRechargeRecordMapper.deleteSimRechargeRecordByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除sim卡续费记录表信息
|
||||
*
|
||||
* @param id sim卡续费记录表主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteSimRechargeRecordById(Long id) {
|
||||
return simRechargeRecordMapper.deleteSimRechargeRecordById(id);
|
||||
}
|
||||
}
|
||||
@@ -1098,12 +1098,24 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
.updateGiftBalance(returnGift)
|
||||
.relatedOrderCode(orderCode)
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
||||
orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// 判断是否需要退保险费用
|
||||
boolean checkResult = orderBasicInfoService.checkRefundInsuranceAmount(orderBasicInfo);
|
||||
if (checkResult) {
|
||||
// 退保险, 计算退保金额
|
||||
Map<String, BigDecimal> refundMap = calculateBalanceRefund(principalPay, giftPay, orderBasicInfo.getOrderAmount(), orderBasicInfo.getDiscountAmount(), orderBasicInfo.getInsuranceAmount());
|
||||
BigDecimal returnPrincipalForInsurance = refundMap.get("returnPrincipalForInsurance");
|
||||
BigDecimal returnGiftForInsurance = refundMap.get("returnGiftForInsurance");
|
||||
|
||||
updateMemberBalanceDTO.setUpdatePrincipalBalance(returnPrincipal.add(returnPrincipalForInsurance));
|
||||
updateMemberBalanceDTO.setUpdateGiftBalance(returnGift.add(returnGiftForInsurance));
|
||||
}
|
||||
}
|
||||
// 统一退款
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 更新order_pay_record, 解冻部分
|
||||
// List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
@@ -1150,13 +1162,19 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
if (StringUtils.isNotBlank(wechatAppId)) {
|
||||
applyRefundDTO.setWechatAppId(wechatAppId);
|
||||
}
|
||||
this.refundOrderWithAdapay(applyRefundDTO);
|
||||
|
||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
||||
orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// 判断是否需要退款保险金额
|
||||
boolean checkResult = orderBasicInfoService.checkRefundInsuranceAmount(orderBasicInfo);
|
||||
if (checkResult) {
|
||||
// 退款保险,将保险金额进行合并
|
||||
applyRefundDTO.setRefundAmount(refundAmount.add(orderBasicInfo.getInsuranceAmount()));
|
||||
}
|
||||
}
|
||||
|
||||
this.refundOrderWithAdapay(applyRefundDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -69,6 +69,11 @@ public class AdapayUnsplitRecordServiceImpl implements AdapayUnsplitRecordServic
|
||||
return adapayUnsplitRecordMapper.batchInsert(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int batchInsertOrUpdateSelective(List<AdapayUnsplitRecord> list) {
|
||||
return adapayUnsplitRecordMapper.batchInsertOrUpdateSelective(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdapayUnsplitRecord> queryUnsplitOrders(String startTime, String endTime) {
|
||||
return adapayUnsplitRecordMapper.queryUnsplitOrders(startTime, endTime);
|
||||
|
||||
@@ -447,6 +447,32 @@
|
||||
#{item.id,jdbcType=INTEGER}
|
||||
</foreach>
|
||||
</update>
|
||||
<insert id="batchInsertOrUpdateSelective" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
|
||||
insert into adapay_unsplit_record
|
||||
(merchant_code, pay_time, payment_id, order_no, pay_amount, confirmed_split_amount,
|
||||
refund_amount, payment_revoke_amount, remaining_split_amount, order_code, pile_type,
|
||||
due_refund_amount, settle_amount, refund_flag, split_flag, update_time)
|
||||
values
|
||||
<foreach collection="list" item="item" separator=",">
|
||||
(#{item.merchantCode,jdbcType=VARCHAR}, #{item.payTime,jdbcType=TIMESTAMP}, #{item.paymentId,jdbcType=VARCHAR},
|
||||
#{item.orderNo,jdbcType=VARCHAR}, #{item.payAmount,jdbcType=DECIMAL}, #{item.confirmedSplitAmount,jdbcType=DECIMAL},
|
||||
#{item.refundAmount,jdbcType=DECIMAL}, #{item.paymentRevokeAmount,jdbcType=DECIMAL},
|
||||
#{item.remainingSplitAmount,jdbcType=DECIMAL}, #{item.orderCode,jdbcType=VARCHAR},
|
||||
#{item.pileType,jdbcType=VARCHAR}, #{item.dueRefundAmount,jdbcType=DECIMAL}, #{item.settleAmount,jdbcType=DECIMAL},
|
||||
#{item.refundFlag,jdbcType=VARCHAR}, #{item.splitFlag,jdbcType=VARCHAR}, #{item.updateTime,jdbcType=TIMESTAMP})
|
||||
</foreach>
|
||||
on duplicate key update
|
||||
merchant_code = values(merchant_code),
|
||||
pay_time = values(pay_time),
|
||||
order_no = values(order_no),
|
||||
pay_amount = values(pay_amount),
|
||||
confirmed_split_amount = values(confirmed_split_amount),
|
||||
refund_amount = values(refund_amount),
|
||||
payment_revoke_amount = values(payment_revoke_amount),
|
||||
remaining_split_amount = values(remaining_split_amount),
|
||||
order_code = values(order_code),
|
||||
update_time = values(update_time)
|
||||
</insert>
|
||||
<insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
|
||||
<!--@mbg.generated-->
|
||||
insert into adapay_unsplit_record
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.jsowell.pile.mapper.SimRechargeRecordMapper">
|
||||
|
||||
<resultMap type="com.jsowell.pile.domain.SimRechargeRecord" id="SimRechargeRecordResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="rechargeOrderCode" column="recharge_order_code" />
|
||||
<result property="iccId" column="iccid" />
|
||||
<result property="payAmount" column="pay_amount" />
|
||||
<result property="status" column="status" />
|
||||
<result property="orderAmount" column="order_amount" />
|
||||
<result property="createBy" column="create_by" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="delFlag" column="del_flag" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectSimRechargeRecordVo">
|
||||
select id, recharge_order_code, iccid, pay_amount, status, order_amount, create_by, create_time, update_by, update_time, del_flag from sim_recharge_record
|
||||
</sql>
|
||||
|
||||
<select id="selectSimRechargeRecordList" parameterType="com.jsowell.pile.domain.SimRechargeRecord" resultMap="SimRechargeRecordResult">
|
||||
<include refid="selectSimRechargeRecordVo"/>
|
||||
<where>
|
||||
<if test="rechargeOrderCode != null and rechargeOrderCode != ''"> and recharge_order_code = #{rechargeOrderCode}</if>
|
||||
<if test="iccId != null and iccId != ''"> and iccid = #{iccId}</if>
|
||||
<if test="payAmount != null "> and pay_amount = #{payAmount}</if>
|
||||
<if test="status != null and status != ''"> and status = #{status}</if>
|
||||
<if test="orderAmount != null "> and order_amount = #{orderAmount}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectSimRechargeRecordById" parameterType="Long" resultMap="SimRechargeRecordResult">
|
||||
<include refid="selectSimRechargeRecordVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertSimRechargeRecord" parameterType="com.jsowell.pile.domain.SimRechargeRecord" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into sim_recharge_record
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="rechargeOrderCode != null">recharge_order_code,</if>
|
||||
<if test="iccId != null">iccid,</if>
|
||||
<if test="payAmount != null">pay_amount,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="orderAmount != null">order_amount,</if>
|
||||
<if test="createBy != null">create_by,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="updateBy != null">update_by,</if>
|
||||
<if test="updateTime != null">update_time,</if>
|
||||
<if test="delFlag != null">del_flag,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="rechargeOrderCode != null">#{rechargeOrderCode},</if>
|
||||
<if test="iccId != null">#{iccId},</if>
|
||||
<if test="payAmount != null">#{payAmount},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="orderAmount != null">#{orderAmount},</if>
|
||||
<if test="createBy != null">#{createBy},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="updateBy != null">#{updateBy},</if>
|
||||
<if test="updateTime != null">#{updateTime},</if>
|
||||
<if test="delFlag != null">#{delFlag},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateSimRechargeRecord" parameterType="com.jsowell.pile.domain.SimRechargeRecord">
|
||||
update sim_recharge_record
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="rechargeOrderCode != null">recharge_order_code = #{rechargeOrderCode},</if>
|
||||
<if test="iccId != null">iccid = #{iccid},</if>
|
||||
<if test="payAmount != null">pay_amount = #{payAmount},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="orderAmount != null">order_amount = #{orderAmount},</if>
|
||||
<if test="createBy != null">create_by = #{createBy},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||
<if test="delFlag != null">del_flag = #{delFlag},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteSimRechargeRecordById" parameterType="Long">
|
||||
delete from sim_recharge_record where id = #{id}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteSimRechargeRecordByIds" parameterType="String">
|
||||
delete from sim_recharge_record where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user