提交 e1c3cc63 authored 作者: 刘海泉's avatar 刘海泉

Merge remote-tracking branch 'origin/master' into v22.7_order_delay_20240827

......@@ -4,9 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
public enum AppEnum {
;
......@@ -15,7 +13,7 @@ public enum AppEnum {
@AllArgsConstructor
public enum UniqueIdentifier {
SMART_WEIGHT(1, "场站-smart-weight"),
LMS_MANAGE(1, "物流子系统-lms-manage"),
PURCHASE_MANAGE(2, "供应链-purchase-manage"),
;
......
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum InputOutputEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
INPUT(1, "进场"),
OUTPUT(2, "出场"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Type::getMsg).orElse(null);
}
}
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
public enum SaleBuyEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
SALE(1, "销售"),
BUY(2, "采购"),
;
private final Integer code;
private final String msg;
public static Optional<Type> getByCode(int code) {
return Arrays.stream(values()).filter(e -> e.code == code).findFirst();
}
public static String getMsgByCode(int code) {
return getByCode(code).map(Type::getMsg).orElse(null);
}
}
}
......@@ -99,8 +99,8 @@
</dependency>
<dependency>
<groupId>com.smart</groupId>
<artifactId>smart-weight-sdk</artifactId>
<groupId>com.scm</groupId>
<artifactId>lms-manage-sdk</artifactId>
</dependency>
......
......@@ -104,7 +104,11 @@ public class PushOrderChildExpectTimeJob {
}
if(Objects.equals(orderSourceMap.get(item.getOrderNo()),SyncPlatformEnum.Source.TRADE_PLATFORM.getCode())){
syncSmbExpectList.add(dto);
}else{
//集煤宝的运单预计时间也要同步给马上来供应链,马上来供应链同步给场站
syncNewOwnerClientExpectList.add(dto);
}
if(Objects.equals(orderSourceMap.get(item.getOrderNo()),SyncPlatformEnum.Source.NEW_OWNER_CLIENT.getCode())){
syncNewOwnerClientExpectList.add(dto);
}
}
......
package com.clx.performance.job;
import com.clx.performance.config.LoadAppConfig;
import com.clx.performance.config.PerformanceSmartCompanyNoConfig;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OrderChildWeighPictureDao;
import com.clx.performance.enums.AppEnum;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.model.App;
import com.clx.performance.enums.SaleBuyEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderChildWeighPicture;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.struct.OrderChildWeighPictureStruct;
import com.msl.common.job.JobLog;
import com.msl.common.open.OpenClient;
import com.msl.common.open.RequestConfig;
import com.msl.common.result.Result;
import com.smart.weight.action.WeighingSignatureAction;
import com.smart.weight.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeightChildSignatureDto;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
......@@ -44,10 +39,7 @@ public class WeighingOderPictureJob{
private OrderChildWeighPictureDao pictureDao;
@Autowired
private PerformanceSmartCompanyNoConfig companyNoConfig;
@Autowired
private LoadAppConfig loadAppConfig;
private OrderChildService orderChildService;
/**
......@@ -78,34 +70,21 @@ public class WeighingOderPictureJob{
//查询运单下的电子磅单数据
if(CollectionUtils.isNotEmpty(orderChilds)){
App app = loadAppConfig.getApp(AppEnum.UniqueIdentifier.SMART_WEIGHT.getCode());//对接场站配置信息
//组装配置信息
RequestConfig config = new RequestConfig()
.setAppId(app.getAppNo())
.setAppKey(app.getAppKey())
.setGatewayUrl(app.getCallback());
//集合对象
List<OrderChildWeighPicture> pictures = new ArrayList<>();
for(OrderChild orderChild:orderChilds){
//通过运单号码查询电子磅单图片
WeighingSignatureAction weightAction = new WeighingSignatureAction();
weightAction.setChildNo(orderChild.getChildNo());
weightAction.setCustomerRelationNo(String.valueOf(companyNoConfig.getCompanyNo()));
log.info("job请求电子磅单参数,{}",weightAction);
Result<List<WeighingSignatureDto>> weighSignature = OpenClient.doAction(config, weightAction);
log.info("job请求电子磅单返回结果,{}",weighSignature);
//通过运单号查询电子磅单图片
WeightChildSignatureDto weighingSignature = orderChildService.getWeighingSignature(orderChild.getChildNo(), SaleBuyEnum.Type.BUY.getCode());
//数据处理
if(!Objects.equals(weighSignature.getCode(),0)){
if(Objects.isNull(weighingSignature) || CollectionUtils.isEmpty(weighingSignature.getWeighingSignatureList())){
continue;
}
List<WeighingSignatureDto> weighSignatures = weighSignature.getData();
if (CollectionUtils.isNotEmpty(weighSignatures)) {
for(WeighingSignatureDto weighingSignatureDto:weighSignatures){
OrderChildWeighPicture picture = pictureStruct.convert(weighingSignatureDto);
picture.setChildNo(orderChild.getChildNo());//对象转换
pictures.add(picture);
}
List<WeighingSignatureDto> weighingSignatureList = weighingSignature.getWeighingSignatureList();
for(WeighingSignatureDto weighingSignatureDto:weighingSignatureList){
OrderChildWeighPicture picture = pictureStruct.convert(weighingSignatureDto);
picture.setChildNo(orderChild.getChildNo());//对象转换
pictures.add(picture);
}
}
......
......@@ -9,6 +9,7 @@ import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.model.settle.OrderChildSyncTransportRecord;
import com.clx.performance.model.settle.SettlementOwner;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.broker.OrderChildBrokerMqService;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.job.JobLog;
import com.xxl.job.core.context.XxlJobHelper;
......@@ -36,6 +37,7 @@ public class SettlementJob {
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDao settlementOwnerDao;
private final OrderChildSyncTransportRecordDao orderChildSyncTransportRecordDao;
private final OrderChildBrokerMqService orderChildBrokerMqService;
/**
* 同步无车承运运单开票类型
......@@ -129,4 +131,61 @@ public class SettlementJob {
}
}
/**
* 网络货运运单更新(测试)
*/
@XxlJob("settlementBrokerOrderChildUpdateTest")
public void settlementBrokerOrderChildUpdateTest() {
try {
List<String> childNoList=null;
String jobParam= XxlJobHelper.getJobParam();
log.info("网络货运运单更新, param:{}", jobParam);
if (StringUtils.isNotBlank(jobParam)) {
childNoList = JSON.parseArray(jobParam, String.class);
}
if (childNoList == null || childNoList.isEmpty()) {
return;
}
for (String childNo : childNoList) {
// 发送mq (运单更新)
orderChildBrokerMqService.orderChildUpdate(childNo);
}
} catch (Exception e) {
log.warn("网络货运运单更新失败,msg:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("网络货运运单更新失败", e);
}
}
/**
* 网络货运运单同步(测试)
*/
@XxlJob("settlementBrokerOrderChildSyncTest")
public void settlementBrokerOrderChildSyncTest() {
try {
List<String> childNoList=null;
String jobParam= XxlJobHelper.getJobParam();
log.info("网络货运运单同步, param:{}", jobParam);
if (StringUtils.isNotBlank(jobParam)) {
childNoList = JSON.parseArray(jobParam, String.class);
}
if (childNoList == null || childNoList.isEmpty()) {
return;
}
for (String childNo : childNoList) {
// 发送mq (运单同步)
orderChildBrokerMqService.orderChildSync(childNo);
}
} catch (Exception e) {
log.warn("网络货运运单同步失败,msg:{}", ExceptionUtils.getStackTrace(e));
JobLog.error("网络货运运单同步失败", e);
}
}
}
......@@ -74,6 +74,7 @@ public class OrderGoodsDtsListener {
if(Objects.equals(updateType,DtsOperationTypeEnum.UPDATE.getCode())
&& (!Objects.equals(before.getOrderGoodsStatus(),after.getOrderGoodsStatus())
|| !Objects.equals(before.getSeniorLogisticsManagerId(),after.getSeniorLogisticsManagerId())
|| !Objects.equals(before.getExtractWeight(),after.getExtractWeight())
|| !Objects.equals(before.getPendingOrderFreight(),after.getPendingOrderFreight())
)){
isSend = true;
......
......@@ -39,6 +39,7 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@Update(" update order_goods set " +
" already_transport_weight = already_transport_weight - #{residueWeight}," +
" extract_weight = already_transport_weight," +
"order_goods_status = #{orderGoodsStatus} " +
" where id = #{id}")
void updateOrderGoodsWeightAlreadyAndStatus(@Param("id") Integer id, @Param("residueWeight") BigDecimal residueWeight, @Param("orderGoodsStatus") Integer orderGoodsStatus);
......
......@@ -13,7 +13,7 @@ import com.clx.performance.vo.app.owner.OwnerOrderChildVO;
import com.clx.performance.vo.pc.*;
import com.clx.performance.vo.pc.child.UpdateCarrierBatchCancelVO;
import com.msl.common.base.PageParam;
import com.smart.weight.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeightChildSignatureDto;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.math.BigDecimal;
......@@ -121,5 +121,5 @@ public interface OrderChildService {
UpdateCarrierBatchCancelVO updateCarrierBatchCancel(OrderChildCarrierBatchCancelParam param);
List<WeighingSignatureDto> getWeighingSignature(String childNo);
WeightChildSignatureDto getWeighingSignature(String childNo,Integer type);
}
......@@ -93,8 +93,9 @@ import com.purchase.manage.action.SupplyChainSupervisionLoadAction;
import com.purchase.manage.action.SupplyChainSupervisionLoadTruckAction;
import com.purchase.manage.dto.SupervisionLoadInfoDto;
import com.purchase.manage.dto.SupervisionLoadTruckInfoDto;
import com.smart.weight.action.WeighingSignatureAction;
import com.smart.weight.dto.WeighingSignatureDto;
import com.scm.lms.manage.action.LmsWeighingSignatureAction;
import com.smart.business.sdk.request.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeightChildSignatureDto;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.ocr.v20181119.OcrClient;
......@@ -2186,7 +2187,6 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setPoundRemark(orderChildPoundAuditDao.getPoundAuditDetail(childNo).orNull().getRemark());
}
//首次回显过磅电子磅单,其他情况回显用户上传的图片
List<OrderChildImage> imageList = orderChildImageDao.listLoadAndUnload(childNo).orElse(new ArrayList<>());
result.setLoadImageList(imageList.stream().filter(
item -> Objects.equals(item.getType(), OrderChildImage.Type.LOAD.getCode())).map(
......@@ -2195,11 +2195,6 @@ public class OrderChildServiceImpl implements OrderChildService {
item -> Objects.equals(item.getType(), OrderChildImage.Type.UNLOAD.getCode())).map(
item -> item.getImage()).collect(Collectors.toList()));
if(CollectionUtils.isEmpty(result.getUnloadImageList())){
result.setUnloadImageList(getWeighingSignature(childNo).stream().filter(
item -> Objects.equals(item.getType(), 2)).map(
item -> item.getOriginalImg()).collect(Collectors.toList()));//获取电子磅单图片
}
result.setArriveSendTime(orderChild.getArriveSendTime()==null?null:convertLocalDateTimeToDefaultString(orderChild.getArriveSendTime()));
result.setFirstLoadTime(orderChild.getFirstLoadTime()==null?null:convertLocalDateTimeToDefaultString(orderChild.getFirstLoadTime()));
......@@ -2208,6 +2203,32 @@ public class OrderChildServiceImpl implements OrderChildService {
result.setLoadTime(orderChild.getLoadTime()==null?null:convertLocalDateTimeToDefaultString(orderChild.getLoadTime()));
result.setUnloadTime(orderChild.getUnloadTime()==null?null:convertLocalDateTimeToDefaultString(orderChild.getUnloadTime()));
//首次回显过磅电子磅单,其他情况回显用户上传的图片
WeightChildSignatureDto weighingSignature = getWeighingSignature(childNo,SaleBuyEnum.Type.BUY.getCode());//获取电子磅单图片 类型:1-销售,2-采购
if(Objects.nonNull(weighingSignature)){
if(CollectionUtils.isEmpty(result.getUnloadImageList())){//卸车图片
if(CollectionUtils.isNotEmpty(weighingSignature.getWeighingSignatureList())){//有电子磅单
result.setUnloadImageList(weighingSignature.getWeighingSignatureList().stream().filter(
item -> Objects.equals(item.getType(), InputOutputEnum.Type.OUTPUT.getCode())).map(
item -> item.getOriginalImg())
.collect(Collectors.toList()));//获取出场电子磅单图片 后期优化优先获取盖章图片 目前电子签章是pdf
}
}
if(Objects.isNull(result.getUnloadTare())){//卸车皮重
result.setUnloadTare(weighingSignature.getTare());
}
if(Objects.isNull(result.getUnloadNet())){//卸车净重
result.setUnloadNet(weighingSignature.getNet());
}
if(Objects.isNull(result.getUnloadRough())){//卸车毛重
result.setUnloadRough(weighingSignature.getRough());
}
if(StringUtils.isBlank(result.getUnloadTime())){//卸车时间
result.setUnloadTime(weighingSignature.getOutTime() ==null?null:convertLocalDateTimeToDefaultString(weighingSignature.getOutTime()));
}
}
return result;
}
......@@ -2665,8 +2686,8 @@ public class OrderChildServiceImpl implements OrderChildService {
FeignAddressVO data = addressFeign.getSendAndReceiveAddress(orderChild.getSendAddressId(), orderChild.getReceiveAddressId()).getData();
FeignAddressVO.Address sendAddress = data.getSendAddress();
FeignAddressVO.Address receiveAddress = data.getReceiveAddress();
carrierOrderChildDetailVO.setSendDetailAddress(sendAddress.getProvince()+sendAddress.getCity()+sendAddress.getCounty()+sendAddress.getAddress());
carrierOrderChildDetailVO.setReceiveDetailAddress(receiveAddress.getProvince()+receiveAddress.getCity()+receiveAddress.getCounty()+receiveAddress.getAddress());
carrierOrderChildDetailVO.setSendDetailAddress(sendAddress.getAddress());
carrierOrderChildDetailVO.setReceiveDetailAddress(receiveAddress.getAddress());
return carrierOrderChildDetailVO;
}
......@@ -3506,11 +3527,15 @@ public class OrderChildServiceImpl implements OrderChildService {
return null;
}
List<String> images = getWeighingSignature(param.getChildNo()).stream().filter(
item -> Objects.equals(item.getType(), 2)).map(
item -> item.getOriginalImg()).collect(Collectors.toList());//获取电子磅单图片
if(CollectionUtils.isNotEmpty(images)){
return null;
WeightChildSignatureDto weighingSignature = getWeighingSignature(param.getChildNo(),SaleBuyEnum.Type.BUY.getCode());//获取电子磅单图片
if(Objects.nonNull(weighingSignature) && CollectionUtils.isNotEmpty(weighingSignature.getWeighingSignatureList())){//出场图片
List<String> images = weighingSignature.getWeighingSignatureList().stream().filter(
item -> Objects.equals(item.getType(), InputOutputEnum.Type.OUTPUT.getCode())).map(
item -> StringUtils.isNotBlank(item.getSignImg())? item.getSignImg():item.getOriginalImg())
.collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(images)){
return null;
}
}
try{
......@@ -3781,28 +3806,30 @@ public class OrderChildServiceImpl implements OrderChildService {
/**
* 通过运单号获取电子磅单相关信息
* @param childNo
* @param type 1 销售 2 采购
* @return
*/
public List<WeighingSignatureDto> getWeighingSignature(String childNo){
App app = loadAppConfig.getApp(AppEnum.UniqueIdentifier.SMART_WEIGHT.getCode());//对接场站配置信息
public WeightChildSignatureDto getWeighingSignature(String childNo,Integer type){
App app = loadAppConfig.getApp(AppEnum.UniqueIdentifier.LMS_MANAGE.getCode());//对接物流子系统配置信息
//组装配置信息
RequestConfig config = new RequestConfig()
.setAppId(app.getAppNo())
.setAppKey(app.getAppKey())
.setGatewayUrl(app.getCallback());
//通过运单号码查询电子磅单图片
WeighingSignatureAction weightAction = new WeighingSignatureAction();
LmsWeighingSignatureAction weightAction = new LmsWeighingSignatureAction();
weightAction.setChildNo(childNo);
weightAction.setCustomerRelationNo(String.valueOf(companyNoConfig.getCompanyNo()));
weightAction.setType(type);
log.info("接口请求电子磅单参数,{}",weightAction);
Result<List<WeighingSignatureDto>> weighSignature = OpenClient.doAction(config, weightAction);
Result<WeightChildSignatureDto> weighSignature = OpenClient.doAction(config, weightAction);
log.info("接口请求电子磅单返回结果,{}",weighSignature);
//数据处理
if(Objects.equals(weighSignature.getCode(),0)){
List<WeighingSignatureDto> weighSignatures = weighSignature.getData();
WeightChildSignatureDto weighSignatures = weighSignature.getData();
return weighSignatures;
}
return new ArrayList<>();
return new WeightChildSignatureDto();
}
}
package com.clx.performance.service.impl;
import com.clx.performance.enums.InputOutputEnum;
import com.clx.performance.enums.SaleBuyEnum;
import com.clx.performance.param.app.OrderChildWeighPictureParam;
import com.clx.performance.service.OrderChildService;
import com.clx.performance.service.OrderChildWeighPictureService;
import com.clx.performance.vo.app.PictureVo;
import com.smart.weight.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeightChildSignatureDto;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
......@@ -26,14 +29,15 @@ public class OrderChildWeighPictureServiceImpl implements OrderChildWeighPictur
@Override
public PictureVo getWeighPictures(OrderChildWeighPictureParam param) {
//电子磅单图片
List<WeighingSignatureDto> images = orderChildService.getWeighingSignature(param.getChildNo());
WeightChildSignatureDto unloadImages = orderChildService.getWeighingSignature(param.getChildNo(), SaleBuyEnum.Type.BUY.getCode());
PictureVo vo = new PictureVo();
vo.setLoadImages(images.stream().filter(
item -> Objects.equals(item.getType(), 1)).map(
item -> item.getOriginalImg()).collect(Collectors.toList()));
vo.setUnloadImages(images.stream().filter(
item -> Objects.equals(item.getType(), 2)).map(
item -> item.getOriginalImg()).collect(Collectors.toList()));
if (Objects.nonNull(unloadImages) && CollectionUtils.isNotEmpty(unloadImages.getWeighingSignatureList())){
vo.setUnloadImages(unloadImages.getWeighingSignatureList().stream().filter(
item -> Objects.equals(item.getType(), InputOutputEnum.Type.OUTPUT.getCode())).map(
item -> StringUtils.isNotBlank(item.getSignImg())? item.getSignImg():item.getOriginalImg()).collect(Collectors.toList()));
}
return vo;
}
}
......@@ -211,8 +211,10 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
@Override
public IPage<OrderGoodsVO> pageOrderGoodsList(PageOrderGoodsListParam param) {
long start2 = System.currentTimeMillis();
IPage<OrderGoodsVO> page = orderGoodsDao.pageOrderGoodsList(param);
long start3 = System.currentTimeMillis();
log.info("执行耗时2,{}",start3-start2);
if(CollectionUtils.isNotEmpty(page.getRecords())){
List<String> fleetNoList = new ArrayList<>();
List<String> orderNoList = new ArrayList<>();
......@@ -223,22 +225,27 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
}
orderNoList.add(record.getOrderNo());
}
long start5 = System.currentTimeMillis();
log.info("执行耗时3,{}",start5-start3);
if(CollectionUtils.isNotEmpty(fleetNoList)){
List<OrderGoodsBindTruckNumDTO> bindTruckNumList = orderGoodsTruckBindDao.queryOrderGoodsTruckNum(fleetNoList);
Map<String, Integer> map = bindTruckNumList.stream().collect(
Collectors.toMap(OrderGoodsBindTruckNumDTO::getOrderGoodsNo,OrderGoodsBindTruckNumDTO :: getTruckNum));
page.getRecords().forEach(item->item.setDispatchedOrders(map.get(item.getOrderGoodsNo())));
}
long start6 = System.currentTimeMillis();
log.info("执行耗时4,{}",start6-start5);
Optional<Map<String, FeignOrderInfoVO>> orderListOption = orderService.queryListOrderByOrderNoList(orderNoList);
if(!orderListOption.isPresent()){
log.warn("通过订单号批量查询订单信息失败,失败原因");
throw new ServiceSystemException(ResultEnum.DATA_ERROR,"查询货单对应的订单信息失败");
}
long start7 = System.currentTimeMillis();
log.info("执行耗时5,{}",start7-start6);
List<OrderGoods> orderGoods = orderGoodsDao.listInField(OrderGoods::getOrderNo, orderNoList);
long start8 = System.currentTimeMillis();
log.info("执行耗时6,{}",start8-start7);
Map<String, BigDecimal> orderExtractWeightMap = new HashMap<>();
for (OrderGoods orderGood : orderGoods) {
......@@ -248,6 +255,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
orderExtractWeightMap.put(orderNo,Objects.nonNull(orderExtractWeightMap.get(orderNo))?
orderExtractWeightMap.get(orderNo).add(weight): weight);
}
long start9 = System.currentTimeMillis();
log.info("执行耗时7,{}",start9-start8);
Map<String, FeignOrderInfoVO> orderInfoMap = orderListOption.get();
page.getRecords().forEach(item->{
FeignOrderInfoVO orderInfo = orderInfoMap.get(item.getOrderNo());
......@@ -259,6 +268,8 @@ public class OrderGoodsServiceImpl implements OrderGoodsService, InitializingBea
}
item.setResidueTransportWeight(calcOrderGoodsResidueWeight(item.getExtractWeight(),item.getAlreadyTransportWeight()));
});
long start11 = System.currentTimeMillis();
log.info("执行耗时8,{}",start11-start9);
}
return page;
}
......
......@@ -19,10 +19,7 @@ import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.PerformanceProgressDao;
import com.clx.performance.dao.PerformanceProgressLogDao;
import com.clx.performance.dto.gd.GdRouteDTO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderEnum;
import com.clx.performance.enums.PerformanceProgressEnum;
import com.clx.performance.enums.ResultEnum;
import com.clx.performance.enums.*;
import com.clx.performance.extranal.user.AddressService;
import com.clx.performance.extranal.user.OrderService;
import com.clx.performance.model.OrderChild;
......@@ -452,7 +449,7 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
//最后一个挂单中的货单的挂单时间为最早的挂单时间
firstPendingTime = item.getPendingOrderTime();
pendingWeight = pendingWeight.add(item.getExtractWeight());
pendingWeight = pendingWeight.add(calcPendingWeight(item));
}
PerformanceProgress update = new PerformanceProgress();
......@@ -463,6 +460,17 @@ public class PerformanceProgressServiceImpl implements PerformanceProgressServi
update.setPendingWeight(pendingWeight);
performanceProgressDao.updateEntityByKey(update);
}
//计算履约进度表货单的挂单吨数
private BigDecimal calcPendingWeight(OrderGoods item){
if(Objects.equals(item.getOrderGoodsStatus(), OrderGoodsStatusEnum.Status.CANCEL.getCode())){
return Objects.nonNull(item.getAlreadyTransportWeight())?item.getAlreadyTransportWeight():BigDecimal.ZERO;
}
return item.getExtractWeight();
}
//履约进度表----运单部分
@Override
public void dealPerformanceProgress4OrderChild(OrderChild data) {
......
......@@ -252,7 +252,8 @@ public class OrderChildBrokerServiceImpl implements OrderChildBrokerService {
orderChildInfo.setSourceOrderNo(orderChild.getOrderNo());
orderChildInfo.setSourceSettlementNo(settlementOwnerDetail.getSettlementNo());
orderChildInfo.setFreight(orderChild.getFreightPrice().multiply(orderChild.getUnloadNet())
orderChildInfo.setFreight(orderChild.getFreightPrice()
.multiply(orderChild.getUnloadNet().min(orderChild.getLoadNet()))
.setScale(0, RoundingMode.HALF_UP).intValue());
orderChildInfo.setDriverFreight(orderChild.getFreight().intValue());
orderChildInfo.setDriverFreightPrice(orderChild.getFreightPrice().intValue());
......
......@@ -3,7 +3,7 @@ package com.clx.performance.struct;
import com.clx.performance.model.OrderChildWeighPicture;
import com.msl.common.utils.DateStructUtil;
import com.msl.common.utils.DateUtils;
import com.smart.weight.dto.WeighingSignatureDto;
import com.smart.business.sdk.request.dto.WeighingSignatureDto;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring", uses = DateStructUtil.class, imports = {DateUtils.class})
......
package com.msl.common.open;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.common.reflect.TypeToken;
import com.google.gson.*;
import com.msl.common.open.action.Action;
import com.msl.common.open.message.Message;
import com.msl.common.result.Result;
import com.msl.common.utils.EncryptUtil;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
/**
* @author wanglq
* Date 2024/4/25
* Time 20:31
*/
@Slf4j
@SuppressWarnings("all")
public class OpenClient {
/**
* 执行action
*
* @param action action
* @param <T> 返回类型
* @return 结果
*/
public static <T> Result<T> doAction(RequestConfig config, Action<T> action) {
return doPost(config, action, "Action");
}
/**
* 发送消息
*
* @param message 消息
* @param <T> 返回类型
* @return 结果
*/
public static <T> Result<T> sendMessage(RequestConfig config, Message<T> message) {
return doPost(config, message, "Message");
}
/**
* 返回业务结果转换
*
* @param result 业务结果
* @param targetClass 目标类型
* @param <T> 目标类型
* @return 结果实体
*/
private static <T> Result<T> covertResult(String result, Type targetClass) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(LocalDateTime.class, new CustomLocalDateTimeDeserializer())
.create();
// 使用TypeToken来获取带有泛型信息的Type
Type type = new TypeToken<Result<T>>() {
}.getType();
Result<T> resultObject = gson.fromJson(result, type);
// 如果目标类型不为空,则尝试将data属性转换为目标类型
if (targetClass != null && resultObject.getData() != null) {
T dataObject = gson.fromJson(gson.toJson(resultObject.getData()), targetClass);
resultObject.setData(dataObject);
}
return resultObject;
}
/**
* 执行post请求
*
* @param openDto 请求参数
* @since 1.1.0
*/
private static <T> Result<T> doPost(RequestConfig config, Process<T> process, String type) {
try {
String str = JSON.toJSONString(process);
ProcessId processId = process.processId();
log.info("OpenClient发送 {}<{}> 请求参数:{}", type, processId.show(), str);
//构造加密实体
OpenDto openDto = OpenDto.buildEncrypt(config.getAppId(), str, config.getAppKey(), System.currentTimeMillis())
.setNamespace(processId.namespace())
.setOperate(processId.identity());
//执行请求
return HttpExecutor.post(config.getGatewayUrl(), null,
openDto)
//反序化
.map(r -> JSON.parseObject(r, new TypeReference<OpenDto>() {
}))
//数据解密
.mapTry(dto -> EncryptUtil.decrypt(dto.getData(), config.getAppKey()))
.peek(s -> log.info("{}<{}> 返回结果:{}", type, processId.show(), s))
//业务结果实体转换
.map(s -> {
Result<T> r = covertResult(s, process.returnType());
return r;
}).orElse(Result.fail());
} catch (Exception e) {
throw new RuntimeException("OpenClient请求失败", e);
}
}
public static class CustomLocalDateTimeDeserializer implements JsonDeserializer<LocalDateTime> {
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return LocalDateTime.parse(json.getAsString(), formatter);
} catch (DateTimeParseException e) {
throw new JsonParseException("Date parse error", e);
}
}
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论