|
|
|
@ -46,11 +46,14 @@ import com.dxhy.order.utils.JsonUtils; |
|
|
|
|
import com.dxhy.order.utils.NsrsbhUtils; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
import org.springframework.beans.BeanUtils; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
import org.springframework.util.CollectionUtils; |
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource; |
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.text.DecimalFormat; |
|
|
|
|
import java.util.*; |
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
@ -132,6 +135,9 @@ public class InvoiceServiceImpl implements InvoiceService { |
|
|
|
|
@Resource |
|
|
|
|
private TaxClassCodeMapper taxClassCodeMapper; |
|
|
|
|
|
|
|
|
|
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#0000"); |
|
|
|
|
private static final String CF = "cf"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@Transactional |
|
|
|
@ -139,41 +145,85 @@ public class InvoiceServiceImpl implements InvoiceService { |
|
|
|
|
List<PageInvoiceItem> pageInvoiceItemList = pageInvoiceReq.getPageInvoiceItemList(); |
|
|
|
|
//查询数据列表
|
|
|
|
|
List<CommonOrderInfo> commonOrderInfos = orderInfoService.batchQueryOrderInfoByOrderIdsAndNsrsbh(pageInvoiceItemList); |
|
|
|
|
List<CommonOrderInfo> commonOrderInfoList=new ArrayList<CommonOrderInfo>(); |
|
|
|
|
//购方是否为空、税编是否为空校验、成品油校验
|
|
|
|
|
for(CommonOrderInfo commonOrderInfo:commonOrderInfos){ |
|
|
|
|
if(StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfNsrsbh()) || StrUtil.isBlank(commonOrderInfo.getOrderInfo().getGhfMc()) ){ |
|
|
|
|
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"购方信息为空,请补全!"); |
|
|
|
|
} |
|
|
|
|
String cpy = ""; |
|
|
|
|
// String cpy = "";
|
|
|
|
|
String kcp = baseServiceConfig.getKcp(); |
|
|
|
|
boolean kcpMark = kcp.contains(commonOrderInfo.getOrderItemInfo().get(0).getSpbm()); |
|
|
|
|
List<OrderItemInfo> cpyOrderItems = new ArrayList<OrderItemInfo>(); |
|
|
|
|
List<OrderItemInfo> nocpyOrderItems = new ArrayList<OrderItemInfo>(); |
|
|
|
|
for(OrderItemInfo orderItemInfo: commonOrderInfo.getOrderItemInfo()){ |
|
|
|
|
if(StrUtil.isBlank(orderItemInfo.getSpbm())){ |
|
|
|
|
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"第"+orderItemInfo.getSphxh()+"行商品税编为空,请补全!"); |
|
|
|
|
}else { |
|
|
|
|
TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(orderItemInfo.getSpbm()); |
|
|
|
|
if(StrUtil.isNotBlank(cpy)){ |
|
|
|
|
if(!cpy.equals(taxClassCodeEntity.getCpy())){ |
|
|
|
|
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"成品油和非成品油税编不能混开,请做手动拆分处理!"); |
|
|
|
|
} |
|
|
|
|
// 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())){ |
|
|
|
|
//成品油明细
|
|
|
|
|
cpyOrderItems.add(orderItemInfo); |
|
|
|
|
}else { |
|
|
|
|
cpy = taxClassCodeEntity.getCpy(); |
|
|
|
|
//非成品油明细
|
|
|
|
|
nocpyOrderItems.add(orderItemInfo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(kcp.contains(orderItemInfo.getSpbm()) != kcpMark){ |
|
|
|
|
return R.error("结算单:"+commonOrderInfo.getOrderInfo().getDdh()+"矿产品与非矿产品税编不能混开,请做手动拆分处理!"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(ConfigureConstant.STRING_Y.equals(cpy) && commonOrderInfo.getOrderItemInfo().size()>ConfigureConstant.INT_8){ |
|
|
|
|
if(CollectionUtils.isEmpty(cpyOrderItems)||CollectionUtils.isEmpty(nocpyOrderItems)){ |
|
|
|
|
commonOrderInfo.setOrderItemInfo(CollectionUtils.isEmpty(cpyOrderItems)?nocpyOrderItems:nocpyOrderItems); |
|
|
|
|
commonOrderInfoList.add(commonOrderInfo); |
|
|
|
|
}else { |
|
|
|
|
//成品油和非成品油混合
|
|
|
|
|
OrderInfo cpyOrderInfo = new OrderInfo(); |
|
|
|
|
BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),cpyOrderInfo); |
|
|
|
|
cpyOrderInfo.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()); |
|
|
|
|
cpyOrderInfo.setDdh(commonOrderInfo.getOrderInfo().getDdh() + CF + DECIMAL_FORMAT.format(1)); |
|
|
|
|
CommonOrderInfo cpyCommonOrderInfo = new CommonOrderInfo(); |
|
|
|
|
BeanUtils.copyProperties(commonOrderInfo,cpyCommonOrderInfo); |
|
|
|
|
cpyCommonOrderInfo.setOrderItemInfo(cpyOrderItems); |
|
|
|
|
cpyCommonOrderInfo.setOrderInfo(cpyOrderInfo); |
|
|
|
|
commonOrderInfoList.add(cpyCommonOrderInfo); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OrderInfo nocpyOrderInfo = new OrderInfo(); |
|
|
|
|
BeanUtils.copyProperties(commonOrderInfo.getOrderInfo(),nocpyOrderInfo); |
|
|
|
|
nocpyOrderInfo.setKphjje(nocpyOrderItems.stream().map(m->new BigDecimal(m.getJshj())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); |
|
|
|
|
nocpyOrderInfo.setHjse(nocpyOrderItems.stream().map(m->new BigDecimal(m.getSe())).reduce(BigDecimal.ZERO, BigDecimal::add).toString()); |
|
|
|
|
nocpyOrderInfo.setDdh(commonOrderInfo.getOrderInfo().getDdh() + CF + DECIMAL_FORMAT.format(2)); |
|
|
|
|
CommonOrderInfo nocpyCommonOrderInfo = new CommonOrderInfo(); |
|
|
|
|
BeanUtils.copyProperties(commonOrderInfo,nocpyCommonOrderInfo); |
|
|
|
|
nocpyCommonOrderInfo.setOrderItemInfo(nocpyOrderItems); |
|
|
|
|
nocpyCommonOrderInfo.setOrderInfo(nocpyOrderInfo); |
|
|
|
|
commonOrderInfoList.add(nocpyCommonOrderInfo); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if(cpyOrderItems.size()>ConfigureConstant.INT_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行,请先进行手动拆分!");
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//客户冻结状态校验、确认智能赋码、单价误差校验
|
|
|
|
|
List<Map<String,String>> consumerList = new ArrayList<>(); |
|
|
|
|
List<Map<String,String>> confirmList = new ArrayList<>(); |
|
|
|
|
List<Map<String,String>> djOverflowList = new ArrayList<>(); |
|
|
|
|
for (CommonOrderInfo commonOrderInfo : commonOrderInfos) { |
|
|
|
|
for (CommonOrderInfo commonOrderInfo : commonOrderInfoList) { |
|
|
|
|
OrderInfo orderInfo = commonOrderInfo.getOrderInfo(); |
|
|
|
|
List<OrderItemInfo> orderItemInfoList = commonOrderInfo.getOrderItemInfo(); |
|
|
|
|
BuyerEntity buyerEntity = null; |
|
|
|
@ -203,6 +253,7 @@ public class InvoiceServiceImpl implements InvoiceService { |
|
|
|
|
confirmList.add(map); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// 订单超限额拆分
|
|
|
|
|
String terminalCode = simsBackService.getTerminalCode(commonOrderInfo.getOrderInfo().getXhfNsrsbh(), commonOrderInfo.getOrderInfo().getEntId()); |
|
|
|
|
List<CommonOrderInfo> originalCommonOrderInfo = new ArrayList<>(); |
|
|
|
@ -252,7 +303,7 @@ public class InvoiceServiceImpl implements InvoiceService { |
|
|
|
|
}else if(djOverflowList.size() > 0){ |
|
|
|
|
return R.error(ConfigureConstant.STRING_9003, "以下订单自动拆分时单价超过设定范围,请手动拆分",djOverflowList); |
|
|
|
|
}else { |
|
|
|
|
for (CommonOrderInfo f : commonOrderInfos) { |
|
|
|
|
for (CommonOrderInfo f : commonOrderInfoList) { |
|
|
|
|
TaxClassCodeEntity taxClassCodeEntity = taxClassCodeMapper.selectTaxClassCodeBySpbm(f.getOrderItemInfo().get(0).getSpbm()); |
|
|
|
|
if(ObjectUtil.isNotNull(taxClassCodeEntity) && ConfigureConstant.STRING_Y.equals(taxClassCodeEntity.getCpy())){ |
|
|
|
|
f.getOrderInfo().setQdBz(OrderInfoEnum.QDBZ_CODE_4.getKey()); |
|
|
|
@ -286,10 +337,7 @@ public class InvoiceServiceImpl implements InvoiceService { |
|
|
|
|
OrderProcessInfo processInfo = orderProcessService.selectOrderProcessInfoByProcessId(s.getOrderInfo().getProcessId(),null); |
|
|
|
|
processInfo.setYzfp(ConfigureConstant.STRING_1); |
|
|
|
|
orderProcessService.updateOrderProcessInfoByProcessId(processInfo, null); |
|
|
|
|
//
|
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return R.ok("生成预制发票成功,请到【发票处理中心】页面查看"); |
|
|
|
|