Merge pull request 'demand:定制导出性能优化' (#40) from develop into master

Reviewed-on: http://git.xdadan.loc/tanex/emis-service/pulls/40
This commit is contained in:
smshen 2025-05-27 15:46:34 +08:00
commit f46fa4eec8
3 changed files with 123 additions and 6 deletions

View File

@ -106,4 +106,13 @@ public interface EmisSettleInvoiceChRecordMapper extends BaseMapper<EmisSettleIn
* @return 结果
*/
public int deleteEmisSettleInvoiceChRecordByIds(Long[] ids);
/**
* 根据applySeqNo列表查询额外字段信息
*
* @param applySeqNoList 申请序号列表
* @return 额外字段信息列表
*/
public List<EmisSettleInvoiceChRecord> selectExtraFieldsByApplySeqNos(
@Param("applySeqNoList") List<String> applySeqNoList);
}

View File

@ -11,10 +11,7 @@
package com.xdadan.erp.emis.service.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -38,6 +35,7 @@ import com.xdadan.erp.emis.service.openbill.hx.HXOrderGoods;
import com.xdadan.erp.emis.service.openbill.hx.HXOrderInfo;
import com.xdadan.erp.emis.service.openbill.hx.HXSdk;
import com.xdadan.erp.emis.utils.WaybillHelper;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -217,14 +215,49 @@ public class EmisSettleInvoiceChRecordServiceImpl extends EmisBaseService implem
}
@Override
public List<EmisSettleInvoiceChRecord> selectEmisSettleInvoiceChRecordListAll(EmisSettleInvoiceChRecord emisSettleInvoiceChRecord) {
public List<EmisSettleInvoiceChRecord> selectEmisSettleInvoiceChRecordListAll(
EmisSettleInvoiceChRecord emisSettleInvoiceChRecord) {
long startTime = System.currentTimeMillis();
List<EmisSettleInvoiceChRecord> emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper.selectEmisSettleInvoiceChRecordListAll(emisSettleInvoiceChRecord);
if (StringUtil.isNotBlank(emisSettleInvoiceChRecord.getInvoiceNo())) {
List<EmisSettleInvoiceChRecord> emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper
.selectEmisSettleInvoiceChRecordList(emisSettleInvoiceChRecord);
setEmisSettleInvoiceChRecords(emisSettleInvoiceChRecords);
return emisSettleInvoiceChRecords;
}
List<EmisSettleInvoiceChRecord> emisSettleInvoiceChRecords = emisSettleInvoiceChRecordMapper
.selectEmisSettleInvoiceChRecordListAll(emisSettleInvoiceChRecord);
long endTime = System.currentTimeMillis();
log.info("查询渠道开票记录列表完成, 耗时: {}ms", (endTime - startTime));
return emisSettleInvoiceChRecords;
}
private void setEmisSettleInvoiceChRecords(List<EmisSettleInvoiceChRecord> emisSettleInvoiceChRecords) {
List<String> applySeqNoList = emisSettleInvoiceChRecords.stream()
.map(EmisSettleInvoiceChRecord::getApplySeqNo)
.collect(Collectors.toList());
if (!CollectionUtils.isEmpty(applySeqNoList)) {
List<EmisSettleInvoiceChRecord> extraInfoList = emisSettleInvoiceChRecordMapper
.selectExtraFieldsByApplySeqNos(applySeqNoList);
Map<String, EmisSettleInvoiceChRecord> extraInfoMap = extraInfoList.stream()
.collect(Collectors.toMap(
EmisSettleInvoiceChRecord::getApplySeqNo,
record -> record,
(existing, replacement) -> existing));
emisSettleInvoiceChRecords.forEach(record -> {
EmisSettleInvoiceChRecord extraInfo = extraInfoMap.get(record.getApplySeqNo());
if (extraInfo != null) {
record.setSendMonth(extraInfo.getSendMonth());
record.setSettleType(extraInfo.getSettleType());
record.setOpenBillRemark(extraInfo.getOpenBillRemark());
record.setPayDays(extraInfo.getPayDays());
}
});
}
}
@Override
public int checkHasSendToHx(String applySeqNo)

View File

@ -705,4 +705,79 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id}
</foreach>
</delete>
<select id="selectExtraFieldsByApplySeqNos" resultMap="EmisSettleInvoiceChRecordResult">
SELECT
a.id,
a.apply_seq_no,
(
SELECT GROUP_CONCAT(DISTINCT CONCAT(SUBSTRING(DATE_FORMAT(w.send_date, '%Y'), 3, 2), DATE_FORMAT(w.send_date, '%m')))
FROM emis_settle_invoice_ch_record bd
LEFT JOIN emis_settle_invoice_rel ir ON ir.apply_seq_no = bd.apply_seq_no AND ir.del_flag = '0'
LEFT JOIN emis_waybill w ON w.bill_code = ir.bill_no AND w.del_flag = '0'
WHERE bd.apply_seq_no = a.apply_seq_no AND bd.del_flag = '0'
) as send_month,
(
SELECT b.settle_type
FROM emis_settle_invoice_ch_record bd
LEFT JOIN emis_settle_invoice_bill_rel ibr ON ibr.apply_seq_no = bd.apply_seq_no AND ibr.del_flag = '0'
LEFT JOIN emis_settle_bill b ON b.settle_bill_no = ibr.settle_bill_no AND b.del_flag = '0'
WHERE bd.apply_seq_no = a.apply_seq_no AND bd.del_flag = '0'
LIMIT 1
) as settle_type,
(
SELECT
CASE
WHEN b.settle_type = '2' THEN
GROUP_CONCAT(DISTINCT
CONCAT(
CONCAT(SUBSTRING(DATE_FORMAT(w.send_date, '%Y'), 3, 2), DATE_FORMAT(w.send_date, '%m ')),
b.cust_name
) SEPARATOR '-'
)
ELSE
GROUP_CONCAT(DISTINCT
CONCAT(
DATE_FORMAT(w.send_date, '%m%d '),
w.send_company
) SEPARATOR '-'
)
END
FROM emis_settle_invoice_ch_record bd
LEFT JOIN emis_settle_invoice_rel ir ON ir.apply_seq_no = bd.apply_seq_no AND ir.del_flag = '0'
LEFT JOIN emis_waybill w ON w.bill_code = ir.bill_no AND w.del_flag = '0'
LEFT JOIN emis_settle_invoice_bill_rel ibr ON ibr.apply_seq_no = bd.apply_seq_no AND ibr.del_flag = '0'
LEFT JOIN emis_settle_bill b ON b.settle_bill_no = ibr.settle_bill_no AND b.del_flag = '0'
WHERE bd.apply_seq_no = a.apply_seq_no AND bd.del_flag = '0'
) as open_bill_remark,
(
SELECT GROUP_CONCAT(DISTINCT
CONCAT(
DATE_FORMAT(pr.trade_date, '%m/%d'),
' 已付(',
CASE pr.pay_type
WHEN '1' THEN '企业微信收款'
WHEN '2' THEN '工行汇款3890'
WHEN '3' THEN '微信支付'
WHEN '4' THEN '支付宝'
WHEN '5' THEN '其他'
WHEN '6' THEN '招行付款'
ELSE pr.pay_type
END,
')'
)
)
FROM emis_settle_invoice_ch_record bd
LEFT JOIN emis_settle_invoice_bill_rel ibr ON ibr.apply_seq_no = bd.apply_seq_no AND ibr.del_flag = '0'
LEFT JOIN emis_settle_pay_bill_rel pbr ON ibr.settle_bill_no = pbr.settle_bill_no
LEFT JOIN emis_settle_pay_record pr ON pr.pay_id = pbr.pay_id
WHERE bd.apply_seq_no = a.apply_seq_no AND bd.del_flag = '0'
) as pay_days
FROM emis_settle_invoice_ch_record a
WHERE a.del_flag = '0'
AND a.apply_seq_no IN
<foreach collection="applySeqNoList" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>