parent
c7c08817e6
commit
35608d9ad6
@ -0,0 +1,183 @@ |
||||
package com.dxhy.common.enums; |
||||
|
||||
/** |
||||
* @author jiaohongyang |
||||
*/ |
||||
public enum SNFplxEnum { |
||||
|
||||
/** |
||||
* 专票代码 |
||||
*/ |
||||
ZP("10100","01", 1), |
||||
|
||||
/** |
||||
* 货物运输专票 |
||||
*/ |
||||
HWYSZP("22000","02", 22), |
||||
|
||||
/** |
||||
* 机动车代码 |
||||
*/ |
||||
JDC("10104","03", 2), |
||||
/** |
||||
* 普票代码 |
||||
*/ |
||||
PP("10101","04", 3), |
||||
/** |
||||
* 电子票代码 |
||||
*/ |
||||
DZP("10102","10", 4), |
||||
/** |
||||
* 卷式发票代码 |
||||
*/ |
||||
JSP("10103","11", 5), |
||||
/** |
||||
* 通行费发票代码 |
||||
*/ |
||||
TXF("32000","14", 6), |
||||
|
||||
/** |
||||
* 二手车 |
||||
*/ |
||||
ESC("10105","15", 7), |
||||
|
||||
/** |
||||
* 电子专票 |
||||
*/ |
||||
DZZP("33000","08", 8), |
||||
|
||||
// HGJKS("17", 9),
|
||||
|
||||
/** |
||||
* 全电专票 |
||||
*/ |
||||
QDZP("10107","31",10), |
||||
|
||||
/** |
||||
* 全电普票 |
||||
*/ |
||||
QDPP("10108","32",11), |
||||
|
||||
/** |
||||
* 定额发票 |
||||
*/ |
||||
DEFP("10200","95",12), |
||||
|
||||
/** |
||||
* 机打发票 |
||||
*/ |
||||
JDFP("10400","97",13), |
||||
|
||||
/** |
||||
* 出租车发票 |
||||
*/ |
||||
CZCFP("10500","91",14), |
||||
|
||||
/** |
||||
* 火车票 |
||||
*/ |
||||
HCP("10503","92",15), |
||||
|
||||
/** |
||||
* 客运汽车票 |
||||
*/ |
||||
KYQCP("10505","94",16), |
||||
|
||||
/** |
||||
* 航空运输电子客票行程单 |
||||
*/ |
||||
JPXCD("10506","90",17), |
||||
|
||||
/** |
||||
* 过路费发票 |
||||
*/ |
||||
GLF("10507","101",18), |
||||
|
||||
/** |
||||
* 船票 |
||||
*/ |
||||
CP("10508","88",19), |
||||
|
||||
/** |
||||
* 国际小票 |
||||
*/ |
||||
GJXP("20100","99",20), |
||||
|
||||
/** |
||||
* 可报销其他发票 |
||||
*/ |
||||
QTFP("10900","00",21); |
||||
|
||||
// /**
|
||||
// * 纸质专票
|
||||
// */
|
||||
// ZZZZ("185",12),
|
||||
// /**
|
||||
// * 纸质普票
|
||||
// */
|
||||
// ZZZP("186",13);
|
||||
|
||||
|
||||
private final String[] FPLXMC = {"增值税专用发票", "机动车销售统一发票", "增值税普通发票", "增值税电子普通发票", "增值税普通发票(卷票)", "增值税电子普通发票(通行费)", |
||||
"二手车销售统一发票", "增值税电子专用发票", "海关缴款书","电子发票(增值税专用发票)","电子发票(普通发票)"}; |
||||
|
||||
private String snFplxDm; |
||||
private String fplxDm; |
||||
private int index; |
||||
|
||||
SNFplxEnum(String snFplxDm,String fplxDm, int index) { |
||||
this.snFplxDm = snFplxDm; |
||||
this.fplxDm = fplxDm; |
||||
this.index = index; |
||||
} |
||||
|
||||
public String getFplxDm(int index) { |
||||
for (SNFplxEnum fplx : SNFplxEnum.values()) { |
||||
if (fplx.getIndex() == index) { |
||||
return fplx.fplxDm; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public String getFplxDm(String snFplxDm) { |
||||
for (SNFplxEnum fplx : SNFplxEnum.values()) { |
||||
if (fplx.getSnFplxDm() == snFplxDm) { |
||||
return fplx.fplxDm; |
||||
} |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public String getFplxMc(int index) { |
||||
int length = FPLXMC.length; |
||||
if (index <= length) { |
||||
return FPLXMC[index - 1]; |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
public String getFplxDm() { |
||||
return fplxDm; |
||||
} |
||||
|
||||
public String getSnFplxDm() { |
||||
return snFplxDm; |
||||
} |
||||
|
||||
public void setFplxDm(String fplxDm) { |
||||
this.fplxDm = fplxDm; |
||||
} |
||||
|
||||
public void setSnFplxDm(String snFplxDm) { |
||||
this.snFplxDm = snFplxDm; |
||||
} |
||||
|
||||
public int getIndex() { |
||||
return index; |
||||
} |
||||
|
||||
public void setIndex(int index) { |
||||
this.index = index; |
||||
} |
||||
} |
@ -0,0 +1,128 @@ |
||||
package com.dxhy.erp.controller; |
||||
|
||||
import com.dxhy.common.aspect.SysLog; |
||||
import com.dxhy.common.constant.CommonConstants; |
||||
import com.dxhy.common.controller.AbstractController; |
||||
import com.dxhy.common.enums.FplxEnum; |
||||
import com.dxhy.common.util.InvoiceUtil; |
||||
import com.dxhy.common.util.UserInfoUtil; |
||||
import com.dxhy.common.utils.R; |
||||
import com.dxhy.erp.service.InvoiceQueryService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.http.ResponseEntity; |
||||
import org.springframework.web.bind.annotation.PostMapping; |
||||
import org.springframework.web.bind.annotation.RequestBody; |
||||
import org.springframework.web.bind.annotation.ResponseBody; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 山东能源查验主流程控制器 |
||||
* |
||||
* @author ariesy |
||||
* @date 2023-03-15 |
||||
*/ |
||||
@SuppressWarnings({"AlibabaUndefineMagicConstant", "AlibabaMethodTooLong"}) |
||||
@RestController |
||||
@Slf4j |
||||
public class SDNYMainProcessController extends AbstractController { |
||||
@Resource |
||||
private InvoiceQueryService invoiceQueryService; |
||||
|
||||
@Value("${ftp.connection.size}") |
||||
private String size; |
||||
/** |
||||
* 上传时本地文件暂存路径 |
||||
*/ |
||||
@Value("${ftp.connection.tempPath}") |
||||
private String tempPath; |
||||
/** |
||||
* 上传时本地文件存放路径 |
||||
*/ |
||||
@Value("${ftp.connection.depositPath}") |
||||
private String depositPath; |
||||
|
||||
/** |
||||
* 查验发票 |
||||
*/ |
||||
@PostMapping("/sn/singleInvoiceCheck") |
||||
@ResponseBody |
||||
@SysLog("发票查验") |
||||
public ResponseEntity<?> singleInvoiceCheck(@RequestBody Map<String, String> pramsMap) { |
||||
// 入参统一在入口处理
|
||||
String userid = getLoginName(); |
||||
pramsMap.put("userid", userid); |
||||
String dbName = getUserInfo().getDbName(); |
||||
pramsMap.put("dbName", dbName); |
||||
pramsMap.put("saveHistory","Y"); |
||||
|
||||
pramsMap.put("company", getUserInfo().getCompany()); |
||||
|
||||
List<String> gfshAll = UserInfoUtil.getGfshAll(getUserInfo().getOrg()); |
||||
if (gfshAll.size() > 0) { |
||||
pramsMap.put("taxNo", gfshAll.get(0)); |
||||
|
||||
} |
||||
pramsMap.put("purchaserTaxNo", pramsMap.get("purchaserTaxNo")); |
||||
|
||||
|
||||
InvoiceUtil iu = new InvoiceUtil(pramsMap.get("invoiceCode")); |
||||
|
||||
if (pramsMap.get("invoiceCode").isEmpty()) { |
||||
|
||||
return ResponseEntity.ok(R.error("发票代码不能为空!")); |
||||
} |
||||
pramsMap.put("invoiceType", iu.getFplxdm()); |
||||
|
||||
|
||||
if (pramsMap.get("invoiceNumber").isEmpty()) { |
||||
return ResponseEntity.ok(R.error("发票号码不能为空!")); |
||||
} |
||||
pramsMap.put("invoiceNo", pramsMap.get("invoiceNumber")); |
||||
|
||||
if (!pramsMap.get("billingDate").isEmpty()) { |
||||
iu.setKprq(pramsMap.get("billingDate")); |
||||
pramsMap.put("invoiceDate", pramsMap.get("invoiceNumber")); |
||||
if (!iu.kprqValid(null)) { |
||||
pramsMap.put("invoiceDate", "开票日期格式错误!"); |
||||
} |
||||
} else { |
||||
return ResponseEntity.ok(R.error("开票日期不能为空!")); |
||||
} |
||||
|
||||
if (FplxEnum.ZP.getFplxDm().equals(pramsMap.get("invoiceType")) |
||||
|| FplxEnum.JDC.getFplxDm().equals(pramsMap.get("invoiceType")) |
||||
|| FplxEnum.DZZP.getFplxDm().equals(pramsMap.get("invoiceType")) |
||||
|| FplxEnum.ESC.getFplxDm().equals(pramsMap.get("invoiceType")) |
||||
|| FplxEnum.QDZZP.getFplxDm().equals(pramsMap.get("invoiceType")) |
||||
|| FplxEnum.QDPP.getFplxDm().equals(pramsMap.get("invoiceType"))) { |
||||
if (pramsMap.get("totalAmount").isEmpty()) { |
||||
return ResponseEntity.ok(R.error("金额不能为空!")); |
||||
} |
||||
} else { |
||||
if (pramsMap.get("checkCode").isEmpty()) { |
||||
return ResponseEntity.ok(R.error("校验码不能为空!")); |
||||
} |
||||
} |
||||
|
||||
String uuid = (StringUtils.isBlank(pramsMap.get("invoiceCode"))?"":pramsMap.get("invoiceCode"))+ pramsMap.get("invoiceNo"); |
||||
String notes = invoiceQueryService.checkingInvoiceInfo(dbName, uuid, getUserInfo()); |
||||
if (notes != null) { |
||||
return ResponseEntity.ok(R.error(notes)); |
||||
} |
||||
|
||||
try { |
||||
return ResponseEntity.ok(R.ok().put("data", invoiceQueryService.smQueryInvoice(pramsMap))); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
log.error("", e); |
||||
return ResponseEntity.ok(R.error(CommonConstants.MSG_ERR_DEFAULT)); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,77 @@ |
||||
package com.dxhy.erp.dao; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.dxhy.erp.entity.TDxCheckLog; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
import org.apache.ibatis.annotations.Param; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author jiaohongyang |
||||
* @date 2019年3月26日 下午6:02:48 查验记录表dao |
||||
*/ |
||||
@Mapper |
||||
public interface CheckLogDao extends BaseMapper<TDxCheckLog> { |
||||
|
||||
/** |
||||
* 查询查验历史记录 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TDxCheckLog> selectCheckHistory(Map<String, String> pramsMap); |
||||
|
||||
/** |
||||
* 查询查验历史合计 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TDxCheckLog> selectCheckHistoryHj(Map<String, String> pramsMap); |
||||
|
||||
/** |
||||
* 查询查验历史统计信息 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TDxCheckLog> selectCheckStatisticsCount(Map<String, String> pramsMap); |
||||
|
||||
/** |
||||
* 查询查验历史-历史记录 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
*/ |
||||
List<TDxCheckLog> selectCheckHistoryDetail(Map<String, String> pramsMap); |
||||
|
||||
/** |
||||
* 查验综合查询 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TDxCheckLog> getCheckList(Map<String, Object> pramsMap); |
||||
|
||||
/** |
||||
* 查验综合查询合计 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TDxCheckLog> getCheckListHj(Map<String, Object> pramsMap); |
||||
|
||||
} |
@ -0,0 +1,15 @@ |
||||
package com.dxhy.erp.dao; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.dxhy.erp.entity.TdxCheckInvoiceDetail; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* @author jiaohongyang |
||||
* @date 2019年3月26日 下午6:02:48 查验明细表dao |
||||
* |
||||
*/ |
||||
@Mapper |
||||
public interface SignCheckInvoiceDetailDao extends BaseMapper<TdxCheckInvoiceDetail> { |
||||
|
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.dxhy.erp.dao; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.dxhy.erp.entity.TdxCheckRecordInvoice; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* |
||||
* 发票查验表dao |
||||
* |
||||
* @author jiaohongyang |
||||
* @date 2019年3月26日 下午6:02:48 |
||||
*/ |
||||
@Mapper |
||||
public interface SignCheckRecordInvoiceDao extends BaseMapper<TdxCheckRecordInvoice> { |
||||
|
||||
} |
@ -0,0 +1,17 @@ |
||||
package com.dxhy.erp.dao; |
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
import com.dxhy.erp.entity.TdxCheckVehicleSale; |
||||
import org.apache.ibatis.annotations.Mapper; |
||||
|
||||
/** |
||||
* |
||||
* 查验机动车明细表dao |
||||
* |
||||
* @author jiaohongyang |
||||
* @date 2019年3月26日 下午6:02:48 |
||||
*/ |
||||
@Mapper |
||||
public interface SignCheckVehicleSaleDao extends BaseMapper<TdxCheckVehicleSale> { |
||||
|
||||
} |
@ -0,0 +1,68 @@ |
||||
package com.dxhy.erp.entity; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
/** |
||||
* |
||||
* 扫码查验返回页面对象 |
||||
** |
||||
* @author peipei.li * @date 2019-04-29 |
||||
*/ |
||||
@Data |
||||
public class ExtSmcyVO implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 922509817008537140L; |
||||
|
||||
/** |
||||
* 发票唯一标识 |
||||
*/ |
||||
private String id; |
||||
|
||||
/** |
||||
* 查验结果 |
||||
*/ |
||||
private String checkMassege; |
||||
|
||||
/** |
||||
* 发票代码 |
||||
*/ |
||||
private String invoiceCode; |
||||
|
||||
/** |
||||
* 发票号码 |
||||
*/ |
||||
private String invoiceNo; |
||||
|
||||
/** |
||||
* 开票日期 |
||||
*/ |
||||
private String invoiceDate; |
||||
|
||||
/** |
||||
* 金额 |
||||
*/ |
||||
private String invoiceAmount; |
||||
|
||||
/** |
||||
* 校验码 |
||||
*/ |
||||
private String checkCode; |
||||
|
||||
/** |
||||
* 发票类型 |
||||
*/ |
||||
private String invoiceType; |
||||
|
||||
/** |
||||
* 查验结果代码 |
||||
*/ |
||||
private String handleCode; |
||||
private String gfmc; |
||||
private String xfmc; |
||||
private Boolean detailState; |
||||
private Boolean delState; |
||||
private Boolean editState; |
||||
private String totalAmount; |
||||
} |
@ -0,0 +1,131 @@ |
||||
package com.dxhy.erp.entity; |
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName; |
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
import java.math.BigDecimal; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* |
||||
* 查验记录表 |
||||
* |
||||
* @author jiaohongyang |
||||
* @date 2019年3月26日 下午6:02:48 |
||||
*/ |
||||
@SuppressWarnings("AlibabaClassNamingShouldBeCamel") |
||||
@Data |
||||
@TableName("t_dx_check_log") |
||||
public class TDxCheckLog implements Serializable { |
||||
|
||||
private static final long serialVersionUID = 8626068424800691229L; |
||||
|
||||
/** |
||||
* id |
||||
*/ |
||||
private Long id; |
||||
|
||||
/** |
||||
* 发票代码 |
||||
*/ |
||||
private String invoiceCode; |
||||
|
||||
/** |
||||
* 发票号码 |
||||
*/ |
||||
private String invoiceNo; |
||||
|
||||
/** |
||||
* 处理时间 |
||||
*/ |
||||
private Date handleDate; |
||||
|
||||
/** |
||||
* 处理结果 |
||||
*/ |
||||
private String handleCode; |
||||
|
||||
/** |
||||
* 处理过程 |
||||
*/ |
||||
private String handleCourse; |
||||
|
||||
/** |
||||
* 描述(查验结果) |
||||
*/ |
||||
private String checkMassege; |
||||
|
||||
/** |
||||
* 查验账号 |
||||
*/ |
||||
private String checkUser; |
||||
|
||||
/** |
||||
* 开票日期 |
||||
*/ |
||||
private Date invoiceDate; |
||||
|
||||
/** |
||||
* 购方名称 |
||||
*/ |
||||
private String buyerName; |
||||
|
||||
/** |
||||
* 销方名称 |
||||
*/ |
||||
private String salerName; |
||||
|
||||
/** |
||||
* 价税合计 |
||||
*/ |
||||
private BigDecimal totalAmount; |
||||
|
||||
/** |
||||
* 金额 |
||||
*/ |
||||
private BigDecimal invoiceAmount; |
||||
|
||||
/** |
||||
* 税额 |
||||
*/ |
||||
private BigDecimal taxAmount; |
||||
|
||||
/** |
||||
* 发票类型 |
||||
*/ |
||||
private String invoiceType; |
||||
|
||||
/** |
||||
* 校验码 |
||||
*/ |
||||
private String checkCode; |
||||
|
||||
/** |
||||
* 查验月份 |
||||
*/ |
||||
private String checkMonth; |
||||
|
||||
/** |
||||
* 查验张数 |
||||
*/ |
||||
private String checkCount; |
||||
|
||||
/** |
||||
* 查验成功张数 |
||||
*/ |
||||
private String checkSuccessCount; |
||||
|
||||
/** |
||||
* 查验失败张数 |
||||
*/ |
||||
private String checkErrorCount; |
||||
|
||||
/** |
||||
* 发票状态 |
||||
*/ |
||||
private String invoiceStatus; |
||||
|
||||
private String scanId; |
||||
|
||||
} |
@ -0,0 +1,45 @@ |
||||
package com.dxhy.erp.service; |
||||
|
||||
import com.alibaba.fastjson.JSONArray; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.dxhy.common.service.MpBaseService; |
||||
import com.dxhy.common.vo.UserInfo; |
||||
import com.dxhy.erp.entity.TDxCheckLog; |
||||
|
||||
import java.io.File; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* |
||||
* 查验业务处理接口 |
||||
* |
||||
* @author peipei.li |
||||
* @date 2019-05-09 |
||||
*/ |
||||
public interface InvoiceQueryService extends MpBaseService<TDxCheckLog> { |
||||
|
||||
/** |
||||
* 扫码查验发票信息 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 @ 异常 |
||||
* @since 1.0 |
||||
*/ |
||||
String smQueryInvoice(Map<String, String> pramsMap); |
||||
|
||||
/** |
||||
* 检查发票是否可以查验 |
||||
* |
||||
* @param dbName |
||||
* 数据源 |
||||
* @param uuid |
||||
* uuid |
||||
* @param userInfo |
||||
* 用户信息 |
||||
* @return 返回结果 |
||||
*/ |
||||
String checkingInvoiceInfo(String dbName, String uuid, UserInfo userInfo); |
||||
|
||||
} |
@ -0,0 +1,26 @@ |
||||
package com.dxhy.erp.service; |
||||
|
||||
import com.dxhy.common.service.MpBaseService; |
||||
import com.dxhy.erp.entity.TdxCheckInvoiceDetail; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* |
||||
* 查验明细业务处理接口 |
||||
* |
||||
* @author peipei.li |
||||
* @date 2019-05-09 |
||||
*/ |
||||
public interface SignCheckRecordInvoiceDetailService extends MpBaseService<TdxCheckInvoiceDetail> { |
||||
|
||||
/** |
||||
* 根据uuid查询发票明细 |
||||
* |
||||
* @param uuid |
||||
* 发票唯一标识 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
List<TdxCheckInvoiceDetail> getInvoiceDetailListByUuid(String uuid); |
||||
|
||||
} |
@ -0,0 +1,35 @@ |
||||
package com.dxhy.erp.service; |
||||
|
||||
import com.dxhy.common.service.MpBaseService; |
||||
import com.dxhy.erp.entity.TdxCheckRecordInvoice; |
||||
|
||||
/** |
||||
* |
||||
* 发票查验表业务处理接口 |
||||
* |
||||
* @author peipei.li |
||||
* @date 2019-05-09 |
||||
*/ |
||||
public interface SignCheckRecordService extends MpBaseService<TdxCheckRecordInvoice> { |
||||
|
||||
/** |
||||
* 根据uuid查询发票查验表信息 |
||||
* |
||||
* @param uuid |
||||
* 唯一键 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
TdxCheckRecordInvoice getCheckInvoiceByUuid(String uuid); |
||||
|
||||
/** |
||||
* 保存查验表 |
||||
* |
||||
* @param checkRecordInvoice |
||||
* 发票 |
||||
* @param dbName |
||||
* 数据源 |
||||
*/ |
||||
void saveCheckRecordInvoice(TdxCheckRecordInvoice checkRecordInvoice, String dbName); |
||||
|
||||
} |
@ -0,0 +1,22 @@ |
||||
package com.dxhy.erp.service; |
||||
|
||||
import com.dxhy.common.service.MpBaseService; |
||||
import com.dxhy.erp.entity.TdxCheckVehicleSale; |
||||
|
||||
/** |
||||
* |
||||
* 查验机动车明细业务处理接口 * @author peipei.li * @date 2019-05-09 |
||||
*/ |
||||
public interface SignCheckVehicleSaleInvoiceService extends MpBaseService<TdxCheckVehicleSale> { |
||||
|
||||
/** |
||||
* 根据uuid查询机动车明细 |
||||
* |
||||
* @param uuid |
||||
* 发票唯一标识 |
||||
* @return 返回结果 |
||||
* @since 1.0 |
||||
*/ |
||||
TdxCheckVehicleSale getCheckInvoiceByUuid(String uuid); |
||||
|
||||
} |
@ -0,0 +1,27 @@ |
||||
package com.dxhy.erp.service; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
|
||||
/** |
||||
* |
||||
* 保存查验结果到查验相关记录表业务处理接口 |
||||
* |
||||
* @author peipei.li |
||||
* @date 2019-05-09 |
||||
*/ |
||||
public interface SignSaveCheckInfoService { |
||||
|
||||
/** |
||||
* 保存查验结果到查验相关表 |
||||
* |
||||
* @param queryInvoiceResult |
||||
* 请求参数 |
||||
* @param dbName |
||||
* 数据源 |
||||
* @param userid |
||||
* 用户id |
||||
* @since 1.0 |
||||
*/ |
||||
void saveCheckInfo(JSONObject queryInvoiceResult, String userid, String dbName); |
||||
|
||||
} |
@ -0,0 +1,335 @@ |
||||
package com.dxhy.erp.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.dxhy.common.constant.DbConstant; |
||||
import com.dxhy.common.datasource.config.DynamicContextHolder; |
||||
import com.dxhy.common.enums.FplxEnum; |
||||
import com.dxhy.common.service.TabulateRedisService; |
||||
import com.dxhy.common.service.impl.MpBaseServiceImpl; |
||||
import com.dxhy.common.util.*; |
||||
import com.dxhy.common.utils.DateUtils; |
||||
import com.dxhy.common.vo.UserInfo; |
||||
import com.dxhy.erp.dao.CheckLogDao; |
||||
import com.dxhy.erp.entity.ExtSmcyVO; |
||||
import com.dxhy.erp.entity.TDxCheckLog; |
||||
import com.dxhy.erp.entity.TdxCheckRecordInvoice; |
||||
import com.dxhy.erp.service.InvoiceQueryService; |
||||
import com.dxhy.erp.service.SignCheckRecordService; |
||||
import com.dxhy.erp.service.SignSaveCheckInfoService; |
||||
import com.dxhy.erp.utils.InvoiceQueryUtil; |
||||
import com.dxhy.ofd.service.OfdService; |
||||
import com.dxhy.oss.service.FileService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.math.BigDecimal; |
||||
import java.text.DecimalFormat; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* @author ld |
||||
*/ |
||||
@SuppressWarnings({"AlibabaUndefineMagicConstant", "AlibabaMethodTooLong", "AlibabaStringConcat", |
||||
"AlibabaAvoidComplexCondition", "AlibabaCollectionInitShouldAssignCapacity"}) |
||||
@Service("invoiceQueryService") |
||||
@Slf4j |
||||
public class InvoiceQueryServiceImpl extends MpBaseServiceImpl<CheckLogDao, TDxCheckLog> |
||||
implements InvoiceQueryService { |
||||
|
||||
@Resource |
||||
private InvoiceQueryUtil invoiceQueryUtil; |
||||
@Resource |
||||
private OfdService ofdService; |
||||
@Resource |
||||
private ScanIdUtils scanIdUtils; |
||||
|
||||
@Resource |
||||
private SignCheckRecordService signCheckRecordService; |
||||
|
||||
@Resource |
||||
private SignSaveCheckInfoService signSaveCheckInfoService; |
||||
|
||||
@Resource |
||||
private TabulateRedisService tabulateRedisService; |
||||
@Resource |
||||
private FileService fileService; |
||||
/** |
||||
* 只允许查验成功一次公司编码 |
||||
*/ |
||||
|
||||
@Value("${checkCount.company}") |
||||
private String companyCheck; |
||||
|
||||
|
||||
@Override |
||||
public String smQueryInvoice(Map<String, String> pramsMap) { |
||||
|
||||
String[] titlelist = {"查验结果描述", "发票代码", "发票号码", "开票日期", "发票金额", "校验码"}; |
||||
String[] titleprop = |
||||
{"checkMassege", "invoiceCode", "invoiceNo", "invoiceDate", "invoiceAmount", "checkCode", "invoiceType"}; |
||||
// 需要设置返回列表标题时调用
|
||||
JSONObject json = super.setTitleList(titlelist, titleprop); |
||||
|
||||
TDxCheckLog checkLog = this.checkSingleInvioce(pramsMap); |
||||
|
||||
List<ExtSmcyVO> returnList = new ArrayList<>(); |
||||
ExtSmcyVO smcyVo = this.convertToSmcyView(checkLog); |
||||
returnList.add(smcyVo); |
||||
|
||||
json.put("datalist", returnList); |
||||
|
||||
return super.responseResult(json); |
||||
} |
||||
|
||||
@Override |
||||
public String checkingInvoiceInfo(String dbName, String uuid, UserInfo userInfo) { |
||||
String notes = null; |
||||
DynamicContextHolder.push(dbName + DbConstant.BUSINESS_READ); |
||||
TdxCheckRecordInvoice checkRecordTmp = signCheckRecordService.getCheckInvoiceByUuid(uuid); |
||||
if (checkRecordTmp != null) { |
||||
if (!StringUtils.isBlank(checkRecordTmp.getCheckUser()) |
||||
&& !userInfo.getUsername().equals(checkRecordTmp.getCheckUser())) { |
||||
notes = "该发票票已被他人查验,不可重复查验!"; |
||||
return notes; |
||||
} |
||||
if ("0001".equals(checkRecordTmp.getCyjgCode())) { |
||||
if (companyCheck.contains(userInfo.getCompany())) { |
||||
notes = "该发票已查验成功,不可重复查验!"; |
||||
return notes; |
||||
} else if (DateUtils.getStringDateShort().equals(DateUtils.dateToStr(checkRecordTmp.getCreateDate()))) { |
||||
notes = "该发票今日已查验成功,不可重复查验!"; |
||||
} |
||||
} |
||||
} |
||||
return notes; |
||||
} |
||||
|
||||
/** |
||||
* 查验一张发票信息,此方法为公共方法,多种查验方式公用 |
||||
* |
||||
* @param pramsMap |
||||
* 请求参数 |
||||
* @return 返回结果 |
||||
* |
||||
*/ |
||||
private TDxCheckLog checkSingleInvioce(Map<String, String> pramsMap) { |
||||
|
||||
TDxCheckLog checkLog = new TDxCheckLog(); |
||||
|
||||
String userId = pramsMap.get("userid"); |
||||
String invoiceType = pramsMap.get("invoiceType"); |
||||
String invoiceCode = pramsMap.get("invoiceCode"); |
||||
if (StringHelper.isBlank(invoiceType)) { |
||||
if(FplxEnum.QDZZP.getFplxDm().equals(invoiceType) || FplxEnum.QDPP.getFplxDm().equals(invoiceType)){ |
||||
invoiceType = "31"; |
||||
}else { |
||||
InvoiceUtil iu = new InvoiceUtil(invoiceCode); |
||||
invoiceType = iu.getFplxdm(); |
||||
} |
||||
} |
||||
|
||||
// 通行费发票二维码中的发票类型代码为10“电子发票”,需要单独根据发票代码判断发票类型
|
||||
if (FplxEnum.DZP.getFplxDm().equals(invoiceType)) { |
||||
InvoiceUtil iu = new InvoiceUtil(invoiceCode); |
||||
if (FplxEnum.TXF.getFplxDm().equals(iu.getFplxdm())) { |
||||
invoiceType = FplxEnum.TXF.getFplxDm(); |
||||
} |
||||
} |
||||
String invoiceNo = pramsMap.get("invoiceNo"); |
||||
String invoiceDate = pramsMap.get("invoiceDate"); |
||||
String invoiceAmount = pramsMap.getOrDefault("invoiceAmount", ""); |
||||
String taxAmount = pramsMap.getOrDefault("taxAmount", ""); |
||||
String checkCode = pramsMap.getOrDefault("checkCode", ""); |
||||
String gfmc = pramsMap.getOrDefault("gfmc", ""); |
||||
String xfmc = pramsMap.getOrDefault("xfmc", ""); |
||||
String saveHistory = pramsMap.getOrDefault("saveHistory", ""); |
||||
String taxNo = pramsMap.getOrDefault("taxNo", ""); |
||||
String company = pramsMap.get("company"); |
||||
checkLog.setCheckUser(userId); |
||||
if(FplxEnum.QDZZP.getFplxDm().equals(invoiceType) || FplxEnum.QDPP.getFplxDm().equals(invoiceType)){ |
||||
checkLog.setInvoiceType(pramsMap.get("invoiceType")); |
||||
if (!StringHelper.isBlank(invoiceAmount)) { |
||||
try { |
||||
checkLog.setTotalAmount(BigDecimal.valueOf(new DecimalFormat().parse(invoiceAmount).doubleValue())); |
||||
checkLog.setInvoiceAmount(null); |
||||
} catch (Exception e) { |
||||
checkLog.setTotalAmount(new BigDecimal("0")); |
||||
} |
||||
} |
||||
}else { |
||||
if (!StringHelper.isBlank(invoiceAmount)) { |
||||
try { |
||||
checkLog.setInvoiceAmount(BigDecimal.valueOf(new DecimalFormat().parse(invoiceAmount).doubleValue())); |
||||
} catch (Exception e) { |
||||
checkLog.setInvoiceAmount(new BigDecimal("0")); |
||||
} |
||||
} |
||||
checkLog.setInvoiceCode(invoiceCode); |
||||
checkLog.setInvoiceType(invoiceType); |
||||
} |
||||
|
||||
checkLog.setInvoiceNo(invoiceNo); |
||||
|
||||
if (!StringHelper.isBlank(invoiceDate)) { |
||||
checkLog.setInvoiceDate(DateUtils.strToDate(invoiceDate)); |
||||
} |
||||
checkLog.setHandleDate(DateUtils.getSqlDateLong()); |
||||
|
||||
if (!StringHelper.isBlank(taxAmount)) { |
||||
try { |
||||
checkLog.setTaxAmount(BigDecimal.valueOf(new DecimalFormat().parse(taxAmount).doubleValue())); |
||||
} catch (Exception e) { |
||||
checkLog.setTaxAmount(new BigDecimal("0")); |
||||
} |
||||
} |
||||
if (!StringHelper.isBlank(checkCode)) { |
||||
checkLog.setCheckCode(checkCode); |
||||
} |
||||
checkLog.setBuyerName(gfmc); |
||||
checkLog.setSalerName(xfmc); |
||||
|
||||
JSONObject queryInvoiceResult = |
||||
invoiceQueryUtil.queryInvoice(invoiceCode, invoiceNo, invoiceDate, invoiceAmount, checkCode, taxNo,invoiceType); |
||||
queryInvoiceResult.put("scanId", pramsMap.get("scanId")); |
||||
queryInvoiceResult.put("company", pramsMap.get("company")); |
||||
if (queryInvoiceResult.containsKey("returnCode")) { |
||||
// 查验出错
|
||||
checkLog.setHandleCode(queryInvoiceResult.getString("returnCode")); |
||||
checkLog.setCheckMassege(queryInvoiceResult.getString("returnMessage")); |
||||
if ("Y".equals(saveHistory)) { |
||||
// 保存查验主表
|
||||
TdxCheckRecordInvoice checkRecordInvoice = new TdxCheckRecordInvoice(); |
||||
checkRecordInvoice.setScanId(pramsMap.get("scanId")); |
||||
checkRecordInvoice.setUuid((StringUtils.isBlank(invoiceCode)?"":invoiceCode) + invoiceNo); |
||||
checkRecordInvoice.setCheckUser(userId); |
||||
checkRecordInvoice.setFphm(invoiceNo); |
||||
checkRecordInvoice.setFpzl(invoiceType); |
||||
checkRecordInvoice.setCompany(pramsMap.get("company")); |
||||
if (!StringHelper.isBlank(invoiceDate)) { |
||||
checkRecordInvoice.setKprq(DateUtils.strToStrDate2(invoiceDate)); |
||||
} |
||||
if(FplxEnum.QDZZP.getFplxDm().equals(invoiceType) || FplxEnum.QDPP.getFplxDm().equals(invoiceType)){ |
||||
if (!StringHelper.isBlank(invoiceAmount)) { |
||||
checkRecordInvoice.setJshj(invoiceAmount); |
||||
} |
||||
}else { |
||||
checkRecordInvoice.setFpdm(invoiceCode); |
||||
if (!StringHelper.isBlank(invoiceAmount)) { |
||||
checkRecordInvoice.setJe(invoiceAmount); |
||||
} |
||||
} |
||||
|
||||
if (!StringHelper.isBlank(taxAmount)) { |
||||
checkRecordInvoice.setSe(taxAmount); |
||||
} |
||||
if (!StringHelper.isBlank(checkCode)) { |
||||
checkRecordInvoice.setJym(checkCode); |
||||
} |
||||
checkRecordInvoice.setPdfMd5(Long.valueOf(scanIdUtils.createSerialNum())); |
||||
checkRecordInvoice.setCreateDate(DateUtils.getSqlDateLong()); |
||||
checkRecordInvoice.setCyjgCode(queryInvoiceResult.getString("returnCode")); |
||||
checkRecordInvoice.setCyjgTip(queryInvoiceResult.getString("returnMessage")); |
||||
signCheckRecordService.saveCheckRecordInvoice(checkRecordInvoice, pramsMap.get("dbName")); |
||||
} |
||||
} else { |
||||
// 查验成功
|
||||
if ("Y".equals(saveHistory)) { |
||||
// 查验调用,保存查验记录
|
||||
signSaveCheckInfoService.saveCheckInfo(queryInvoiceResult, pramsMap.get("userid"), pramsMap.get("dbName")); |
||||
if(StringUtils.isNotBlank(queryInvoiceResult.getString("invoiceType"))){ |
||||
checkLog.setInvoiceType(queryInvoiceResult.getString("invoiceType")); |
||||
} |
||||
} |
||||
checkLog.setHandleCode(queryInvoiceResult.getString("resultCode")); |
||||
checkLog.setCheckMassege(queryInvoiceResult.getString("resultTip")); |
||||
try { |
||||
checkLog.setTaxAmount(queryInvoiceResult.getBigDecimal("taxAmount")); |
||||
} catch (Exception e) { |
||||
checkLog.setTaxAmount(new BigDecimal(0)); |
||||
} |
||||
try { |
||||
checkLog.setTotalAmount(queryInvoiceResult.getBigDecimal("totalAmount")); |
||||
} catch (Exception e) { |
||||
checkLog.setTotalAmount(new BigDecimal(0)); |
||||
} |
||||
try { |
||||
if (FplxEnum.ESC.getFplxDm().equals(invoiceType)) { |
||||
checkLog.setInvoiceAmount(queryInvoiceResult.getBigDecimal("carPrice")); |
||||
} else { |
||||
checkLog.setInvoiceAmount(queryInvoiceResult.getBigDecimal("invoiceAmount")); |
||||
} |
||||
} catch (Exception e) { |
||||
checkLog.setInvoiceAmount(new BigDecimal(0)); |
||||
} |
||||
checkLog.setBuyerName(queryInvoiceResult.getString("buyerName")); |
||||
checkLog.setSalerName(queryInvoiceResult.getString("salerName")); |
||||
if(FplxEnum.ESC.getFplxDm().equals(invoiceType)){ |
||||
checkLog.setBuyerName(queryInvoiceResult.getString("buyerUnitOrIndividual")); |
||||
checkLog.setSalerName(queryInvoiceResult.getString("sellerUnitOrIndividual")); |
||||
} |
||||
} |
||||
// 查验调用,保存查验日志
|
||||
if ("Y".equals(saveHistory)) { |
||||
DynamicContextHolder.push(pramsMap.get("dbName") + DbConstant.BUSINESS_WRITE); |
||||
super.save(checkLog); |
||||
} |
||||
|
||||
return checkLog; |
||||
} |
||||
|
||||
/** |
||||
* 转换扫描查验显示对象 |
||||
* |
||||
* @param checkLog |
||||
* 扫描查验结果 |
||||
* @return 返回结果 |
||||
* |
||||
*/ |
||||
private ExtSmcyVO convertToSmcyView(TDxCheckLog checkLog) { |
||||
ExtSmcyVO smcyVo = new ExtSmcyVO(); |
||||
String id = checkLog.getInvoiceCode() + "-" + checkLog.getInvoiceNo(); |
||||
smcyVo.setId(id); |
||||
smcyVo.setCheckMassege(checkLog.getCheckMassege()); |
||||
smcyVo.setInvoiceCode(checkLog.getInvoiceCode()); |
||||
smcyVo.setInvoiceNo(checkLog.getInvoiceNo()); |
||||
if (checkLog.getInvoiceDate() != null) { |
||||
smcyVo.setInvoiceDate(DateUtils.dateToStr(checkLog.getInvoiceDate())); |
||||
} |
||||
if (checkLog.getTotalAmount()!= null) { |
||||
smcyVo.setTotalAmount( |
||||
AmountFormatUtil.fmtMicrometer(MathUtil.round(checkLog.getTotalAmount().toPlainString()))); |
||||
}else { |
||||
smcyVo.setTotalAmount(""); |
||||
} |
||||
if (checkLog.getInvoiceAmount() != null) { |
||||
smcyVo.setInvoiceAmount( |
||||
AmountFormatUtil.fmtMicrometer(MathUtil.round(checkLog.getInvoiceAmount().toPlainString()))); |
||||
} else { |
||||
smcyVo.setInvoiceAmount(""); |
||||
} |
||||
|
||||
if (checkLog.getCheckCode() != null) { |
||||
smcyVo.setCheckCode(checkLog.getCheckCode()); |
||||
} else { |
||||
smcyVo.setCheckCode(""); |
||||
} |
||||
smcyVo.setInvoiceType(checkLog.getInvoiceType()); |
||||
smcyVo.setHandleCode(checkLog.getHandleCode()); |
||||
smcyVo.setGfmc(checkLog.getBuyerName()); |
||||
smcyVo.setXfmc(checkLog.getSalerName()); |
||||
if ("0001".equals(checkLog.getHandleCode())) { |
||||
smcyVo.setDetailState(true); |
||||
smcyVo.setDelState(false); |
||||
smcyVo.setEditState(false); |
||||
} else { |
||||
smcyVo.setDelState(true); |
||||
smcyVo.setEditState(true); |
||||
smcyVo.setDetailState(false); |
||||
} |
||||
return smcyVo; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,35 @@ |
||||
package com.dxhy.erp.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.dxhy.common.service.impl.MpBaseServiceImpl; |
||||
import com.dxhy.erp.dao.SignCheckInvoiceDetailDao; |
||||
import com.dxhy.erp.entity.TdxCheckInvoiceDetail; |
||||
import com.dxhy.erp.service.SignCheckRecordInvoiceDetailService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* 查验明细业务处理实现类 |
||||
* |
||||
* @author ld |
||||
* |
||||
*/ |
||||
@Service("signCheckRecordInvoiceDetailService") |
||||
@Slf4j |
||||
|
||||
public class SignCheckRecordInvoiceDetailServiceImpl extends |
||||
MpBaseServiceImpl<SignCheckInvoiceDetailDao, TdxCheckInvoiceDetail> implements SignCheckRecordInvoiceDetailService { |
||||
|
||||
@Override |
||||
public List<TdxCheckInvoiceDetail> getInvoiceDetailListByUuid(String uuid) { |
||||
QueryWrapper<TdxCheckInvoiceDetail> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
queryWrapper.orderByAsc("detail_no"); |
||||
return super.list(queryWrapper); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,58 @@ |
||||
package com.dxhy.erp.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.dxhy.common.constant.DbConstant; |
||||
import com.dxhy.common.datasource.config.DynamicContextHolder; |
||||
import com.dxhy.common.service.impl.MpBaseServiceImpl; |
||||
import com.dxhy.erp.dao.SignCheckRecordInvoiceDao; |
||||
import com.dxhy.erp.entity.TdxCheckRecordInvoice; |
||||
import com.dxhy.erp.service.SignCheckRecordService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* |
||||
* 发票查验表业务逻辑实现类 |
||||
* |
||||
* @author ld |
||||
*/ |
||||
@Service("signCheckRecordService") |
||||
@Slf4j |
||||
|
||||
public class SignCheckRecordServiceImpl extends MpBaseServiceImpl<SignCheckRecordInvoiceDao, TdxCheckRecordInvoice> |
||||
implements SignCheckRecordService { |
||||
|
||||
@Override |
||||
public TdxCheckRecordInvoice getCheckInvoiceByUuid(String uuid) { |
||||
QueryWrapper<TdxCheckRecordInvoice> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
return super.getOne(queryWrapper); |
||||
} |
||||
|
||||
@Override |
||||
public void saveCheckRecordInvoice(TdxCheckRecordInvoice checkRecordInvoice, String dbName) { |
||||
DynamicContextHolder.push(dbName + DbConstant.BUSINESS_WRITE); |
||||
if (checkRecordInvoice != null) { |
||||
TdxCheckRecordInvoice checkRecordTmp = getCheckInvoiceByUuid(checkRecordInvoice.getUuid()); |
||||
if (checkRecordTmp != null) { |
||||
if (StringUtils.isNotBlank(checkRecordTmp.getCycs())) { |
||||
int cycs = Integer.parseInt(checkRecordTmp.getCycs()) + 1; |
||||
checkRecordInvoice.setCycs(cycs + ""); |
||||
} else { |
||||
checkRecordInvoice.setCycs("1"); |
||||
} |
||||
} else { |
||||
checkRecordInvoice.setCycs("1"); |
||||
} |
||||
// 删除重复数据,防止重复的操作
|
||||
QueryWrapper<TdxCheckRecordInvoice> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", checkRecordInvoice.getUuid()); |
||||
remove(queryWrapper); |
||||
// 保存数据
|
||||
save(checkRecordInvoice); |
||||
|
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,33 @@ |
||||
package com.dxhy.erp.service.impl; |
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.dxhy.common.service.impl.MpBaseServiceImpl; |
||||
import com.dxhy.erp.dao.SignCheckVehicleSaleDao; |
||||
import com.dxhy.erp.entity.TdxCheckVehicleSale; |
||||
import com.dxhy.erp.service.SignCheckVehicleSaleInvoiceService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* 查验机动车明细业务处理实现类 |
||||
* |
||||
* @author ld |
||||
* |
||||
* |
||||
*/ |
||||
@Service("signCheckVehicleSaleInvoiceService") |
||||
@Slf4j |
||||
|
||||
public class SignCheckVehicleSaleInvoiceServiceImpl extends |
||||
MpBaseServiceImpl<SignCheckVehicleSaleDao, TdxCheckVehicleSale> implements SignCheckVehicleSaleInvoiceService { |
||||
|
||||
@Override |
||||
public TdxCheckVehicleSale getCheckInvoiceByUuid(String uuid) { |
||||
QueryWrapper<TdxCheckVehicleSale> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
return super.getOne(queryWrapper); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,302 @@ |
||||
package com.dxhy.erp.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSON; |
||||
import com.alibaba.fastjson.JSONArray; |
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
||||
import com.dxhy.common.constant.DbConstant; |
||||
import com.dxhy.common.datasource.config.DynamicContextHolder; |
||||
import com.dxhy.common.enums.FplxEnum; |
||||
import com.dxhy.common.util.NumberToCN; |
||||
import com.dxhy.common.util.ScanIdUtils; |
||||
import com.dxhy.common.util.StringHelper; |
||||
import com.dxhy.erp.entity.TdxCheckInvoiceDetail; |
||||
import com.dxhy.erp.entity.TdxCheckRecordInvoice; |
||||
import com.dxhy.erp.entity.TdxCheckVehicleSale; |
||||
import com.dxhy.erp.service.SignCheckRecordInvoiceDetailService; |
||||
import com.dxhy.erp.service.SignCheckRecordService; |
||||
import com.dxhy.erp.service.SignCheckVehicleSaleInvoiceService; |
||||
import com.dxhy.erp.service.SignSaveCheckInfoService; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.apache.commons.lang3.StringUtils; |
||||
import org.springframework.stereotype.Service; |
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
import javax.annotation.Resource; |
||||
import java.math.BigDecimal; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* |
||||
* 保存查验结果到查验相关记录表业务处理实现类 |
||||
* |
||||
* @author ld |
||||
*/ |
||||
@SuppressWarnings("AlibabaUndefineMagicConstant") |
||||
@Service("signSaveCheckInfoService") |
||||
@Slf4j |
||||
|
||||
public class SignSaveCheckInfoServiceImpl implements SignSaveCheckInfoService { |
||||
|
||||
@Resource |
||||
private ScanIdUtils scanIdUtils; |
||||
|
||||
@Resource |
||||
private SignCheckRecordService signCheckRecordService; |
||||
|
||||
@Resource |
||||
private SignCheckVehicleSaleInvoiceService signCheckVehicleSaleInvoiceService; |
||||
|
||||
|
||||
@Resource |
||||
private SignCheckRecordInvoiceDetailService signCheckRecordInvoiceDetailService; |
||||
|
||||
@Override |
||||
public void saveCheckInfo(JSONObject queryInvoiceResult, String userid, String dbName) { |
||||
String resultCode = queryInvoiceResult.getString("resultCode"); |
||||
// 查验成功,结果一致
|
||||
/* |
||||
* 查验成功状态码 |
||||
*/ |
||||
String querySuccCode = "0001"; |
||||
if (querySuccCode.equals(resultCode)) { |
||||
TdxCheckRecordInvoice checkRecord = getRecordInvoice(queryInvoiceResult, userid); |
||||
DynamicContextHolder.push(dbName + DbConstant.BUSINESS_WRITE); |
||||
TdxCheckRecordInvoice checkRecordTmp = signCheckRecordService.getCheckInvoiceByUuid(checkRecord.getUuid()); |
||||
if (checkRecordTmp != null) { |
||||
if (StringUtils.isNotBlank(checkRecordTmp.getCycs())) { |
||||
int cycs = Integer.parseInt(checkRecordTmp.getCycs()) + 1; |
||||
checkRecord.setCycs(String.valueOf(cycs)); |
||||
} else { |
||||
checkRecord.setCycs("1"); |
||||
} |
||||
} else { |
||||
checkRecord.setCycs("1"); |
||||
} |
||||
TdxCheckVehicleSale checkVehicleSale = getVehicleSaleInvoice(queryInvoiceResult); |
||||
List<TdxCheckInvoiceDetail> checkRecordDetailList = getRecordInvoiceDetail(queryInvoiceResult); |
||||
DynamicContextHolder.push(dbName + DbConstant.BUSINESS_WRITE); |
||||
// 保存查验信息
|
||||
saveCheckMxxx(checkRecord, checkVehicleSale, checkRecordDetailList); |
||||
} |
||||
} |
||||
|
||||
public TdxCheckVehicleSale getVehicleSaleInvoice(JSONObject queryInvoiceResult) { |
||||
String invoiceType = queryInvoiceResult.getString("invoiceType"); |
||||
if (FplxEnum.JDC.getFplxDm().equals(invoiceType)) { |
||||
String invoiceCode = queryInvoiceResult.getString("invoiceCode"); |
||||
String invoiceNo = queryInvoiceResult.getString("invoiceNo"); |
||||
String uuid = invoiceCode + invoiceNo; |
||||
TdxCheckVehicleSale vehicleSaleInvoice = new TdxCheckVehicleSale(); |
||||
vehicleSaleInvoice.setUuid(uuid); |
||||
vehicleSaleInvoice.setBuyerIdNum(queryInvoiceResult.getString("buyerIDNum")); |
||||
vehicleSaleInvoice.setVehicleType(queryInvoiceResult.getString("vehicleType")); |
||||
vehicleSaleInvoice.setFactoryModel(queryInvoiceResult.getString("factoryModel")); |
||||
vehicleSaleInvoice.setProductPlace(queryInvoiceResult.getString("productPlace")); |
||||
vehicleSaleInvoice.setCertificate(queryInvoiceResult.getString("certificate")); |
||||
vehicleSaleInvoice.setCertificateImport(queryInvoiceResult.getString("certificateImport")); |
||||
vehicleSaleInvoice.setInspectionNum(queryInvoiceResult.getString("inspectionNum")); |
||||
vehicleSaleInvoice.setEngineNo(queryInvoiceResult.getString("engineNo")); |
||||
vehicleSaleInvoice.setVehicleNo(queryInvoiceResult.getString("vehicleNo")); |
||||
vehicleSaleInvoice.setTaxBureauCode(queryInvoiceResult.getString("taxBureauCode")); |
||||
vehicleSaleInvoice.setTaxBureauName(queryInvoiceResult.getString("taxBureauName")); |
||||
vehicleSaleInvoice.setTaxRecords(queryInvoiceResult.getString("taxRecords")); |
||||
vehicleSaleInvoice.setTonnage(queryInvoiceResult.getString("tonnage")); |
||||
vehicleSaleInvoice.setLimitPeople(queryInvoiceResult.getString("limitPeople")); |
||||
vehicleSaleInvoice.setTaxRate(queryInvoiceResult.getString("taxRate")); |
||||
return vehicleSaleInvoice; |
||||
}else if(FplxEnum.ESC.getFplxDm().equals(invoiceType)){ |
||||
String invoiceCode = queryInvoiceResult.getString("invoiceCode"); |
||||
String invoiceNo = queryInvoiceResult.getString("invoiceNo"); |
||||
String uuid = invoiceCode + invoiceNo; |
||||
|
||||
TdxCheckVehicleSale vehicleSaleInvoice = new TdxCheckVehicleSale(); |
||||
vehicleSaleInvoice.setUuid(uuid); |
||||
vehicleSaleInvoice.setPlateNo(queryInvoiceResult.getString("licensePlate")); |
||||
vehicleSaleInvoice.setRegistrationNo(queryInvoiceResult.getString("registrationNo")); |
||||
if(StringUtils.isNotBlank(queryInvoiceResult.getString("vehicleType"))){ |
||||
vehicleSaleInvoice.setVehicleType(queryInvoiceResult.getString("vehicleType")); |
||||
} |
||||
if(StringUtils.isNotBlank(queryInvoiceResult.getString("bandModel"))){ |
||||
vehicleSaleInvoice.setFactoryModel(queryInvoiceResult.getString("bandModel")); |
||||
} |
||||
if(StringUtils.isNotBlank(queryInvoiceResult.getString("vehicleIdentificationNo"))){ |
||||
vehicleSaleInvoice.setVehicleNo(queryInvoiceResult.getString("vehicleIdentificationNo")); |
||||
} |
||||
vehicleSaleInvoice.setCarPrice(queryInvoiceResult.getString("carPrice")); |
||||
vehicleSaleInvoice.setVehicleAdminOffice(queryInvoiceResult.getString("vehicleAdminOffice")); |
||||
vehicleSaleInvoice.setBuyerUnit(queryInvoiceResult.getString("buyerUnitOrIndividual")); |
||||
vehicleSaleInvoice.setBuyerUnitCode(queryInvoiceResult.getString("buyerUnitCodeOrIdNo")); |
||||
vehicleSaleInvoice.setBuyerUnitAddress(queryInvoiceResult.getString("buyerUnitOrIndividualAddress")); |
||||
vehicleSaleInvoice.setBuyerPhone(queryInvoiceResult.getString("buyerPhone")); |
||||
vehicleSaleInvoice.setSellerUnit(queryInvoiceResult.getString("sellerUnitOrIndividual")); |
||||
vehicleSaleInvoice.setSellerUnitCode(queryInvoiceResult.getString("sellerUnitCodeOrIdNo")); |
||||
vehicleSaleInvoice.setSellerUnitAddress(queryInvoiceResult.getString("sellerUnitOrIndividualAddress")); |
||||
vehicleSaleInvoice.setSellerPhone(queryInvoiceResult.getString("sellerPhone")); |
||||
vehicleSaleInvoice.setAuctionUnit(queryInvoiceResult.getString("businessUnit")); |
||||
vehicleSaleInvoice.setAuctionAddress(queryInvoiceResult.getString("businessUnitAddress")); |
||||
vehicleSaleInvoice.setAuctionTaxNo(queryInvoiceResult.getString("businessUnitTaxNo")); |
||||
vehicleSaleInvoice.setAuctionBank(queryInvoiceResult.getString("businessUnitBankAndAccount")); |
||||
vehicleSaleInvoice.setAuctionPhone(queryInvoiceResult.getString("businessUnitPhone")); |
||||
vehicleSaleInvoice.setCarMarket(queryInvoiceResult.getString("lemonMarket")); |
||||
vehicleSaleInvoice.setCarMarketTaxNo(queryInvoiceResult.getString("lemonMarketTaxNo")); |
||||
vehicleSaleInvoice.setCarMarketAddress(queryInvoiceResult.getString("lemonMarketAddress")); |
||||
vehicleSaleInvoice.setCarMarketBank(queryInvoiceResult.getString("lemonMarketBankAndAccount")); |
||||
vehicleSaleInvoice.setCarMarketPhone(queryInvoiceResult.getString("lemonMarketPhone")); |
||||
return vehicleSaleInvoice; |
||||
} else { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
public List<TdxCheckInvoiceDetail> getRecordInvoiceDetail(JSONObject queryInvoiceResult) { |
||||
if (queryInvoiceResult.containsKey("detailList")) { |
||||
JSONArray dataArray = queryInvoiceResult.getJSONArray("detailList"); |
||||
if (dataArray != null && dataArray.size() > 0) { |
||||
String invoiceType = queryInvoiceResult.getString("invoiceType"); |
||||
String invoiceCode = queryInvoiceResult.getString("invoiceCode"); |
||||
String invoiceNo = queryInvoiceResult.getString("invoiceNo"); |
||||
String uuid = invoiceCode + invoiceNo; |
||||
List<TdxCheckInvoiceDetail> invoiceDetailList = new ArrayList<>(dataArray.size()); |
||||
for (int i = 0; i < dataArray.size(); i++) { |
||||
JSONObject invoiceDetailQuery = dataArray.getJSONObject(i); |
||||
TdxCheckInvoiceDetail invoiceDetail = new TdxCheckInvoiceDetail(); |
||||
invoiceDetail.setUuid(uuid); |
||||
invoiceDetail.setDetailNo(invoiceDetailQuery.getString("detailNo")); |
||||
invoiceDetail.setGoodsName(invoiceDetailQuery.getString("goodsName")); |
||||
invoiceDetail.setModel(invoiceDetailQuery.getString("specificationModel")); |
||||
invoiceDetail.setUnit(invoiceDetailQuery.getString("unit")); |
||||
invoiceDetail.setNum(invoiceDetailQuery.getString("num")); |
||||
invoiceDetail.setUnitPrice(invoiceDetailQuery.getString("unitPrice")); |
||||
invoiceDetail.setDetailAmount(invoiceDetailQuery.getString("detailAmount")); |
||||
invoiceDetail.setTaxRate(invoiceDetailQuery.getString("taxRate")); |
||||
invoiceDetail.setTaxAmount(invoiceDetailQuery.getString("taxAmount")); |
||||
if (FplxEnum.TXF.getFplxDm().equals(invoiceType)) { |
||||
// 通行费发票
|
||||
invoiceDetail.setCph(invoiceDetailQuery.getString("cph")); |
||||
invoiceDetail.setLx(invoiceDetailQuery.getString("lx")); |
||||
invoiceDetail.setTxrqq(invoiceDetailQuery.getString("txrqq")); |
||||
invoiceDetail.setTxrqz(invoiceDetailQuery.getString("txrqz")); |
||||
} |
||||
invoiceDetailList.add(invoiceDetail); |
||||
} |
||||
return invoiceDetailList; |
||||
} else { |
||||
return null; |
||||
} |
||||
} else { |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
public TdxCheckRecordInvoice getRecordInvoice(JSONObject queryInvoiceResult, String userid) { |
||||
TdxCheckRecordInvoice invoice = new TdxCheckRecordInvoice(); |
||||
|
||||
String invoiceType = queryInvoiceResult.getString("invoiceType"); |
||||
String invoiceCode = queryInvoiceResult.getString("invoiceCode"); |
||||
String invoiceNo = queryInvoiceResult.getString("invoiceNo"); |
||||
String uuid = invoiceCode + invoiceNo; |
||||
|
||||
invoice.setCyjgCode(queryInvoiceResult.getString("resultCode")); |
||||
invoice.setCyjgTip(queryInvoiceResult.getString("resultTip")); |
||||
invoice.setCycs(queryInvoiceResult.getString("checkCount")); |
||||
invoice.setFpzl(invoiceType); |
||||
if("31".equals(invoiceType) || "32".equals(invoiceType)){ |
||||
invoice.setFphm(uuid); |
||||
}else { |
||||
invoice.setFpdm(invoiceCode); |
||||
invoice.setFphm(invoiceNo); |
||||
} |
||||
invoice.setUuid(uuid); |
||||
invoice.setGfsh(queryInvoiceResult.getString("buyerTaxNo")); |
||||
invoice.setGfmc(queryInvoiceResult.getString("buyerName")); |
||||
invoice.setGfdzdh(queryInvoiceResult.getString("buyerAddressPhone")); |
||||
invoice.setGfyhzh(queryInvoiceResult.getString("buyerAccount")); |
||||
invoice.setXfdzdh(queryInvoiceResult.getString("salerAddressPhone")); |
||||
invoice.setXfyhzh(queryInvoiceResult.getString("salerAccount")); |
||||
invoice.setXfmc(queryInvoiceResult.getString("salerName")); |
||||
invoice.setXfsh(queryInvoiceResult.getString("salerTaxNo")); |
||||
invoice.setJe(queryInvoiceResult.getString("invoiceAmount")); |
||||
try { |
||||
new BigDecimal(queryInvoiceResult.getString("taxAmount")); |
||||
invoice.setSe(queryInvoiceResult.getString("taxAmount")); |
||||
} catch (Exception e) { |
||||
invoice.setSe("0"); |
||||
} |
||||
invoice.setJshj(queryInvoiceResult.getString("totalAmount")); |
||||
if(FplxEnum.ESC.getFplxDm().equals(invoiceType)){ |
||||
invoice.setJe(queryInvoiceResult.getString("carPrice")); |
||||
invoice.setJshj(queryInvoiceResult.getString("carPrice")); |
||||
invoice.setGfmc(queryInvoiceResult.getString("buyerUnitOrIndividual")); |
||||
invoice.setGfsh(queryInvoiceResult.getString("buyerUnitCodeOrIdNo")); |
||||
invoice.setGfdzdh(queryInvoiceResult.getString("buyerUnitOrIndividualAddress")); |
||||
invoice.setXfmc(queryInvoiceResult.getString("sellerUnitOrIndividual")); |
||||
invoice.setXfsh(queryInvoiceResult.getString("sellerUnitCodeOrIdNo")); |
||||
invoice.setXfdzdh(queryInvoiceResult.getString("sellerUnitOrIndividualAddress")); |
||||
} |
||||
invoice.setKprq(queryInvoiceResult.getString("invoiceDate")); |
||||
invoice.setJqbh(queryInvoiceResult.getString("machineNo")); |
||||
invoice.setBz(queryInvoiceResult.getString("remark")); |
||||
invoice.setJym(queryInvoiceResult.getString("checkCode")); |
||||
invoice.setTxfbz(queryInvoiceResult.getString("txfbz")); |
||||
invoice.setCreateDate(new Date()); |
||||
invoice.setCheckUser(userid); |
||||
invoice.setScanId(queryInvoiceResult.getString("scanId")); |
||||
invoice.setZfbz(queryInvoiceResult.getString("isCancelled")); |
||||
invoice.setCompany(queryInvoiceResult.getString("company")); |
||||
invoice.setPdfMd5(Long.valueOf(scanIdUtils.createSerialNum())); |
||||
return invoice; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 保存查验信息 |
||||
* |
||||
* @param checkRecord |
||||
* 请求参数 |
||||
* @param checkVehicleSale |
||||
* 请求参数 |
||||
* @param checkRecordDetailList |
||||
* 请求参数 |
||||
* |
||||
*/ |
||||
@Transactional(rollbackFor = Exception.class) |
||||
public void saveCheckMxxx(TdxCheckRecordInvoice checkRecord, TdxCheckVehicleSale checkVehicleSale, |
||||
List<TdxCheckInvoiceDetail> checkRecordDetailList) { |
||||
String uuid = checkRecord.getUuid(); |
||||
{ |
||||
// 删除重复数据,防止重复的操作
|
||||
QueryWrapper<TdxCheckRecordInvoice> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
signCheckRecordService.remove(queryWrapper); |
||||
// 保存数据
|
||||
signCheckRecordService.save(checkRecord); |
||||
} |
||||
|
||||
if (checkVehicleSale != null) { |
||||
// 删除重复数据,防止重复的操作
|
||||
QueryWrapper<TdxCheckVehicleSale> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
signCheckVehicleSaleInvoiceService.remove(queryWrapper); |
||||
// 保存数据
|
||||
signCheckVehicleSaleInvoiceService.save(checkVehicleSale); |
||||
} |
||||
|
||||
if (checkRecordDetailList != null && checkRecordDetailList.size() > 0) { |
||||
// 删除重复数据,防止重复的操作
|
||||
QueryWrapper<TdxCheckInvoiceDetail> queryWrapper = new QueryWrapper<>(); |
||||
queryWrapper.eq("uuid", uuid); |
||||
signCheckRecordInvoiceDetailService.remove(queryWrapper); |
||||
// 保存数据
|
||||
/* |
||||
* 批量操作的大小 |
||||
*/ |
||||
int batchSize = 500; |
||||
signCheckRecordInvoiceDetailService.saveBatch(checkRecordDetailList, batchSize); |
||||
} |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue