From 35608d9ad640a076aa7a9ca03dbd714ad7729fad Mon Sep 17 00:00:00 2001 From: yefei Date: Wed, 15 Mar 2023 22:02:24 +0800 Subject: [PATCH] =?UTF-8?q?ariesy=20=E5=8D=95=E5=BC=A0=E6=9F=A5=E9=AA=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=BB=A3=E7=A0=81=E5=AE=8C=E6=88=90=20v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dxhy/common/enums/SNFplxEnum.java | 183 ++++++++++ .../controller/SDNYMainProcessController.java | 128 +++++++ .../java/com/dxhy/erp/dao/CheckLogDao.java | 77 ++++ .../erp/dao/SignCheckInvoiceDetailDao.java | 15 + .../erp/dao/SignCheckRecordInvoiceDao.java | 17 + .../dxhy/erp/dao/SignCheckVehicleSaleDao.java | 17 + .../java/com/dxhy/erp/entity/ExtSmcyVO.java | 68 ++++ .../java/com/dxhy/erp/entity/TDxCheckLog.java | 131 +++++++ .../dxhy/erp/entity/TdxCheckVehicleSale.java | 49 +++ .../dxhy/erp/service/InvoiceQueryService.java | 45 +++ .../SignCheckRecordInvoiceDetailService.java | 26 ++ .../erp/service/SignCheckRecordService.java | 35 ++ .../SignCheckVehicleSaleInvoiceService.java | 22 ++ .../erp/service/SignSaveCheckInfoService.java | 27 ++ .../service/impl/InvoiceQueryServiceImpl.java | 335 ++++++++++++++++++ ...gnCheckRecordInvoiceDetailServiceImpl.java | 35 ++ .../impl/SignCheckRecordServiceImpl.java | 58 +++ ...ignCheckVehicleSaleInvoiceServiceImpl.java | 33 ++ .../impl/SignSaveCheckInfoServiceImpl.java | 302 ++++++++++++++++ 19 files changed, 1603 insertions(+) create mode 100644 dxhy-common/src/main/java/com/dxhy/common/enums/SNFplxEnum.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/dao/CheckLogDao.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckInvoiceDetailDao.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckRecordInvoiceDao.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckVehicleSaleDao.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/entity/ExtSmcyVO.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/entity/TDxCheckLog.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/InvoiceQueryService.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordInvoiceDetailService.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordService.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckVehicleSaleInvoiceService.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/SignSaveCheckInfoService.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceQueryServiceImpl.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordInvoiceDetailServiceImpl.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordServiceImpl.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckVehicleSaleInvoiceServiceImpl.java create mode 100644 dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveCheckInfoServiceImpl.java diff --git a/dxhy-common/src/main/java/com/dxhy/common/enums/SNFplxEnum.java b/dxhy-common/src/main/java/com/dxhy/common/enums/SNFplxEnum.java new file mode 100644 index 00000000..8ac612da --- /dev/null +++ b/dxhy-common/src/main/java/com/dxhy/common/enums/SNFplxEnum.java @@ -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; + } +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java new file mode 100644 index 00000000..fe2cfdee --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/SDNYMainProcessController.java @@ -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 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 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)); + } + } + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/CheckLogDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/CheckLogDao.java new file mode 100644 index 00000000..d99b06c1 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/CheckLogDao.java @@ -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 { + + /** + * 查询查验历史记录 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + * @since 1.0 + */ + List selectCheckHistory(Map pramsMap); + + /** + * 查询查验历史合计 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + * @since 1.0 + */ + List selectCheckHistoryHj(Map pramsMap); + + /** + * 查询查验历史统计信息 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + * @since 1.0 + */ + List selectCheckStatisticsCount(Map pramsMap); + + /** + * 查询查验历史-历史记录 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + */ + List selectCheckHistoryDetail(Map pramsMap); + + /** + * 查验综合查询 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + * @since 1.0 + */ + List getCheckList(Map pramsMap); + + /** + * 查验综合查询合计 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 + * @since 1.0 + */ + List getCheckListHj(Map pramsMap); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckInvoiceDetailDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckInvoiceDetailDao.java new file mode 100644 index 00000000..67cb5f5a --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckInvoiceDetailDao.java @@ -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 { + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckRecordInvoiceDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckRecordInvoiceDao.java new file mode 100644 index 00000000..07b122b8 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckRecordInvoiceDao.java @@ -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 { + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckVehicleSaleDao.java b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckVehicleSaleDao.java new file mode 100644 index 00000000..de81d623 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/dao/SignCheckVehicleSaleDao.java @@ -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 { + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/ExtSmcyVO.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/ExtSmcyVO.java new file mode 100644 index 00000000..4d4f1807 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/ExtSmcyVO.java @@ -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; +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/TDxCheckLog.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/TDxCheckLog.java new file mode 100644 index 00000000..76ad498a --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/TDxCheckLog.java @@ -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; + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/entity/TdxCheckVehicleSale.java b/dxhy-erp/src/main/java/com/dxhy/erp/entity/TdxCheckVehicleSale.java index 5370d1de..d762f737 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/entity/TdxCheckVehicleSale.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/entity/TdxCheckVehicleSale.java @@ -125,4 +125,53 @@ public class TdxCheckVehicleSale implements Serializable { */ private Date createDate; + //新增二手车信息 + //车牌照号码 + private String plateNo; + //登记证号 + private String registrationNo; + //转入地车辆管理所名称 + private String vehicleAdminOffice; + //经营、拍卖单位 + private String auctionUnit; + //经营、拍卖单位地址 + private String auctionAddress; + //经营、拍卖单位纳税人识别号 + private String auctionTaxNo; + //开户银行及账号 + private String auctionBank; + //经营、拍卖单位电话 + private String auctionPhone; + //二手车市场 + private String carMarket; + //二手车市场纳税人识别号 + private String carMarketTaxNo; + //二手车市场地址 + private String carMarketAddress; + //二手车市场开户银行及账号 + private String carMarketBank; + //二手车市场电话 + private String carMarketPhone; + + + //车价合计 + private String carPrice; + //买方单位 /个人 + private String buyerUnit; + //买方单位代码 /身份证号 + private String buyerUnitCode; + //买方单位 /个人住址 + private String buyerUnitAddress; + //买方电话 + private String buyerPhone; + //卖方单位/个人 + private String sellerUnit; + //卖方单位代码/身份证 + private String sellerUnitCode; + //卖方单位/个人住址 + private String sellerUnitAddress; + //卖方电话 + private String sellerPhone; + + } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/InvoiceQueryService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/InvoiceQueryService.java new file mode 100644 index 00000000..95b53e88 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/InvoiceQueryService.java @@ -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 { + + /** + * 扫码查验发票信息 + * + * @param pramsMap + * 请求参数 + * @return 返回结果 @ 异常 + * @since 1.0 + */ + String smQueryInvoice(Map pramsMap); + + /** + * 检查发票是否可以查验 + * + * @param dbName + * 数据源 + * @param uuid + * uuid + * @param userInfo + * 用户信息 + * @return 返回结果 + */ + String checkingInvoiceInfo(String dbName, String uuid, UserInfo userInfo); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordInvoiceDetailService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordInvoiceDetailService.java new file mode 100644 index 00000000..590f7040 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordInvoiceDetailService.java @@ -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 { + + /** + * 根据uuid查询发票明细 + * + * @param uuid + * 发票唯一标识 + * @return 返回结果 + * @since 1.0 + */ + List getInvoiceDetailListByUuid(String uuid); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordService.java new file mode 100644 index 00000000..9e1070ee --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckRecordService.java @@ -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 { + + /** + * 根据uuid查询发票查验表信息 + * + * @param uuid + * 唯一键 + * @return 返回结果 + * @since 1.0 + */ + TdxCheckRecordInvoice getCheckInvoiceByUuid(String uuid); + + /** + * 保存查验表 + * + * @param checkRecordInvoice + * 发票 + * @param dbName + * 数据源 + */ + void saveCheckRecordInvoice(TdxCheckRecordInvoice checkRecordInvoice, String dbName); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckVehicleSaleInvoiceService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckVehicleSaleInvoiceService.java new file mode 100644 index 00000000..4125897f --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignCheckVehicleSaleInvoiceService.java @@ -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 { + + /** + * 根据uuid查询机动车明细 + * + * @param uuid + * 发票唯一标识 + * @return 返回结果 + * @since 1.0 + */ + TdxCheckVehicleSale getCheckInvoiceByUuid(String uuid); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/SignSaveCheckInfoService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignSaveCheckInfoService.java new file mode 100644 index 00000000..8d69a9bd --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/SignSaveCheckInfoService.java @@ -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); + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceQueryServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceQueryServiceImpl.java new file mode 100644 index 00000000..e47c02d9 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/InvoiceQueryServiceImpl.java @@ -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 + 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 pramsMap) { + + String[] titlelist = {"查验结果描述", "发票代码", "发票号码", "开票日期", "发票金额", "校验码"}; + String[] titleprop = + {"checkMassege", "invoiceCode", "invoiceNo", "invoiceDate", "invoiceAmount", "checkCode", "invoiceType"}; + // 需要设置返回列表标题时调用 + JSONObject json = super.setTitleList(titlelist, titleprop); + + TDxCheckLog checkLog = this.checkSingleInvioce(pramsMap); + + List 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 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; + } + +} \ No newline at end of file diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordInvoiceDetailServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordInvoiceDetailServiceImpl.java new file mode 100644 index 00000000..d927373e --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordInvoiceDetailServiceImpl.java @@ -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 implements SignCheckRecordInvoiceDetailService { + + @Override + public List getInvoiceDetailListByUuid(String uuid) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", uuid); + queryWrapper.orderByAsc("detail_no"); + return super.list(queryWrapper); + } + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordServiceImpl.java new file mode 100644 index 00000000..185c1679 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckRecordServiceImpl.java @@ -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 + implements SignCheckRecordService { + + @Override + public TdxCheckRecordInvoice getCheckInvoiceByUuid(String uuid) { + QueryWrapper 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 queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", checkRecordInvoice.getUuid()); + remove(queryWrapper); + // 保存数据 + save(checkRecordInvoice); + + } + } + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckVehicleSaleInvoiceServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckVehicleSaleInvoiceServiceImpl.java new file mode 100644 index 00000000..2ed28b1d --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignCheckVehicleSaleInvoiceServiceImpl.java @@ -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 implements SignCheckVehicleSaleInvoiceService { + + @Override + public TdxCheckVehicleSale getCheckInvoiceByUuid(String uuid) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", uuid); + return super.getOne(queryWrapper); + } + +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveCheckInfoServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveCheckInfoServiceImpl.java new file mode 100644 index 00000000..bf1f5854 --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/SignSaveCheckInfoServiceImpl.java @@ -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 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 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 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 checkRecordDetailList) { + String uuid = checkRecord.getUuid(); + { + // 删除重复数据,防止重复的操作 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", uuid); + signCheckRecordService.remove(queryWrapper); + // 保存数据 + signCheckRecordService.save(checkRecord); + } + + if (checkVehicleSale != null) { + // 删除重复数据,防止重复的操作 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", uuid); + signCheckVehicleSaleInvoiceService.remove(queryWrapper); + // 保存数据 + signCheckVehicleSaleInvoiceService.save(checkVehicleSale); + } + + if (checkRecordDetailList != null && checkRecordDetailList.size() > 0) { + // 删除重复数据,防止重复的操作 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("uuid", uuid); + signCheckRecordInvoiceDetailService.remove(queryWrapper); + // 保存数据 + /* + * 批量操作的大小 + */ + int batchSize = 500; + signCheckRecordInvoiceDetailService.saveBatch(checkRecordDetailList, batchSize); + } + } + +}