提交 682ad5bf authored 作者: 李瑞鑫's avatar 李瑞鑫

Merge branch 'v12.2_upgradeFunction_20240424'

......@@ -11,6 +11,7 @@ import com.clx.performance.vo.app.collect.AppCollectTruckVO;
import com.clx.performance.vo.feign.FreightEstimateVO;
import com.clx.performance.vo.feign.OrderGoodsFeignVO;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountArrearsVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.clx.performance.vo.pc.breakcontract.carrier.BreakContractOwnerRuleVO;
import com.msl.common.result.Result;
......@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
......@@ -115,4 +117,9 @@ public interface PerformanceFeign {
@GetMapping(value = {"clx-performance/feign/owner/loanAccount"})
Result<OwnerLoanAccountVO> loanAccount(@RequestParam Long userNo);
@GetMapping(value = {"clx-performance/feign/owner/accountArrearsInfo"})
Result<OwnerAccountArrearsVO> accountArrearsInfo(@RequestParam(value = "userNo") Long userNo,
@RequestParam(value = "prepaidArrearsOrder") BigDecimal prepaidArrearsOrder,
@RequestParam(value = "marginArrearsOrder") BigDecimal marginArrearsOrder);
}
package com.clx.performance.param.app;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Getter
@Setter
@NoArgsConstructor
public class OrderChildCheckParam extends PositionParam {
@ApiModelProperty(value = "货单编号", example = "100000000")
@NotBlank(message = "货单编号不能为空")
private String orderGoodsNo;
@ApiModelProperty(value = "车辆id", example = "1")
@NotNull(message = "车辆id空")
private Integer truckId;
@ApiModelProperty(value = "车牌号", example = "1")
@NotNull(message = "车牌号不能为空")
private String truckNo;
@ApiModelProperty(value = "司机用户编号", example = "1")
@NotNull(message = "司机用户编号空")
private Long driverUserNo;
@ApiModelProperty("纬度")
private BigDecimal latitude;
@ApiModelProperty("经度")
private BigDecimal longitude;
@ApiModelProperty("可卸车时间段开始")
private String unloadBeginTime;
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
}
......@@ -205,5 +205,16 @@ public class OrderChildVO {
@MoneyOutConvert
private BigDecimal lossAmount;
@ApiModelProperty("可卸车时间段开始")
private String unloadBeginTime;
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
}
\ No newline at end of file
......@@ -132,4 +132,16 @@ public class OrderGoodsVO {
@ApiModelProperty("用车方式 1:平台车辆配货 2:自有车辆配货")
private Integer vehicleUsage;
@ApiModelProperty("可卸车时间段开始")
private String unloadBeginTime;
@ApiModelProperty("可卸车时间段结束")
private String unloadEndTime;
@ApiModelProperty("可装车时间段开始")
private String loadBeginTime;
@ApiModelProperty("可装车时间段结束")
private String loadEndTime;
}
\ No newline at end of file
package com.clx.performance.vo.pc;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Builder
public class OwnerAccountArrearsVO {
@ApiModelProperty("当前预付账户未支付订单金额 等于0,不欠费,负数欠多少")
private BigDecimal prepaidArrearsOrderSumMoney;
@ApiModelProperty("当前保证金账户未支付订单金额 等于0,不欠费,负数欠多少")
private BigDecimal marginArrearsOrderSumMoney;
@ApiModelProperty("货主用户编码")
private Long userNo;
}
......@@ -32,6 +32,13 @@ public class AppDriverOrderChildController {
private final OrderChildService orderChildService;
@ApiOperation(value = "接单判断", notes = "<br>By:胡宇帆")
@PostMapping("/getOrderChildCheck")
public Result<Integer> getOrderChildCheck(@RequestBody @Validated OrderChildCheckParam param) {
return Result.ok(orderChildService.getOrderChildCheck(param));
}
@ApiOperation(value = "接单", notes = "<br>By:艾庆国")
@PostMapping("/saveOrderChild")
public Result<SaveOrderChildVO> saveOrderChild(@RequestBody @Validated OrderChildSaveParam param) {
......
......@@ -5,6 +5,7 @@ import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.service.OwnerAccountService;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountArrearsVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.msl.common.result.Result;
import io.swagger.annotations.ApiOperation;
......@@ -13,6 +14,8 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@Slf4j
@RestController
@RequestMapping("/feign/owner")
......@@ -50,4 +53,14 @@ public class OwnerAccountFeignController {
public Result<OwnerLoanAccountVO> loanAccount(@RequestParam Long userNo) {
return Result.ok(ownerAccountService.loanAccount(userNo));
}
@ApiOperation(value = "查询用户预付运费和保证金账户", notes = "<br>By:胡宇帆")
@GetMapping("/accountArrearsInfo")
public Result<OwnerAccountArrearsVO> accountArrearsInfo(@RequestParam(value = "userNo") Long userNo,
@RequestParam(value = "prepaidArrearsOrder") BigDecimal prepaidArrearsOrder,
@RequestParam(value = "marginArrearsOrder") BigDecimal marginArrearsOrder
) {
return Result.ok(ownerAccountService.accountArrearsInfo(userNo, prepaidArrearsOrder, marginArrearsOrder));
}
}
......@@ -38,5 +38,91 @@ public class TruckLocationDTO {
}
public String getTruckNo() {
return truckNo;
}
public void setTruckNo(String truckNo) {
this.truckNo = truckNo;
}
public BigDecimal getAngle() {
return angle;
}
public void setAngle(BigDecimal angle) {
this.angle = angle;
}
public BigDecimal getSpeed() {
return speed;
}
public void setSpeed(BigDecimal speed) {
this.speed = speed;
}
public BigDecimal[] getLocation() {
return location;
}
public void setLocation(BigDecimal[] location) {
this.location = location;
}
public String getGpsTime() {
return gpsTime;
}
public void setGpsTime(String gpsTime) {
this.gpsTime = gpsTime;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getModifiedTime() {
return modifiedTime;
}
public void setModifiedTime(String modifiedTime) {
this.modifiedTime = modifiedTime;
}
}
......@@ -28,6 +28,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
......@@ -62,6 +63,11 @@ public class OrderChildSyncTransportInvoiceExceptionJob {
for (OrderChildSyncTransportInvoiceRecord record : recordList) {
log.info("orderChildSyncTransportInvoiceExceptionJob执行:{}", JSONUtil.parse(record));
if (record.getCreateTime().plusMinutes(10).isBefore(LocalDateTime.now())) {
log.info("当前记录运单号:{},生成不足10分钟,先不执行", record.getChildNo());
continue;
}
String data = transportFeignService.getRiskStatus(ThirdOrderChildRiskStatusParam.builder().childNo(record.getChildNo()).build()).getData();
String decrypt = ThirdComponent.decrypt(data);
Result result = JSONUtil.toBean(decrypt, Result.class);
......
......@@ -94,4 +94,6 @@ public interface OrderChildService {
IPage<OwnerOrderChildVO> pageOwnerOrderChildList(PageOwnerOrderChildListParam param);
OrderChildVO getOwnerOrderChildInfo(String childNo);
Integer getOrderChildCheck(OrderChildCheckParam param);
}
......@@ -13,14 +13,12 @@ import com.clx.performance.param.pc.*;
import com.clx.performance.param.pc.owner.CreteAccountParam;
import com.clx.performance.param.pc.owner.FrozenAccountParam;
import com.clx.performance.param.pc.owner.ThawAccountParam;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.clx.performance.vo.pc.*;
import com.clx.user.param.pc.owner.UpdateOwnerBindCardFeignParam;
import com.clx.user.vo.pc.owner.OwnerBindCardVO;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
......@@ -104,4 +102,6 @@ public interface OwnerAccountService {
void resetPassword(ResetPasswordParam param);
OwnerLoanAccountVO loanAccount(Long userNo);
OwnerAccountArrearsVO accountArrearsInfo(Long userNo, BigDecimal prepaidArrearsOrder, BigDecimal marginArrearsOrder);
}
package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.enums.OrderEnum;
......@@ -7,6 +8,7 @@ import com.clx.order.enums.VehicleUsageEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignAddressVO;
import com.clx.order.vo.feign.FeignOrderInfoVO;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.component.GoodsOrderTruckRecordComponent;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RedisConstants;
......@@ -17,6 +19,7 @@ import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OrderChildExpectDTO;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.dto.payment.WalletResidueCardDTO;
import com.clx.performance.dto.zjxl.TruckLocationDTO;
import com.clx.performance.dto.zjxl.TruckTraceDTO;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.*;
......@@ -70,6 +73,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
......@@ -1354,9 +1358,10 @@ public class OrderChildServiceImpl implements OrderChildService {
public OrderChildVO getOrderChildInfo(String childNo) {
UserSessionData loginUserInfo = TokenUtil.getLoginUserInfo();
Long userNo = loginUserInfo.getUserNo();
OrderChild orderChild = orderChildDao.getByChildNo(childNo).orElseThrow(
PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderChild.getOrderNo());
if (!Objects.equals(orderChild.getDriverUserNo(), userNo) &&
!Objects.equals(orderChild.getTruckOwnUserNo(), userNo)) {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_NO_FOUND);
......@@ -1397,7 +1402,10 @@ public class OrderChildServiceImpl implements OrderChildService {
//亏吨扣款
result.setLossAmount(calcLossAmount(result.getLossWeight(),orderChild.getLossPrice()));
result.setUnloadBeginTime(orderInfoFeign.getUnloadBeginTime());
result.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
result.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
result.setLoadEndTime(orderInfoFeign.getLoadEndTime());
//查询结算信息
Optional<SettlementOwnerDetail> optional = settlementOwnerDetailDao.getByChildNo(childNo);
......@@ -1462,6 +1470,70 @@ public class OrderChildServiceImpl implements OrderChildService {
return result;
}
@Override
public Integer getOrderChildCheck(OrderChildCheckParam param) {
try {
return check(param);
} catch (Exception e) {
log.info("接单判断弹窗错误,错误信息:{}", e.getMessage());
return 0;
}
}
private int check(OrderChildCheckParam param) {
OrderGoods orderGoods = orderGoodsDao.getByOrderGoodsNo(param.getOrderGoodsNo()).get();
BigDecimal sendLatitude = orderGoods.getSendLatitude();
BigDecimal sendLongitude = orderGoods.getSendLongitude();
BigDecimal longitude = param.getLongitude();
BigDecimal latitude = param.getLatitude();
TruckLocationDTO truckLocationDTO = null;
try {
truckLocationDTO = zjxlGpsService.getTruckLastLocation(param.getTruckNo());
} catch (Exception e) {
log.info("中交兴路获取失败:{}", e.getMessage());
}
//如果中交兴路获取到位置信息,则使用中交,否则用APP传的位置信息
if (truckLocationDTO != null) {
BigDecimal[] location = truckLocationDTO.getLocation();
longitude = location[0];
latitude = location[1];
log.info("当前中交兴路获取司机车牌:{},相关位置信息:{}", param.getTruckNo(), JSONUtil.parse(truckLocationDTO));
} else {
log.info("中交兴路获取失败,通过高德获取,相关参数:{}", JSONUtil.parse(param));
}
List<GdRouteDTO> route = gdService.getRoute(longitude, latitude, sendLongitude, sendLatitude);
if (CollectionUtils.isNotEmpty(route)) {
GdRouteDTO gdRouteDTO = route.get(0);
Integer duration = gdRouteDTO.getDuration();
//预计到达时间
LocalDateTime localDateTime = LocalDateTime.now().plusSeconds(duration);
LocalDate localDate = localDateTime.toLocalDate();
String begin = localDate + " " + param.getLoadBeginTime();
String end = localDate + " " + param.getLoadEndTime();
log.info("预计到达时间:{},可以装货时间:{},可以卸货时间:{}", localDateTime, begin, end);
//可以装货时间
LocalDateTime beginLocalDateTime = DateUtils.parseDateTime(begin).get();
LocalDateTime endLocalDateTime = DateUtils.parseDateTime(end).get();
if (localDateTime.isAfter(beginLocalDateTime) && localDateTime.isBefore(endLocalDateTime)) {
log.info("不用弹");
return 0;
} else {
log.info("需要弹");
return 1;
}
}
return 0;
}
//计算亏吨吨数
private BigDecimal calcLossWeight(OrderChild orderChild){
if (Objects.nonNull(orderChild.getUnloadNet())){
......
......@@ -137,6 +137,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
FeignOrderVO orderInfoFeign = orderFeign.getOrderInfoFeign(orderNo);
orderGoodsVO.setReveiveAddressAll(orderInfoFeign.getReveiveAddressAll());
orderGoodsVO.setSendAddressAll(orderInfoFeign.getSendAddressAll());
orderGoodsVO.setUnloadBeginTime(orderInfoFeign.getUnloadBeginTime());
orderGoodsVO.setUnloadEndTime(orderInfoFeign.getUnloadEndTime());
orderGoodsVO.setLoadBeginTime(orderInfoFeign.getLoadBeginTime());
orderGoodsVO.setLoadEndTime(orderInfoFeign.getLoadEndTime());
orderGoodsVO.setResidueTransportWeight(BigDecimal.ZERO.compareTo(orderGoodsVO.getResidueTransportWeight()) > 0 ? BigDecimal.ZERO : orderGoodsVO.getResidueTransportWeight());
return orderGoodsVO;
}
......@@ -271,17 +275,21 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
List<OrderGoods> orderGoodsList = null;
BigDecimal orderGoodsResidueWeight = BigDecimal.ZERO;
String residueWeight = orderInfoFeign.getResidueWeight();
BigDecimal ans = new BigDecimal(residueWeight);
switch (optionType) {
case "1":
return new BigDecimal(residueWeight);
return ans;
case "2":
orderGoodsList = orderGoodsDao.getOrderGoodsListByOrderNoAndStatus(orderNo);
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
ans = orderGoodsResidueWeight.add(new BigDecimal(residueWeight));
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
case "3":
List<OrderChild> orderChildList = orderChildDao.selectResidueWeight(orderNo, OrderChildEnum.Status.ARRIVE_SEND.getCode());
BigDecimal childResidueWeight = BigDecimal.ZERO;
......@@ -293,12 +301,15 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
if (CollectionUtil.isNotEmpty(orderGoodsList)) {
orderGoodsResidueWeight = orderGoodsList.stream().map(OrderGoods::getResidueTransportWeight).reduce(BigDecimal.ZERO, BigDecimal::add);
}
return new BigDecimal(residueWeight).add(orderGoodsResidueWeight).add(childResidueWeight);
ans = ans.add(orderGoodsResidueWeight).add(childResidueWeight);
if (ans.compareTo(new BigDecimal("35")) <= 0) {
return BigDecimal.ZERO;
} else {
return ans.subtract(new BigDecimal("35"));
}
default:throw new RuntimeException("参数错误");
}
}
......
......@@ -43,10 +43,7 @@ import com.clx.performance.utils.excel.ExcelData;
import com.clx.performance.utils.excel.ExcelField;
import com.clx.performance.utils.excel.ExcelSheet;
import com.clx.performance.utils.excel.ExcelUtil;
import com.clx.performance.vo.pc.OwnerAccountAllVO;
import com.clx.performance.vo.pc.OwnerAccountRunningWaterRecordVO;
import com.clx.performance.vo.pc.OwnerAccountVO;
import com.clx.performance.vo.pc.OwnerLoanAccountVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.carrier.settle.CarrierPagePlatformAccountConfigVO;
import com.clx.user.enums.owner.FreezeSettingEnum;
import com.clx.user.feign.OwnerFeign;
......@@ -1257,4 +1254,34 @@ public class OwnerAccountServiceImpl implements OwnerAccountService {
return ownerLoanAccountStruct.convert(ownerLoanAccount);
}
@Override
public OwnerAccountArrearsVO accountArrearsInfo(Long userNo, BigDecimal prepaidArrearsOrder, BigDecimal marginArrearsOrder) {
List<OwnerAccount> accountList = ownerAccountDao.listByField(OwnerAccount::getOwnerUserNo, userNo);
OwnerAccountArrearsVO build = OwnerAccountArrearsVO.builder().build();
//查询保证金和预付运费欠多少金额
for (OwnerAccount ownerAccount : accountList) {
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.MARGIN_ACCOUNT.getCode())) {
BigDecimal subtract = ownerAccount.getUsableBalance().subtract(marginArrearsOrder);
if (subtract.compareTo(BigDecimal.ZERO) >= 0) {
subtract = BigDecimal.ZERO;
}
build.setMarginArrearsOrderSumMoney(subtract);
log.info("当前用户:{},marginArrearsOrder:{}, 可用余额:{},欠款金额:{}", userNo, marginArrearsOrder, ownerAccount.getUsableBalance(), subtract);
}
if (ownerAccount.getAccountType().equals(OwnerAccountEnum.AccountTypeStatus.PREPAID_FREIGHT_ACCOUNT.getCode())) {
BigDecimal subtract = ownerAccount.getUsableBalance().subtract(prepaidArrearsOrder);
if (subtract.compareTo(BigDecimal.ZERO) >= 0) {
subtract = BigDecimal.ZERO;
}
build.setPrepaidArrearsOrderSumMoney(subtract);
log.info("当前用户:{},prepaidArrearsOrder:{}, 可用余额:{},欠款金额:{}", userNo, prepaidArrearsOrder, ownerAccount.getUsableBalance(), subtract);
}
}
return build;
}
}
package com.clx.performance.utils.zjxl;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.performance.constant.GPSConstants;
import com.clx.performance.dto.zjxl.*;
......@@ -96,7 +97,7 @@ public class ZjxlGpsService {
if (lastLocation == null){return null;}
TruckLocationDTO location = new TruckLocationDTO(lastLocation.getDrc(), lastLocation.getSpd(), lastLocation.getLon(), lastLocation.getLat(), lastLocation.getUtc(),
lastLocation.getProvince(), lastLocation.getCity(), lastLocation.getCountry(), lastLocation.getAdr());
log.info("获取车辆位置成功, truckNo:{}", truckNo);
log.info("获取车辆位置成功, truckNo:{}, location:{}", truckNo, JSONUtil.parse(location));
return location;
}
......@@ -168,7 +169,6 @@ public class ZjxlGpsService {
* 统一post请求
*/
public ZjxlResultDTO postHttps(String api, String token, Map<String, String> map){
if ("dev".equals(active)
|| "test".equals(active)
|| "release".equals(active)) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论