|
@@ -15,8 +15,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.lang.reflect.Array;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
@@ -53,6 +53,9 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
@Autowired
|
|
|
private RmsLineNodePointMapper rmsLineNodePointMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ AmsContractTruckPriceServiceImpl amsContractTruckPriceService;
|
|
|
+
|
|
|
/**
|
|
|
* 新增汽运单价
|
|
|
* @Author zzd
|
|
@@ -161,9 +164,9 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
//修改地址
|
|
|
amsContractTruckPriceMapper.updateaddressDeliveryAddress(map);
|
|
|
//修改运价
|
|
|
- amsContractTruckPriceMapper.updatePriceValue(map);
|
|
|
+ amsContractTruckPriceService.updatePriceValue(map);
|
|
|
//修改运输距离
|
|
|
- amsContractTruckPriceMapper.updateHaulDistance(map);
|
|
|
+ //amsContractTruckPriceMapper.updateHaulDistance(map);
|
|
|
//根据地址查询出单价表大部分值
|
|
|
AmsContractTransportPrice amsContractTransportPrice = amsContractTruckPriceMapper.getOnePriceMap(map);
|
|
|
//修改的时间
|
|
@@ -237,6 +240,14 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
|
|
|
@Override
|
|
|
public int updatePriceValue(Map<String,Object> map) {
|
|
|
+ BigDecimal haulDistance = DataChange.dataToBigDecimal(map.get("haulDistance"));
|
|
|
+ BigDecimal priceValue = DataChange.dataToBigDecimal(map.get("priceValue"));
|
|
|
+ if (haulDistance!=null&&haulDistance.compareTo(BigDecimal.ZERO)!=0){
|
|
|
+ BigDecimal priceTonKilometer = amsContractTruckPriceService.calculationPriceTonKilometerNew(haulDistance, priceValue);
|
|
|
+ map.put("priceTonKilometer",priceTonKilometer);
|
|
|
+ }else {
|
|
|
+ return amsContractTruckPriceMapper.updatePriceValueNew(map);
|
|
|
+ }
|
|
|
return amsContractTruckPriceMapper.updatePriceValue(map);
|
|
|
}
|
|
|
|
|
@@ -329,7 +340,7 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional
|
|
|
- public int batchUpdateTransportPriceByOilPrice(Map<String,Object> map){
|
|
|
+ public synchronized int batchUpdateTransportPriceByOilPrice(Map<String,Object> map){
|
|
|
//正数的判断条件
|
|
|
String flag= (String) map.get("flag");
|
|
|
//运输单价变化的条数
|
|
@@ -351,9 +362,12 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
}else{
|
|
|
//判断省市区(镇),拿到关联的中标数据
|
|
|
Map<String, Object> zb = amsContractTruckPriceMapper.selectByPlaceId(DataChange.dataToBigDecimal(stringObjectMap.get("placeId")));
|
|
|
+ if(zb == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
BigDecimal zbDistance = DataChange.dataToBigDecimal(zb.get("haulDistance"));
|
|
|
BigDecimal distance = DataChange.dataToBigDecimal(stringObjectMap.get("haulDistance"));
|
|
|
- if (zbDistance.intValue()!=0 && distance.intValue()!=0){
|
|
|
+ if (zbDistance != null && distance != null && zbDistance.intValue()!=0 && distance.intValue()!=0){
|
|
|
BigDecimal subtract = zbDistance.subtract(distance);
|
|
|
if (subtract.intValue()>10 || subtract.intValue()<-10){
|
|
|
//大于正负10km重新计算价格
|
|
@@ -375,7 +389,9 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
//获取该条单价的油价变化率阈值
|
|
|
BigDecimal oilpriceChangeThreshold = DataChange.dataToBigDecimal(stringObjectMap.get("oilpriceChangeThreshold"));
|
|
|
//计算油价变化率,公式:n=(当前油价-基数)÷基数×100% (9.06-8.26)/8.26
|
|
|
- BigDecimal n = (oilpriceBase.subtract(newOilPrice)).divide(newOilPrice,4,4);
|
|
|
+ BigDecimal n = (newOilPrice.subtract(oilpriceBase)).divide(oilpriceBase,4,4);
|
|
|
+ System.out.println(n);
|
|
|
+ //return i;
|
|
|
//若油价变化率超过该条单价的油价变化率阈值,修改原单价为历史数据,新增一条单价
|
|
|
if(n.abs().doubleValue()>oilpriceChangeThreshold.doubleValue()){
|
|
|
//加一个判断(如果数据为正数则需要二次判断,如果数据为负数则直接生效)
|
|
@@ -445,6 +461,7 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
AmsContractTransportPrice amsContractTransportPrice = amsContractTruckPriceMapper.selectByPrimaryKey(priceId);
|
|
|
//生成主键
|
|
|
BigDecimal i = amsContractTruckPriceMapper.selectMaxId();
|
|
|
+ //如果是钢材的单价那么就需要改变吨公里
|
|
|
amsContractTransportPrice.setPriceId(i);
|
|
|
//生成执行日期
|
|
|
amsContractTransportPrice.setPriceDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse((String) stringObjectMap.get("priceDate")));
|
|
@@ -505,6 +522,10 @@ public class AmsContractTruckPriceServiceImpl implements IAmsContractTruckPriceS
|
|
|
e.printStackTrace();
|
|
|
return 0;
|
|
|
}
|
|
|
+ if(amsContractTransportPrice.getType().compareTo(new BigDecimal(1)) == 0) {
|
|
|
+ BigDecimal newOldPriceTonKilometer = amsContractTransportPrice.getPriceValue().divide(amsContractTransportPrice.getHaulDistance(),4, RoundingMode.HALF_UP);
|
|
|
+ amsContractTransportPrice.setPriceTonKilometer(newOldPriceTonKilometer);
|
|
|
+ }
|
|
|
//新增数据
|
|
|
int insert = amsContractTruckPriceMapper.insert(amsContractTransportPrice);
|
|
|
return insert;
|