package com.ruoyi.system.service.impl;
|
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import com.ruoyi.common.utils.DateUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.system.domain.SysInvoice;
|
import com.ruoyi.system.mapper.SysInvoiceMapper;
|
import com.ruoyi.system.mapper.LegacyInvoiceMapper;
|
import com.ruoyi.system.mapper.SysUserMapper;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.system.service.ISysInvoiceService;
|
|
/**
|
* 发票申请Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2026-02-02
|
*/
|
@Service
|
public class SysInvoiceServiceImpl implements ISysInvoiceService
|
{
|
private static final Logger log = LoggerFactory.getLogger(SysInvoiceServiceImpl.class);
|
|
@Autowired
|
private SysInvoiceMapper sysInvoiceMapper;
|
|
@Autowired
|
private LegacyInvoiceMapper legacyInvoiceMapper;
|
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
|
/**
|
* 查询发票申请
|
*
|
* @param invoiceId 发票申请主键
|
* @return 发票申请
|
*/
|
@Override
|
public SysInvoice selectSysInvoiceByInvoiceId(Long invoiceId)
|
{
|
return sysInvoiceMapper.selectSysInvoiceByInvoiceId(invoiceId);
|
}
|
|
/**
|
* 查询发票申请列表
|
*
|
* @param sysInvoice 发票申请
|
* @return 发票申请
|
*/
|
@Override
|
public List<SysInvoice> selectSysInvoiceList(SysInvoice sysInvoice)
|
{
|
return sysInvoiceMapper.selectSysInvoiceList(sysInvoice);
|
}
|
|
/**
|
* 查询我的发票申请列表(App端,返回Map包含serviceCode)
|
*
|
* @param sysInvoice 发票申请
|
* @return 发票申请
|
*/
|
@Override
|
public List<Map<String, Object>> selectMyInvoiceList(SysInvoice sysInvoice)
|
{
|
return sysInvoiceMapper.selectMyInvoiceList(sysInvoice);
|
}
|
|
/**
|
* 新增发票申请
|
*
|
* @param sysInvoice 发票申请
|
* @return 结果
|
*/
|
@Override
|
public int insertSysInvoice(SysInvoice sysInvoice)
|
{
|
sysInvoice.setApplyTime(DateUtils.getNowDate());
|
sysInvoice.setStatus(0); // 待审核
|
sysInvoice.setSyncStatus(0); // 未同步
|
int rows = sysInvoiceMapper.insertSysInvoice(sysInvoice);
|
|
// 自动尝试同步到旧系统
|
if (rows > 0) {
|
try {
|
syncToLegacySystem(sysInvoice.getInvoiceId());
|
} catch (Exception e) {
|
log.error("同步发票申请到旧系统失败", e);
|
}
|
}
|
return rows;
|
}
|
|
/**
|
* 修改发票申请
|
*
|
* @param sysInvoice 发票申请
|
* @return 结果
|
*/
|
@Override
|
public int updateSysInvoice(SysInvoice sysInvoice)
|
{
|
return sysInvoiceMapper.updateSysInvoice(sysInvoice);
|
}
|
|
/**
|
* 批量删除发票申请
|
*
|
* @param invoiceIds 需要删除的发票申请主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteSysInvoiceByInvoiceIds(Long[] invoiceIds)
|
{
|
return sysInvoiceMapper.deleteSysInvoiceByInvoiceIds(invoiceIds);
|
}
|
|
/**
|
* 删除发票申请信息
|
*
|
* @param invoiceId 发票申请主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteSysInvoiceByInvoiceId(Long invoiceId)
|
{
|
return sysInvoiceMapper.deleteSysInvoiceByInvoiceId(invoiceId);
|
}
|
|
/**
|
* 同步发票申请到旧系统 (SQL Server)
|
*/
|
@Override
|
public int syncToLegacySystem(Long invoiceId) {
|
SysInvoice invoice = sysInvoiceMapper.selectSysInvoiceByInvoiceId(invoiceId);
|
if (invoice == null) return 0;
|
|
Map<String, Object> params = new HashMap<>();
|
params.put("ServiceOrderIDPK", invoice.getLegacyServiceOrderId());
|
params.put("InvoiceType", invoice.getInvoiceType());
|
params.put("InvoiceName", invoice.getInvoiceName());
|
params.put("InvoiceMakeout", invoice.getInvoiceRemarks());
|
params.put("InvoiceCompanyPhone", invoice.getContactPhone());
|
params.put("InvoiceCompanyID", ""); // 税号字段若有可补
|
params.put("InvoiceCompanyAdd", invoice.getCompanyAddress());
|
params.put("InvoiceCompanyBank", invoice.getCompanyBank());
|
params.put("InvoiceCompanyBankNo", invoice.getCompanyBankNo());
|
params.put("InvoiceZipCode", invoice.getZipCode());
|
params.put("Invoice_strAdd", invoice.getMailAddress());
|
params.put("Invoice_strName", invoice.getContactName());
|
params.put("Invoice_strPhone", invoice.getContactPhone());
|
params.put("Invoice_strEmail", invoice.getContactEmail());
|
params.put("InvoiceMoney", invoice.getInvoiceMoney());
|
|
// 通过创建人BID查询OA用户ID
|
Integer oaUserId = 0;
|
if (invoice.getApplyUserId() != null) {
|
SysUser user = sysUserMapper.selectUserById(invoice.getApplyUserId());
|
if (user != null && user.getOaUserId() != null) {
|
oaUserId = user.getOaUserId();
|
}
|
}
|
params.put("ApplyOAID", oaUserId);
|
|
try {
|
int rows = legacyInvoiceMapper.insertLegacyInvoice(params);
|
if (rows > 0) {
|
// SQL Server insert 会通过 useGeneratedKeys 返回自增 ID 到 Map 的 keyProperty
|
Object legacyId = params.get("InvoiceID");
|
if (legacyId != null) {
|
invoice.setLegacyInvoiceId(Integer.valueOf(legacyId.toString()));
|
invoice.setSyncStatus(1); // 已同步
|
sysInvoiceMapper.updateSysInvoice(invoice);
|
}
|
}
|
return rows;
|
} catch (Exception e) {
|
log.error("同步发票到旧系统异常: {}", e.getMessage());
|
invoice.setSyncStatus(2); // 同步失败
|
sysInvoiceMapper.updateSysInvoice(invoice);
|
throw e;
|
}
|
}
|
|
/**
|
* 从旧系统同步发票状态变化
|
*/
|
@Override
|
public void syncStatusFromLegacySystem() {
|
// 查询最近3天有变化的数据
|
String lastSyncTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.addDays(new Date(), -3));
|
List<Map<String, Object>> updatedList = legacyInvoiceMapper.selectUpdatedInvoices(lastSyncTime);
|
|
for (Map<String, Object> legacyData : updatedList) {
|
Integer legacyId = (Integer) legacyData.get("InvoiceID");
|
SysInvoice invoice = sysInvoiceMapper.selectSysInvoiceByLegacyId(legacyId);
|
|
if (invoice != null) {
|
// 状态映射:旧系统 AuditStatus (假设 3=通过, 4=拒绝, 其他=申请中)
|
Integer auditStatus = (Integer) legacyData.get("AuditStatus");
|
if (auditStatus != null) {
|
if (auditStatus == 3) invoice.setStatus(1); // 已通过
|
else if (auditStatus == 4) invoice.setStatus(2); // 已驳回
|
}
|
|
// 更新其他信息
|
if (legacyData.get("InvoiceNo") != null) {
|
invoice.setInvoiceNo(legacyData.get("InvoiceNo").toString());
|
}
|
|
// 发票文件链接 (优先取 EleCloud_PDF)
|
String pdf = legacyData.get("EleCloud_PDF") != null ? legacyData.get("EleCloud_PDF").toString() : null;
|
String url = legacyData.get("InvoiceURL") != null ? legacyData.get("InvoiceURL").toString() : null;
|
invoice.setInvoiceUrl(pdf != null && !pdf.isEmpty() ? pdf : url);
|
|
if (legacyData.get("AuditTime") != null) {
|
invoice.setAuditTime((Date) legacyData.get("AuditTime"));
|
}
|
if (legacyData.get("AuditMakeout") != null) {
|
invoice.setAuditRemarks(legacyData.get("AuditMakeout").toString());
|
}
|
|
sysInvoiceMapper.updateSysInvoice(invoice);
|
}
|
}
|
}
|
|
/**
|
* 查询可选择的任务列表
|
*/
|
@Override
|
public List<Map<String, Object>> selectSelectableTasks(Long userId, String searchKeyword, String serviceOrdClass) {
|
return sysInvoiceMapper.selectSelectableTasks(userId, searchKeyword, serviceOrdClass);
|
}
|
}
|