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/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/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/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..c17418f4 --- /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 != null + && !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/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); + } + } + +}