修改成品油和非成品油混合预制发票逻辑

release
wangrangrang 2 years ago
parent 1e7f4fa3b7
commit 1ec9780df5
  1. 98
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java

@ -22,6 +22,9 @@ import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService
import com.dxhy.order.baseservice.module.thirdservice.simsback.service.SimsBackService; import com.dxhy.order.baseservice.module.thirdservice.simsback.service.SimsBackService;
import com.dxhy.order.baseservice.module.thirdservice.user.service.UserInfoService; import com.dxhy.order.baseservice.module.thirdservice.user.service.UserInfoService;
import com.dxhy.order.constant.*; import com.dxhy.order.constant.*;
import com.dxhy.order.consumer.model.page.PageCommonOrderInfo;
import com.dxhy.order.consumer.model.page.PageOrderInfo;
import com.dxhy.order.consumer.model.page.PageOrderItemInfo;
import com.dxhy.order.consumer.modules.manager.service.InvoiceService; import com.dxhy.order.consumer.modules.manager.service.InvoiceService;
import com.dxhy.order.consumer.modules.order.model.PageInvoiceItem; import com.dxhy.order.consumer.modules.order.model.PageInvoiceItem;
import com.dxhy.order.consumer.modules.order.model.PageInvoiceReq; import com.dxhy.order.consumer.modules.order.model.PageInvoiceReq;
@ -135,8 +138,8 @@ public class InvoiceServiceImpl implements InvoiceService {
@Resource @Resource
private TaxClassCodeMapper taxClassCodeMapper; private TaxClassCodeMapper taxClassCodeMapper;
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#0000"); @Resource
private static final String CF = "cf"; private OrderSplitService orderSplitService;
@Override @Override
@ -146,13 +149,15 @@ public class InvoiceServiceImpl implements InvoiceService {
//查询数据列表 //查询数据列表
List<CommonOrderInfo> commonOrderInfos = orderInfoService.batchQueryOrderInfoByOrderIdsAndNsrsbh(pageInvoiceItemList); List<CommonOrderInfo> commonOrderInfos = orderInfoService.batchQueryOrderInfoByOrderIdsAndNsrsbh(pageInvoiceItemList);
log.info("commonOrderInfos---->batch query order info"+JSON.toJSONString(commonOrderInfos)); log.info("commonOrderInfos---->batch query order info"+JSON.toJSONString(commonOrderInfos));
//存储成品油和非成品油不是混开的结算单
List<CommonOrderInfo> commonOrderInfoList=new ArrayList<CommonOrderInfo>(); List<CommonOrderInfo> commonOrderInfoList=new ArrayList<CommonOrderInfo>();
//存储成品油和非成品油混开的结算单
List<PageCommonOrderInfo> mixCommonOrderInfoList=new ArrayList<>();
//购方是否为空、税编是否为空校验、成品油校验 //购方是否为空、税编是否为空校验、成品油校验
for(CommonOrderInfo commonOrderInfo:commonOrderInfos){ for(CommonOrderInfo commonOrderInfo:commonOrderInfos){
if(StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfNsrsbh()) || StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfMc()) ){ if(StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfNsrsbh()) || StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfMc()) ){
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"购方信息为空,请补全!"); return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"购方信息为空,请补全!");
} }
// String cpy = "";
String kcp = baseServiceConfig.getKcp(); String kcp = baseServiceConfig.getKcp();
boolean kcpMark = kcp.contains(commonOrderInfo.getOrderItemInfo().get(0).getSpbm()); boolean kcpMark = kcp.contains(commonOrderInfo.getOrderItemInfo().get(0).getSpbm());
List<OrderItemInfo> cpyOrderItems = new ArrayList<OrderItemInfo>(); List<OrderItemInfo> cpyOrderItems = new ArrayList<OrderItemInfo>();
@ -162,14 +167,6 @@ public class InvoiceServiceImpl implements InvoiceService {
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"第"+orderItemInfo.getSphxh()+"行商品税编为空,请补全!"); return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"第"+orderItemInfo.getSphxh()+"行商品税编为空,请补全!");
}else { }else {
TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(orderItemInfo.getSpbm()); TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(orderItemInfo.getSpbm());
// if(StrUtil.isNotBlank(cpy)){
// if(!cpy.equals(taxClassCodeEntity.getCpy())){
// return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"成品油和非成品油税编不能混开,请做手动拆分处理!");
// }
// }else {
// cpy = taxClassCodeEntity.getCpy();
// }
//
if(ConfigureConstant.STRING_Y.equals(taxClassCodeEntity.getCpy())){ if(ConfigureConstant.STRING_Y.equals(taxClassCodeEntity.getCpy())){
//成品油明细 //成品油明细
cpyOrderItems.add(orderItemInfo); cpyOrderItems.add(orderItemInfo);
@ -187,41 +184,58 @@ public class InvoiceServiceImpl implements InvoiceService {
commonOrderInfo.setOrderItemInfo(CollectionUtils.isEmpty(cpyOrderItems)?nocpyOrderItems:nocpyOrderItems); commonOrderInfo.setOrderItemInfo(CollectionUtils.isEmpty(cpyOrderItems)?nocpyOrderItems:nocpyOrderItems);
commonOrderInfoList.add(commonOrderInfo); commonOrderInfoList.add(commonOrderInfo);
}else { }else {
//封装成品油
PageCommonOrderInfo cpyPageCommonOrderInfo = new PageCommonOrderInfo();
//拼接自动按照明细行拆分所需要的数据
log.info("cpyOrderItems》》》》》》》》"+JSON.toJSONString(cpyOrderItems)); log.info("cpyOrderItems》》》》》》》》"+JSON.toJSONString(cpyOrderItems));
log.info("nocpyOrderItems》》》》》》》》"+JSON.toJSONString(nocpyOrderItems)); log.info("nocpyOrderItems》》》》》》》》"+JSON.toJSONString(nocpyOrderItems));
//成品油和非成品油混合 //成品油和非成品油混合
OrderInfo cpyOrderInfo = new OrderInfo(); PageOrderInfo cpyPageOrderInfo = new PageOrderInfo();
BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),cpyOrderInfo); BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),cpyPageOrderInfo);
cpyOrderInfo.setHjbhsje(cpyOrderItems.stream().map(m->new BigDecimal(m.getXmje())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); cpyPageOrderInfo.setKphjje(cpyOrderItems.stream().map(m->new BigDecimal(m.getJshj())).reduce(BigDecimal.ZERO, BigDecimal::add).toString());
cpyOrderInfo.setHjse(cpyOrderItems.stream().map(m->new BigDecimal(m.getSe())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); List<PageOrderItemInfo> cpyOrderItemInfo = new ArrayList<PageOrderItemInfo>();
cpyOrderInfo.setDdh(commonOrderInfo.getOrderInfo().getDdh() + CF + DECIMAL_FORMAT.format(1)); for (OrderItemInfo cpyOrderItem : cpyOrderItems) {
CommonOrderInfo cpyCommonOrderInfo = new CommonOrderInfo(); PageOrderItemInfo pageOrderItemInfo = new PageOrderItemInfo();
BeanUtils.copyProperties(commonOrderInfo,cpyCommonOrderInfo); BeanUtils.copyProperties(cpyOrderItem,cpyOrderItemInfo);
cpyCommonOrderInfo.setOrderItemInfo(cpyOrderItems); cpyOrderItemInfo.add(pageOrderItemInfo);
cpyCommonOrderInfo.setOrderInfo(cpyOrderInfo); }
commonOrderInfoList.add(cpyCommonOrderInfo); cpyPageCommonOrderInfo.setOrderInfo(cpyPageOrderInfo);
cpyPageCommonOrderInfo.setOrderItemInfo(cpyOrderItemInfo);
mixCommonOrderInfoList.add(cpyPageCommonOrderInfo);
OrderInfo nocpyOrderInfo = new OrderInfo(); //封装非成品油
BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),nocpyOrderInfo); PageCommonOrderInfo nocpyPageCommonOrderInfo = new PageCommonOrderInfo();
nocpyOrderInfo.setHjbhsje(nocpyOrderItems.stream().map(m->new BigDecimal(m.getXmje())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); //成品油和非成品油混合
nocpyOrderInfo.setHjse(nocpyOrderItems.stream().map(m->new BigDecimal(m.getSe())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); PageOrderInfo nocpyPageOrderInfo = new PageOrderInfo();
nocpyOrderInfo.setDdh(commonOrderInfo.getOrderInfo().getDdh() + CF + DECIMAL_FORMAT.format(2)); BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),nocpyPageOrderInfo);
CommonOrderInfo nocpyCommonOrderInfo = new CommonOrderInfo(); nocpyPageOrderInfo.setKphjje(nocpyOrderItems.stream().map(m->new BigDecimal(m.getJshj())).reduce(BigDecimal.ZERO, BigDecimal::add).toString());
BeanUtils.copyProperties(commonOrderInfo,nocpyCommonOrderInfo); List<PageOrderItemInfo> nocpyOrderItemInfo = new ArrayList<PageOrderItemInfo>();
nocpyCommonOrderInfo.setOrderItemInfo(nocpyOrderItems); for (OrderItemInfo nocpyOrderItem : nocpyOrderItems) {
nocpyCommonOrderInfo.setOrderInfo(nocpyOrderInfo); PageOrderItemInfo pageOrderItemInfo = new PageOrderItemInfo();
commonOrderInfoList.add(nocpyCommonOrderInfo); BeanUtils.copyProperties(nocpyOrderItem,nocpyOrderItemInfo);
nocpyOrderItemInfo.add(pageOrderItemInfo);
}
nocpyPageCommonOrderInfo.setOrderInfo(nocpyPageOrderInfo);
nocpyPageCommonOrderInfo.setOrderItemInfo(nocpyOrderItemInfo);
mixCommonOrderInfoList.add(nocpyPageCommonOrderInfo);
} }
if(cpyOrderItems.size()>ConfigureConstant.INT_8){ if(cpyOrderItems.size()>ConfigureConstant.INT_8){
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"是成品油发票,明细行数不能超过8行,请先进行手动拆分!"); return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"是成品油发票,明细行数不能超过8行,请先进行手动拆分!");
} }
// if(ConfigureConstant.STRING_Y.equals(cpy) && commonOrderInfo.getOrderItemInfo().size()>ConfigureConstant.INT_8){
// return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"是成品油发票,明细行数不能超过8行,请先进行手动拆分!");
// }
} }
//如果是混开的 走明细拆分
if(!CollectionUtils.isEmpty(mixCommonOrderInfoList)){
try {
orderSplitService.saveOrderSplitOrder(mixCommonOrderInfoList);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
//如果不是混开的 走原来的逻辑
if(CollectionUtils.isEmpty(commonOrderInfoList)){
return R.ok("生成预制发票成功,请到【发票处理中心】页面查看");
}
//客户冻结状态校验、确认智能赋码、单价误差校验 //客户冻结状态校验、确认智能赋码、单价误差校验
List<Map<String,String>> consumerList = new ArrayList<>(); List<Map<String,String>> consumerList = new ArrayList<>();
List<Map<String,String>> confirmList = new ArrayList<>(); List<Map<String,String>> confirmList = new ArrayList<>();
@ -294,17 +308,21 @@ public class InvoiceServiceImpl implements InvoiceService {
} }
} else { } else {
log.error("{}校验单价容差范围发生错误:在原结算单中未匹配到唯一明细,找到了{}条", LOGGER_MSG, collect.size()); log.error("{}校验单价容差范围发生错误:在原结算单中未匹配到唯一明细,找到了{}条", LOGGER_MSG, collect.size());
R.error("校验单价容差范围发生错误:在原结算单中未匹配到唯一明细"); // R.error("校验单价容差范围发生错误:在原结算单中未匹配到唯一明细");
throw new RuntimeException("校验单价容差范围发生错误:在原结算单中未匹配到唯一明细");
} }
}); });
}); });
} }
if(consumerList.size()>0){ if(consumerList.size()>0){
return R.error(ConfigureConstant.STRING_9001, "以下结算单中客户的状态为“冻结”状态,不能进行开票。",consumerList); // return R.error(ConfigureConstant.STRING_9001, "以下结算单中客户的状态为“冻结”状态,不能进行开票。",consumerList);
throw new RuntimeException(String.format("以下结算单中%s客户的状态为“冻结”状态,不能进行开票。",consumerList));
}else if((StrUtil.isBlank(pageInvoiceReq.getConfirmZnfm()) || !ConfigureConstant.STRING_0.equals(pageInvoiceReq.getConfirmZnfm())) && confirmList.size()>0){ }else if((StrUtil.isBlank(pageInvoiceReq.getConfirmZnfm()) || !ConfigureConstant.STRING_0.equals(pageInvoiceReq.getConfirmZnfm())) && confirmList.size()>0){
return R.error(ConfigureConstant.STRING_9002,"请确认以下物料税收分类编码是否准确",confirmList); // return R.error(ConfigureConstant.STRING_9002,"请确认以下物料税收分类编码是否准确",confirmList);
throw new RuntimeException(String.format("请确认以下物料税收分类编码是否准确",confirmList));
}else if(djOverflowList.size() > 0){ }else if(djOverflowList.size() > 0){
return R.error(ConfigureConstant.STRING_9003, "以下订单自动拆分时单价超过设定范围,请手动拆分",djOverflowList); // return R.error(ConfigureConstant.STRING_9003, "以下订单自动拆分时单价超过设定范围,请手动拆分",djOverflowList);
throw new RuntimeException(String.format("以下订单自动拆分时单价超过设定范围,请手动拆分",djOverflowList));
}else { }else {
for (CommonOrderInfo f : commonOrderInfoList) { for (CommonOrderInfo f : commonOrderInfoList) {
TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(f.getOrderItemInfo().get(0).getSpbm()); TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(f.getOrderItemInfo().get(0).getSpbm());

Loading…
Cancel
Save