feature:山能易行开票、冲红、作废校验是否存在同一报账单不同的订单

release
gaorl 2 years ago
parent d1a1711a7f
commit b5b3fefe05
  1. 4
      order-management-consumer/src/main/java/com/dxhy/order/consumer/dao/OrderProcessInfoMapper.java
  2. 92
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/OrderInfoServiceImpl.java
  3. 57
      order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml
  4. 2
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java
  5. 12
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml

@ -164,4 +164,8 @@ public interface OrderProcessInfoMapper {
@Param("shList") List<String> shList, @Param("entList") List<String> entList);
List<Map> getOrderMessageByMap(@Param("map") Map map);
List<OrderProcessInfo> selectOrderProcessByFpqqlshs(@Param("fpqqlshs") List<String> fpqqlshs, @Param("shList") List<String> shList);
List<OrderProcessInfo> selectOrderProcessByYFpdmHm(@Param("yFpdmHms") List<String> yFpdmHms, @Param("shList") List<String> shList);
}

@ -177,7 +177,7 @@ public class OrderInfoServiceImpl implements OrderInfoService {
@Resource
private GsClientMapper gsClientMapper;
@Autowired
@Resource
private BuyerMapper buyerMapper;
@Resource
@ -2117,12 +2117,15 @@ public class OrderInfoServiceImpl implements OrderInfoService {
*/
@Override
public R checkInvoiceSync(String operation,String nsrsbh,String params){
// TODO 过滤一层系统来源
List<OrderProcessInfo> orderProcessInfos = null;
Map<String, List<OrderProcessInfo>> collect = null;
switch (operation){
case "0":
//根据报账单号查询未开发票数,且有效 param:发票请求流水号集合
List<OrderProcessInfo> orderProcessInfos = orderProcessInfoMapper.queryOrderProcessInfoByBzdhs(Arrays.asList(params), Arrays.asList(nsrsbh));
//根据报账单号查询未开发票数,且有效 param:发票请求流水号集合,是否需要添加来源校验
orderProcessInfos = orderProcessInfoMapper.queryOrderProcessInfoByBzdhs(Arrays.asList(params), Arrays.asList(nsrsbh));
//按照报账单分组统计
Map<String, List<OrderProcessInfo>> collect = orderProcessInfos.stream().collect(Collectors.groupingBy(t -> t.getBzdh()));
collect = orderProcessInfos.stream().collect(Collectors.groupingBy(t -> t.getBzdh()));
Map<String, List<String>> collect1 = Arrays.stream(params.split(",")).collect(Collectors.groupingBy(t -> t));
StringBuffer sb = new StringBuffer();
for (String s : collect1.keySet()) {
@ -2130,17 +2133,92 @@ public class OrderInfoServiceImpl implements OrderInfoService {
sb.append("报账单号:").append(s).append("存在多笔未开订单,");
}
}
if(StringUtils.isNotBlank(sb.toString())){
return R.error(sb.toString());
}
break;
case "1":
//根据报账单号查询未作废发票数,且有效 param:发票请求流水号集合
//根据根据发票流水号查询报账单号,报账单号查询未作废发票数,且有效 param:发票请求流水号集合
//1、根据流水号查询报账单号对应的流水号,如果查为1条,则过滤跳过,如果存在多条且有未开具提示
// 2、如果存在多条且有未作废的提示,如果存在已冲红提示
//AND ( oii.zf_bz = '0' OR oii.ch_bz = '0' )
List<String> paramList = Arrays.asList(params);
orderProcessInfos = orderProcessInfoMapper.selectOrderProcessByFpqqlshs(paramList, Arrays.asList(nsrsbh));
collect = orderProcessInfos.stream().collect(Collectors.groupingBy(t -> t.getBzdh()));
StringBuffer sb1 = new StringBuffer();
List<String> fpqqlsh = new ArrayList<>();
for (String s : collect.keySet()) {
List<OrderProcessInfo> orderProcessInfos1 = collect.get(s);
if(orderProcessInfos1.size() > 1){
//如果全部开具成功再添加否则返回报错信息
List<String> collect2 = orderProcessInfos1.stream()
.filter(t -> OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) || OrderInfoEnum.ORDER_STATUS_7.getKey().equals(t.getDdzt()))
.map(t -> t.getFpqqlsh()).collect(Collectors.toList());
if(!collect2.isEmpty()){
fpqqlsh.addAll(collect2);
}else{
sb1.append("本次作废存在商旅发票,,存在未开具成功结算单:" + collect2.stream().collect(Collectors.joining(",")));//结算单号
}
}
}
//直接return ,存在未开具情况不查作废情况了
if(StringUtils.isNotBlank(sb1.toString())){
return R.error(sb1.toString());
}
if(!fpqqlsh.isEmpty()){
List<OrderInvoiceInfo> invoiceInfos = orderInvoiceInfoMapper.selectInvoiceInfoByFpqqlshs(fpqqlsh);
List<String> collect2 = invoiceInfos.stream().filter(t -> !paramList.contains(t.getFpqqlsh())).map(t -> t.getFphm()).collect(Collectors.toList());
if(!collect2.isEmpty()){
return R.error("本次作废存在商旅发票,以下发票号码未作废:"+collect2.stream().collect(Collectors.joining(","))+",请注意");
}
}
break;
case "2":
//根据信息表编号查询到原发票号码的报账单 查询此报账单号是否存在多笔发票 param:信息表编号集合
//通过原发票号码 查询报账单号,查到对应流水号,在通过流水号查找 另外一张发票的状态
/**
* 原发票号码 查询order_invoice_info 在联查 order_process_info 查报账单号再通过报账单号反查 发票请求流水号
* 查到流水号在查红字冲红
*/
List<String> list = Arrays.asList(params);
List<String> yFpdmHm = list.stream().map(t->{
String[] split = t.split("-");
return "('" + split[0] + "','" + split[1] + "')";
}).collect(Collectors.toList());
orderProcessInfos = orderProcessInfoMapper.selectOrderProcessByYFpdmHm(yFpdmHm, Arrays.asList(nsrsbh));
collect = orderProcessInfos.stream().collect(Collectors.groupingBy(t -> t.getBzdh()));
StringBuffer sb2 = new StringBuffer();
List<String> yfpqqlsh = new ArrayList<>();
for (String s : collect.keySet()) {
List<OrderProcessInfo> orderProcessInfos1 = collect.get(s);
if(orderProcessInfos1.size() > 1){
//如果全部开具成功再添加否则返回报错信息
List<String> collect2 = orderProcessInfos1.stream()
.filter(t -> OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) || OrderInfoEnum.ORDER_STATUS_7.getKey().equals(t.getDdzt()))
.map(t -> t.getFpqqlsh()).collect(Collectors.toList());
if(!collect2.isEmpty()){
yfpqqlsh.addAll(collect2);
}else{
sb2.append("本次冲红存在商旅发票,,存在未开具成功结算单:" + collect2.stream().collect(Collectors.joining(",")));//结算单号
}
}
}
//直接return ,存在未开具情况不查作废情况了
if(StringUtils.isNotBlank(sb2.toString())){
return R.error(sb2.toString());
}
if(!yfpqqlsh.isEmpty()){
List<OrderInvoiceInfo> invoiceInfos = orderInvoiceInfoMapper.selectInvoiceInfoByFpqqlshs(yfpqqlsh);
List<String> collect2 = invoiceInfos.stream().filter(t -> !list.contains(t.getFpdm() + "-" + t.getFphm())).map(t -> t.getFphm()).collect(Collectors.toList());
if(!collect2.isEmpty()){
return R.error("本次冲红存在商旅发票,以下发票号码未冲红:"+collect2.stream().collect(Collectors.joining(","))+",请注意");
}
}
break;
}
return R.ok();
}

@ -1380,6 +1380,63 @@
</if>
</where>
</select>
<select id="selectOrderProcessByFpqqlshs" resultType="com.dxhy.order.model.OrderProcessInfo">
SELECT
op.fpqqlsh,op.bzdh,op.ddzt
FROM
order_process_info op
WHERE
op.bzdh IN (
SELECT
t.bzdh
FROM
order_process_info t
WHERE
t.fpqqlsh IN
<foreach collection="fpqqlshs" item="fpqqlsh" open="(" separator="," close=")">
#{fpqqlsh}
</foreach>
<if test="shList != null and shList.size() == 0">
and xhf_nsrsbh = ''
</if>
<if test="shList != null and shList.size() == 1">
and xhf_nsrsbh =
<foreach collection="shList" index="index" item="item">
#{item}
</foreach>
</if>
<if test="shList != null and shList.size() > 1">
and xhf_nsrsbh in
<foreach collection="shList" index="index" item="item"
open="(" separator="," close=")">
#{item}
</foreach>
</if>
AND t.xtly = 'SNYXX'
AND t.order_status = '0'
AND t.fpzl_dm in ('0','2')
)
</select>
<select id="selectOrderProcessByYFpdmHm" resultType="com.dxhy.order.model.OrderProcessInfo">
SELECT
op.fpqqlsh,op.bzdh,op.ddzt
FROM
order_process_info op
WHERE
op.bzdh IN (
SELECT
op1.bzdh
FROM
order_process_info op1 INNER JOIN order_invoice_info oii on op1.order_info_id = oii.order_info_id
WHERE
(oii.fpdm,oii.fphm) IN
<foreach collection="yFpdmHms" item="yFpdmHm" open="(" separator="," close=")">
#{yFpdmHm}
</foreach>
AND op1.xtly = 'SNYXX'
AND op1.order_status = '0'
)
</select>
<select id="queryOrderInfoTotalAmount"
resultType="com.dxhy.order.consumer.modules.order.model.vo.OrderInfoTotalAmountVO">
<bind name="dataType" value="${dataType}"/>

@ -246,4 +246,6 @@ public interface OrderInvoiceInfoMapper {
@Param("entList") List<String> entList);
List<String> countInoviceInfo(@Param("orderInfoIds")List<String> orderInfoIds);
List<OrderInvoiceInfo> selectInvoiceInfoByFpqqlshs(@Param("fpqqlshs") List<String> fpqqlshs);
}

@ -2249,4 +2249,16 @@
</if>
</where>
</update>
<select id="selectInvoiceInfoByFpqqlshs" resultType="com.dxhy.order.model.OrderInvoiceInfo">
SELECT
oii.fpqqlsh,oii.fpdm,oii.fphm,oii.ddh
FROM
order_invoice_info oii
WHERE
oii.fpqqlsh IN
<foreach collection="fpqqlshs" item="fpqqlsh" open="(" separator="," close=")">
#{fpqqlsh}
</foreach>
AND ( oii.zf_bz = '0' OR oii.ch_bz = '0' )
</select>
</mapper>

Loading…
Cancel
Save