Merge branch 'release' into test

release
gaorl 2 years ago
commit 4a700d8e49
  1. 4
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/OrderCommonService.java
  2. 6
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/OrderMergeService.java
  3. 15
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderCommonServiceImpl.java
  4. 110
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java
  5. 114
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderMergeServiceImpl.java

@ -3,6 +3,7 @@ package com.dxhy.order.consumer.modules.order.service;
import com.dxhy.order.exception.OrderReceiveException;
import com.dxhy.order.model.*;
import com.dxhy.order.model.qd.OrderInfoQd;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -182,4 +183,7 @@ public interface OrderCommonService {
List<OrderProcessInfo> insertOrderProcessInfoList, List<OrderOriginExtendInfo> orderOriginList,
List<OrderInfoEsc> insertOrderEsc, List<OrderInfoJdc> insertOrderJdc, List<String> shList);
@Transactional
void saveItemMergeOrderInfo(CommonOrderInfo commonOrderInfo);
}

@ -1,5 +1,7 @@
package com.dxhy.order.consumer.modules.order.service;
import com.dxhy.order.model.CommonOrderInfo;
import com.dxhy.order.model.OrderItemInfo;
import com.dxhy.order.model.R;
import com.dxhy.order.consumer.modules.order.model.PageInvoiceItem;
import com.dxhy.order.consumer.modules.order.model.PageMergeReq;
@ -33,4 +35,8 @@ public interface OrderMergeService {
*/
R orderMergeCheck(List<PageInvoiceItem> orderIdList);
String queryMergeCommodityRuleType(String nsrsbh);
R orderItemMerge(CommonOrderInfo commonOrderInfo, List<OrderItemInfo> itemInfos);
}

@ -33,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;
/**
* 订单发票通用服务接口
@ -1556,4 +1557,18 @@ public class OrderCommonServiceImpl implements OrderCommonService {
}
}
@Override
public void saveItemMergeOrderInfo(CommonOrderInfo commonOrderInfo){
List<OrderItemInfo> orderItemInfoList = commonOrderInfo.getOrderItemInfo();
OrderInfo orderInfo = commonOrderInfo.getOrderInfo();
OrderProcessInfo processInfo = commonOrderInfo.getProcessInfo();
if(!orderItemInfoList.isEmpty()){
orderItemInfoMapper.deleteItemByItemId(orderItemInfoList.stream().map(t->t.getId()).collect(Collectors.toList()));
orderItemInfoMapper.insertOrderItemByList(orderItemInfoList);
}
orderInfoMapper.updateOrderInfoByOrderId(orderInfo,Arrays.asList(orderInfo.getNsrsbh()));
orderProcessInfoMapper.updateOrderProcessInfoByProcessId(processInfo,Arrays.asList(orderInfo.getNsrsbh()));
}
}

@ -186,6 +186,9 @@ public class OrderInfoServiceImpl implements OrderInfoService {
@Resource
private CommodityMapper commodityMapper;
@Resource
private OrderMergeService orderMergeService;
DecimalFormat format = new DecimalFormat("#.###");
@Override
@ -2030,107 +2033,26 @@ public class OrderInfoServiceImpl implements OrderInfoService {
List<OrderItemInfo> collect ;
if(itemList != null){
collect = orderItemInfos.stream().filter(t -> itemList.contains(t.getId()) && StringUtils.isNotBlank(t.getSpbm())).collect(Collectors.toList());
if(ObjectUtil.isNull(collect)){
return R.error("税收编码为空的不允许合并,请先更新税收编码");
}
}else{
collect = orderItemInfos;
collect = orderItemInfos.stream().filter(t -> StringUtils.isNotBlank(t.getSpbm())).collect(Collectors.toList());
}
//税编为空的不允许合并
if(orderItemInfos.size() != collect.size()){
return R.error("税收编码为空的不允许合并,请先更新税收编码");
}
List<OrderItemInfo> mergeOutItem = orderItemInfos.stream().filter(t -> !collect.contains(t)).collect(Collectors.toList());
TaxEquipmentInfo taxEquipmentInfo = simsBackService.queryTaxEquipment(orderInfo.getNsrsbh(), entId);
if(taxEquipmentInfo == null ||StringUtils.isBlank(taxEquipmentInfo.getSksbCode())){
return R.error("税控设备查询为空");
}
String sksbCode = taxEquipmentInfo.getSksbCode();
boolean termType = OrderInfoEnum.TAX_EQUIPMENT_FGBW.equals(sksbCode) || OrderInfoEnum.TAX_EQUIPMENT_FGUKEY.equals(sksbCode);
Map<String, List<OrderItemInfo>> collect1 = collect.stream().map(t->{
t.setXmmc(StringUtils.isBlank(t.getXmmc())?"":t.getXmmc());
t.setXmdw(StringUtils.isBlank(t.getXmdw())?"":t.getXmdw());
t.setGgxh(StringUtils.isBlank(t.getGgxh())?"":t.getGgxh());
t.setZxbm(StringUtils.isBlank(t.getZxbm())?"":t.getZxbm());
return t;
}).collect(Collectors.groupingBy(t -> t.getFphxz() + t.getXmmc() + t.getXmdw() + t.getGgxh() + t.getSl() + t.getSpbm() + t.getZxbm()));
List<OrderItemInfo> orderItemInfoList = new ArrayList<>();
List<String> deleteItem = new ArrayList<>();
BigDecimal diffJe = new BigDecimal("0");
BigDecimal diffSe = new BigDecimal("0");
for (List<OrderItemInfo> value : collect1.values()) {
if(value.size() == 1){continue;}
BigDecimal xmsl = new BigDecimal("0");
BigDecimal xmje = new BigDecimal("0");
BigDecimal se = new BigDecimal("0");
for (OrderItemInfo orderItemInfo : value) {
xmsl = xmsl.add(new BigDecimal(orderItemInfo.getXmsl()));
xmje = xmje.add(new BigDecimal(orderItemInfo.getXmje()));
se = se.add(new BigDecimal(orderItemInfo.getSe()));
}
OrderItemInfo orderItemInfo = value.get(0);
orderItemInfo.setXmsl(xmsl.toString());
orderItemInfo.setXmje(xmje.toString());
//重算单价
orderItemInfo.setXmdj(xmje.divide(xmsl,8,RoundingMode.HALF_UP).toString());
//重算税额
String hsbz = orderItemInfo.getHsbz();
BigDecimal taxRate = new BigDecimal(orderItemInfo.getSl());
BigDecimal taxAmount = new BigDecimal(orderItemInfo.getSe());
if (OrderInfoEnum.HSBZ_1.getKey().equals(hsbz)) {
taxAmount = xmje.divide(new BigDecimal("1").add(taxRate),0).multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
} else if (OrderInfoEnum.HSBZ_0.getKey().equals(hsbz)) {
taxAmount = xmje.multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
}
orderItemInfo.setCreateTime(new Date());
orderItemInfo.setSe(se.toString());
if((termType && se.subtract(taxAmount).abs().doubleValue() > 0.01) || (!termType &&se.subtract(taxAmount).abs().doubleValue() > 0.06)){
log.info("订单id:{}合并明细误差超过额度",orderInfoId);
BigDecimal taxAndAmount = xmje.add(se);
BigDecimal taxAmountNew = taxAndAmount.divide(new BigDecimal("1").add(taxRate),0).multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
BigDecimal xmjeNew = taxAndAmount.subtract(taxAmountNew);
orderItemInfo.setXmje(xmjeNew.toString());
orderItemInfo.setSe(taxAmountNew.toString());
if(StringUtils.isNotBlank(orderItemInfo.getXmsl())){
BigDecimal xmdj = xmjeNew.divide(xmsl, 8, RoundingMode.HALF_UP);
if(xmdj.multiply(xmsl).subtract(xmjeNew).doubleValue() > 0.01){
orderItemInfo.setXmsl(xmjeNew.divide(xmdj,8,RoundingMode.HALF_UP).toString());
orderInfo.setSksbCode(taxEquipmentInfo.getSksbCode());
BigDecimal hjse = orderItemInfos.stream().map(t -> new BigDecimal(t.getSe())).reduce(BigDecimal::add).get();
if(StringUtils.isBlank(orderInfo.getHjse())){
orderInfo.setHjse(hjse.toString());
}
orderItemInfo.setXmdj(xmdj.toString());
}
// return R.error("明细行号{}合并错误,合并明细超过0.06暂时不合并",orderItemInfo.getSphxh());
// diffJe = diffJe.add(xmjeNew.subtract(xmje));
// diffSe = diffSe.add(taxAmountNew.subtract(se));
}
orderItemInfoList.add(orderItemInfo);
deleteItem.addAll(value.stream().map(t->t.getId()).collect(Collectors.toList()));
}
log.debug("合并明细{}",JSONObject.toJSONString(orderItemInfoList));
if((termType && diffSe.abs().doubleValue() > 0.06) || (!termType && diffSe.abs().doubleValue() > 1.27)){
return R.error("合并失败,合并明细后价税合计超过总的误差范围");
}
if(!orderItemInfoList.isEmpty()){
orderItemInfoMapper.deleteItemByItemId(deleteItem);
orderItemInfoMapper.insertOrderItemByList(orderItemInfoList);
mergeOutItem.addAll(orderItemInfoList);
}
BigDecimal se = mergeOutItem.stream().map(t -> new BigDecimal(t.getSe())).reduce(BigDecimal::add).get();
//更新清单标志 重新设置金额
OrderInfo orderInfoNew = new OrderInfo();
orderInfoNew.setId(orderInfoId);
orderInfoNew.setUpdateTime(new Date());
//OrderProcessInfo orderProcessInfo = orderProcessInfoMapper.selectByOrderId(orderInfoId, null);
OrderProcessInfo orderProcessInfoNew = new OrderProcessInfo();
orderProcessInfoNew.setOrderInfoId(orderInfoId);
orderProcessInfoNew.setUpdateTime(new Date());
if("1".equals(orderInfo.getQdBz())&&orderItemInfos.size() - deleteItem.size() < 8 ){
orderInfoNew.setQdBz("0");
}
String bhsje = new BigDecimal(orderInfo.getKphjje()).subtract(se).toString();
orderInfoNew.setHjbhsje(bhsje);
orderInfoNew.setHjse(se.toString());
orderProcessInfoNew.setHjbhsje(bhsje);
orderProcessInfoNew.setKpse(se.toString());
orderMapper.updateOrderInfoByOrderId(orderInfoNew,Arrays.asList(orderInfo.getNsrsbh()));
orderProcessInfoMapper.updateOrderProcessInfoByProcessId(orderProcessInfoNew,Arrays.asList(orderInfo.getNsrsbh()));
return R.ok();
CommonOrderInfo commonOrderInfo = new CommonOrderInfo();
commonOrderInfo.setOrderItemInfo(collect);
commonOrderInfo.setOrderInfo(orderInfo);
return orderMergeService.orderItemMerge(commonOrderInfo,collect);
}
@Override

@ -3,6 +3,7 @@ package com.dxhy.order.consumer.modules.order.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.base.constant.*;
import com.dxhy.base.utils.OrderMergeUtil;
import com.dxhy.base.utils.PriceTaxSeparationUtilNew;
@ -36,6 +37,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@ -902,7 +904,8 @@ public class OrderMergeServiceImpl implements OrderMergeService {
* @param nsrsbh 税号
* @return java.lang.String
*/
private String queryMergeCommodityRuleType(String nsrsbh){
@Override
public String queryMergeCommodityRuleType(String nsrsbh){
//查询合并同类商品规则
BaseInfoQueryBO baseInfoQueryBO = new BaseInfoQueryBO();
baseInfoQueryBO.setTaxpayerCode(nsrsbh);
@ -920,4 +923,113 @@ public class OrderMergeServiceImpl implements OrderMergeService {
return mergeCommodityRuleType;
}
/**
*
* @param commonOrderInfo
* @param mergeInItem 参与合并的订单
* @return
*/
@Override
public R orderItemMerge(CommonOrderInfo commonOrderInfo, List<OrderItemInfo> mergeInItem){
List<OrderItemInfo> orderItemInfos = commonOrderInfo.getOrderItemInfo();
OrderInfo orderInfo = commonOrderInfo.getOrderInfo();
//集合求差集,不参与合并的明细
List<OrderItemInfo> mergeOutItem = orderItemInfos.stream().filter(t -> !mergeInItem.contains(t)).collect(Collectors.toList());
String sksbCode = orderInfo.getSksbCode();
boolean termType = OrderInfoEnum.TAX_EQUIPMENT_FGBW.equals(sksbCode) || OrderInfoEnum.TAX_EQUIPMENT_FGUKEY.equals(sksbCode);
//根据配置去判断合并规则
Map<String, List<OrderItemInfo>> collect1 = orderItemInfos.stream().map(t->{
t.setXmmc(StringUtils.isBlank(t.getXmmc())?"":t.getXmmc());
t.setXmdw(StringUtils.isBlank(t.getXmdw())?"":t.getXmdw());
t.setGgxh(StringUtils.isBlank(t.getGgxh())?"":t.getGgxh());
t.setZxbm(StringUtils.isBlank(t.getZxbm())?"":t.getZxbm());
return t;
}).collect(Collectors.groupingBy(t -> t.getFphxz() + t.getXmmc() + t.getXmdw() + t.getGgxh() + t.getSl() + t.getSpbm() + t.getZxbm()));
List<OrderItemInfo> orderItemInfoList = new ArrayList<>();
List<String> deleteItem = new ArrayList<>();
log.debug("明细合并前明细数据,{}",JSONObject.toJSONString(orderItemInfos));
for (List<OrderItemInfo> value : collect1.values()) {
if(value.size() == 1){continue;}
BigDecimal xmsl = new BigDecimal("0");
BigDecimal xmje = new BigDecimal("0");
BigDecimal se = new BigDecimal("0");
for (OrderItemInfo orderItemInfo : value) {
xmsl = xmsl.add(new BigDecimal(orderItemInfo.getXmsl()));
xmje = xmje.add(new BigDecimal(orderItemInfo.getXmje()));
se = se.add(new BigDecimal(orderItemInfo.getSe()));
}
OrderItemInfo orderItemInfo = value.get(0);
orderItemInfo.setXmsl(xmsl.toString());
orderItemInfo.setXmje(xmje.toString());
//重算单价
orderItemInfo.setXmdj(xmje.divide(xmsl,8, RoundingMode.HALF_UP).toString());
//重算税额
String hsbz = orderItemInfo.getHsbz();
BigDecimal taxRate = new BigDecimal(orderItemInfo.getSl());
BigDecimal taxAmount = new BigDecimal(orderItemInfo.getSe());
if (OrderInfoEnum.HSBZ_1.getKey().equals(hsbz)) {
taxAmount = xmje.divide(new BigDecimal("1").add(taxRate),0).multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
} else if (OrderInfoEnum.HSBZ_0.getKey().equals(hsbz)) {
taxAmount = xmje.multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
}
orderItemInfo.setCreateTime(new Date());
orderItemInfo.setSe(se.toString());
if((termType && se.subtract(taxAmount).abs().doubleValue() > 0.01) || (!termType &&se.subtract(taxAmount).abs().doubleValue() > 0.06)){
log.info("订单id:{}合并明细误差超过额度",orderInfo.getId());
BigDecimal taxAndAmount = xmje.add(se);
BigDecimal taxAmountNew = taxAndAmount.divide(new BigDecimal("1").add(taxRate),0).multiply(taxRate).setScale(2,RoundingMode.HALF_UP);
BigDecimal xmjeNew = taxAndAmount.subtract(taxAmountNew);
orderItemInfo.setXmje(xmjeNew.toString());
orderItemInfo.setSe(taxAmountNew.toString());
if(StringUtils.isNotBlank(orderItemInfo.getXmsl())){
BigDecimal xmdj = xmjeNew.divide(xmsl, 8, RoundingMode.HALF_UP);
if(xmdj.multiply(xmsl).subtract(xmjeNew).doubleValue() > 0.01){
orderItemInfo.setXmsl(xmjeNew.divide(xmdj,8,RoundingMode.HALF_UP).toString());
}
orderItemInfo.setXmdj(xmdj.toString());
}
}
orderItemInfoList.add(orderItemInfo);
deleteItem.addAll(value.stream().map(t->t.getId()).collect(Collectors.toList()));
}
if(!orderItemInfoList.isEmpty()){
mergeOutItem.addAll(orderItemInfoList);
}
log.debug("明细合并合并后{}", JSONObject.toJSONString(mergeOutItem));
//对比合计税额的误差,此处将不参与和与参与合并合并对比
BigDecimal hjse = mergeOutItem.stream().map(t -> new BigDecimal(t.getSe())).reduce(BigDecimal::add).get();
BigDecimal oldhjse = orderItemInfos.stream().map(t -> new BigDecimal(t.getSe())).reduce(BigDecimal::add).get();
if((termType && hjse.subtract(oldhjse).abs().doubleValue() > 0.06) || (!termType && hjse.subtract(oldhjse).abs().doubleValue() > 1.27)){
return R.error("合并失败,合并明细后价税合计超过总的误差范围");
}
//更新清单标志 重新设置金额
OrderInfo orderInfoNew = new OrderInfo();
orderInfoNew.setId(orderInfo.getId());
orderInfoNew.setUpdateTime(new Date());
//OrderProcessInfo orderProcessInfo = orderProcessInfoMapper.selectByOrderId(orderInfoId, null);
OrderProcessInfo orderProcessInfoNew = new OrderProcessInfo();
orderProcessInfoNew.setOrderInfoId(orderInfo.getId());
orderProcessInfoNew.setUpdateTime(new Date());
if("1".equals(orderInfo.getQdBz())&&orderItemInfos.size() - deleteItem.size() < 8 ){
orderInfoNew.setQdBz("0");
}
String bhsje = new BigDecimal(orderInfo.getKphjje()).subtract(hjse).toString();
orderInfoNew.setHjbhsje(bhsje);
orderInfoNew.setHjse(hjse.toString());
orderProcessInfoNew.setHjbhsje(bhsje);
orderProcessInfoNew.setKpse(hjse.toString());
commonOrderInfo.setOrderItemInfo(orderItemInfoList);
commonOrderInfo.setOrderInfo(orderInfoNew);
commonOrderInfo.setProcessInfo(orderProcessInfoNew);
try {
apiInvoiceCommonService.saveItemMergeOrderInfo(commonOrderInfo);
} catch (Exception e) {
log.error("明细合并更新数据库出错{}",e);
return R.error();
}
return R.ok();
}
}

Loading…
Cancel
Save