|
@@ -1855,6 +1855,230 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
return "";
|
|
return "";
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 仅作为单独保存发票数据接口使用
|
|
|
|
|
+ * @param cwFinanceInvoiceDTO
|
|
|
|
|
+ * @return
|
|
|
|
|
+ * @throws Exception
|
|
|
|
|
+ */
|
|
|
|
|
+ public CwFinanceInvoice saveFormOnly(CwFinanceInvoiceDTO cwFinanceInvoiceDTO) throws Exception {
|
|
|
|
|
+ boolean isDDNotice = false;
|
|
|
|
|
+ String isOms = "0";
|
|
|
|
|
+
|
|
|
|
|
+ CwFinanceInvoice cwFinanceInvoice = CwFinanceInvoiceWrapper.INSTANCE.toEntity(cwFinanceInvoiceDTO);
|
|
|
|
|
+ //获取当前登录人信息
|
|
|
|
|
+ UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(cwFinanceInvoice)) {
|
|
|
|
|
+ if (StringUtils.isBlank(cwFinanceInvoice.getId())) {
|
|
|
|
|
+
|
|
|
|
|
+ //发票编号生成
|
|
|
|
|
+ String serialNum = SpringUtil.getBean(IWorkAttachmentApi.class).genSerialNum(userDTO.getCompanyDTO().getId(), CwFinanceInvoiceDTO.BIZ_CODE, TokenProvider.getCurrentToken());
|
|
|
|
|
+ cwFinanceInvoice.setNo(serialNum);
|
|
|
|
|
+ if (StringUtils.isBlank(cwFinanceInvoice.getInvalidStatus())) {
|
|
|
|
|
+ cwFinanceInvoice.setInvalidStatus("0");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(cwFinanceInvoice.getReceivablesStatus())) {
|
|
|
|
|
+ cwFinanceInvoice.setReceivablesStatus("0");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoice.getReportType())) {
|
|
|
|
|
+ cwFinanceInvoice.setReportType(cwFinanceInvoiceDTO.getReportType());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isBlank(cwFinanceInvoice.getNo())) {
|
|
|
|
|
+ String serialNum = SpringUtil.getBean(IWorkAttachmentApi.class).genSerialNum(userDTO.getCompanyDTO().getId(), CwFinanceInvoiceDTO.BIZ_CODE, TokenProvider.getCurrentToken());
|
|
|
|
|
+ cwFinanceInvoice.setNo(serialNum);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getActualDrawerEmailAddress())) {
|
|
|
|
|
+ cwFinanceInvoice.setActualDrawerEmailAddress(cwFinanceInvoiceDTO.getActualDrawerEmailAddress());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getRelatedInvoice())) {
|
|
|
|
|
+ cwFinanceInvoice.setRelatedInvoice(cwFinanceInvoiceDTO.getRelatedInvoice());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getSituationDetail())) {
|
|
|
|
|
+ cwFinanceInvoice.setSituationDetail(cwFinanceInvoiceDTO.getSituationDetail());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getRedFlushReason())) {
|
|
|
|
|
+ cwFinanceInvoice.setRedFlushReason(cwFinanceInvoiceDTO.getRedFlushReason());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getIsSmsNotice())) {
|
|
|
|
|
+ cwFinanceInvoice.setIsSmsNotice(cwFinanceInvoiceDTO.getIsSmsNotice());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getIsOmsBilling())) {
|
|
|
|
|
+ cwFinanceInvoice.setIsOmsBilling(cwFinanceInvoiceDTO.getIsOmsBilling());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getId())) {
|
|
|
|
|
+ cwFinanceInvoiceMapper.updateInfoById(cwFinanceInvoice);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceMapper.insert(cwFinanceInvoice);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO)) {
|
|
|
|
|
+ // 如果当前是执行的是收款页面的保存方法
|
|
|
|
|
+ if ("1".equals(cwFinanceInvoiceDTO.getIsReceivables())) {
|
|
|
|
|
+ // 如果传过来的收款日期为空,则将本条发票的收款日期置空
|
|
|
|
|
+ if (ObjectUtil.isEmpty(cwFinanceInvoiceDTO.getReceivablesDate())) {
|
|
|
|
|
+ // 根据发票id,置空发票的收款日期
|
|
|
|
|
+ cwFinanceInvoiceMapper.setReceivablesDateNull(cwFinanceInvoice.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 基本信息保存
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(cwFinanceInvoiceDTO.getFinanceInvoiceBaseDTOList())) {
|
|
|
|
|
+ List<String> delIds = cwFinanceInvoiceDTO.getFinanceInvoiceBaseDTOList().stream().distinct().filter(item -> {
|
|
|
|
|
+ if (StringUtils.isNotBlank(item.getId())) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }).map(CwFinanceInvoiceBaseDTO::getId).collect(Collectors.toList());
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(delIds)) {
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.delete(new QueryWrapper<CwFinanceInvoiceBase>().lambda()
|
|
|
|
|
+ .eq(CwFinanceInvoiceBase::getInvoiceId, cwFinanceInvoice.getId()).notIn(CwFinanceInvoiceBase::getId, delIds));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.delete(new QueryWrapper<CwFinanceInvoiceBase>().lambda()
|
|
|
|
|
+ .eq(CwFinanceInvoiceBase::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ cwFinanceInvoiceDTO.getFinanceInvoiceBaseDTOList().stream().forEach(item -> {
|
|
|
|
|
+ CwFinanceInvoiceBase cwFinanceInvoiceBase = CwFinanceInvoiceBaseWrapper.INSTANCE.toEntity(item);
|
|
|
|
|
+
|
|
|
|
|
+ cwFinanceInvoiceBase.setAccount(item.getAccount());
|
|
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceBase.getId())) {
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.updateById(cwFinanceInvoiceBase);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceBase.setInvoiceId(cwFinanceInvoice.getId());
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.insert(cwFinanceInvoiceBase);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (StringUtils.isNotEmpty(cwFinanceInvoiceBase.getProgramId())) {
|
|
|
|
|
+ CwProjectRecordsDTO projectRecordsDTO = cwProjectRecordsMapper.queryById(cwFinanceInvoiceBase.getProgramId());
|
|
|
|
|
+ //普通项目
|
|
|
|
|
+ if (null != projectRecordsDTO) {
|
|
|
|
|
+ cwFinanceInvoiceBase.setType("1");
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.updateById(cwFinanceInvoiceBase);
|
|
|
|
|
+ cwFinanceInvoice.setRecordType(cwFinanceInvoiceBase.getType());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (null != cwProjectReportMapper.queryById(cwFinanceInvoiceBase.getProgramId())) {
|
|
|
|
|
+ cwFinanceInvoiceBase.setType("2");
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.updateById(cwFinanceInvoiceBase);
|
|
|
|
|
+ cwFinanceInvoice.setRecordType(cwFinanceInvoiceBase.getType());
|
|
|
|
|
+ }
|
|
|
|
|
+ //预开票项目
|
|
|
|
|
+ if (null != projectRecordsDTO && "1".equals(projectRecordsDTO.getIsPreInvoice())) {
|
|
|
|
|
+ cwFinanceInvoiceBase.setType("4");
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.updateById(cwFinanceInvoiceBase);
|
|
|
|
|
+ cwFinanceInvoice.setRecordType(cwFinanceInvoiceBase.getType());
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceBase.setType("0");
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.updateById(cwFinanceInvoiceBase);
|
|
|
|
|
+ cwFinanceInvoice.setRecordType(cwFinanceInvoiceBase.getType());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceBaseMapper.delete(new QueryWrapper<CwFinanceInvoiceBase>().lambda()
|
|
|
|
|
+ .eq(CwFinanceInvoiceBase::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 附件
|
|
|
|
|
+ Map<String, String> map = new HashMap<>();
|
|
|
|
|
+ String fileList = JSON.toJSONString((cwFinanceInvoiceDTO.getWorkAttachmentDtoList()));
|
|
|
|
|
+ String attachmentId = cwFinanceInvoice.getId();
|
|
|
|
|
+ String attachmentFlag = "cw_invoice";
|
|
|
|
|
+ map.put("fileList", fileList);
|
|
|
|
|
+ map.put("attachmentId", attachmentId);
|
|
|
|
|
+ map.put("attachmentFlag", attachmentFlag);
|
|
|
|
|
+ map.put("currentToken", TokenProvider.getCurrentToken());
|
|
|
|
|
+ SpringUtil.getBean(IWorkAttachmentApi.class).saveOrUpdateFileListFlag(map);
|
|
|
|
|
+
|
|
|
|
|
+ // 签约合同附件
|
|
|
|
|
+ Map<String, String> map1 = new HashMap<>();
|
|
|
|
|
+ String fileList1 = JSON.toJSONString((cwFinanceInvoiceDTO.getWorkAttachmenSignContract()));
|
|
|
|
|
+ String attachmentId1 = cwFinanceInvoice.getId();
|
|
|
|
|
+ String attachmentFlag1 = "cw_invoice_sign_contract";
|
|
|
|
|
+ map1.put("fileList", fileList1);
|
|
|
|
|
+ map1.put("attachmentId", attachmentId1);
|
|
|
|
|
+ map1.put("attachmentFlag", attachmentFlag1);
|
|
|
|
|
+ map1.put("currentToken", TokenProvider.getCurrentToken());
|
|
|
|
|
+ SpringUtil.getBean(IWorkAttachmentApi.class).saveOrUpdateFileListFlag(map1);
|
|
|
|
|
+
|
|
|
|
|
+ // 发票明细保存
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList())) {
|
|
|
|
|
+ List<String> delIds = cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList().stream().distinct().filter(item -> {
|
|
|
|
|
+ if (StringUtils.isNotBlank(item.getId())) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }).map(CwFinanceInvoiceDetailDTO::getId).collect(Collectors.toList());
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(delIds)) {
|
|
|
|
|
+ cwFinanceInvoiceDetailMapper.delete(new QueryWrapper<CwFinanceInvoiceDetail>().lambda()
|
|
|
|
|
+ .eq(CwFinanceInvoiceDetail::getInvoiceId, cwFinanceInvoice.getId())
|
|
|
|
|
+ .notIn(CwFinanceInvoiceDetail::getId, delIds));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceDetailMapper.delete(new QueryWrapper<CwFinanceInvoiceDetail>().lambda().eq(CwFinanceInvoiceDetail::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList().stream().forEach(item -> {
|
|
|
|
|
+ CwFinanceInvoiceDetail cwFinanceInvoiceDetail = CwFinanceInvoiceDetailWrapper.INSTANCE.toEntity(item);
|
|
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDetail.getId())) {
|
|
|
|
|
+ cwFinanceInvoiceDetailMapper.updateById(cwFinanceInvoiceDetail);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceDetail.setInvoiceId(cwFinanceInvoice.getId());
|
|
|
|
|
+ cwFinanceInvoiceDetailMapper.insert(cwFinanceInvoiceDetail);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceDetailMapper.delete(new QueryWrapper<CwFinanceInvoiceDetail>().lambda().eq(CwFinanceInvoiceDetail::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 收款明细保存
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(cwFinanceInvoiceDTO.getFinanceInvoiceReceivablesDTOList())) {
|
|
|
|
|
+ List<String> delIds = cwFinanceInvoiceDTO.getFinanceInvoiceReceivablesDTOList().stream().distinct().filter(item -> {
|
|
|
|
|
+ if (StringUtils.isNotBlank(item.getId())) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }).map(CwFinanceInvoiceReceivablesDTO::getId).collect(Collectors.toList());
|
|
|
|
|
+ if (CollectionUtil.isNotEmpty(delIds)) {
|
|
|
|
|
+ cwFinanceInvoiceReceivablesMapper.delete(new QueryWrapper<CwFinanceInvoiceReceivables>().lambda()
|
|
|
|
|
+ .eq(CwFinanceInvoiceReceivables::getInvoiceId, cwFinanceInvoice.getId())
|
|
|
|
|
+ .notIn(CwFinanceInvoiceReceivables::getId, delIds));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceReceivablesMapper.delete(new QueryWrapper<CwFinanceInvoiceReceivables>().lambda().eq(CwFinanceInvoiceReceivables::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ cwFinanceInvoiceDTO.getFinanceInvoiceReceivablesDTOList().stream().forEach(item -> {
|
|
|
|
|
+ CwFinanceInvoiceReceivables cwFinanceInvoiceReceivables = CwFinanceInvoiceReceivablesWrapper.INSTANCE.toEntity(item);
|
|
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceReceivables.getId())) {
|
|
|
|
|
+ cwFinanceInvoiceReceivablesMapper.updateById(cwFinanceInvoiceReceivables);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceReceivables.setInvoiceId(cwFinanceInvoice.getId());
|
|
|
|
|
+ cwFinanceInvoiceReceivablesMapper.insert(cwFinanceInvoiceReceivables);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceReceivablesMapper.delete(new QueryWrapper<CwFinanceInvoiceReceivables>().lambda().eq(CwFinanceInvoiceReceivables::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 作废信息保存
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO.getFinanceInvoiceInvalidDTO())) {
|
|
|
|
|
+ CwFinanceInvoiceInvalid cwFinanceInvoiceInvalid = CwFinanceInvoiceInvalidWrapper.INSTANCE.toEntity(cwFinanceInvoiceDTO.getFinanceInvoiceInvalidDTO());
|
|
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceInvalid.getId())) {
|
|
|
|
|
+ cwFinanceInvoiceInvalidMapper.update(cwFinanceInvoiceInvalid,
|
|
|
|
|
+ new QueryWrapper<CwFinanceInvoiceInvalid>().lambda().eq(CwFinanceInvoiceInvalid::getId, cwFinanceInvoiceInvalid.getId()));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceInvalid.setInvalidStatus("0");
|
|
|
|
|
+ cwFinanceInvoiceInvalid.setInvoiceId(cwFinanceInvoice.getId());
|
|
|
|
|
+ cwFinanceInvoiceInvalidMapper.insert(cwFinanceInvoiceInvalid);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ cwFinanceInvoiceInvalidMapper.delete(new QueryWrapper<CwFinanceInvoiceInvalid>().lambda().eq(CwFinanceInvoiceInvalid::getInvoiceId, cwFinanceInvoice.getId()));
|
|
|
|
|
+ CwFinanceInvoiceInvalid cwFinanceInvoiceInvalid = new CwFinanceInvoiceInvalid();
|
|
|
|
|
+ cwFinanceInvoiceInvalid.setInvalidStatus("0");
|
|
|
|
|
+ cwFinanceInvoiceInvalid.setInvoiceId(cwFinanceInvoice.getId());
|
|
|
|
|
+ cwFinanceInvoiceInvalidMapper.insert(cwFinanceInvoiceInvalid);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return cwFinanceInvoice;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
public String findLastLevelCode(List<AreaDTO> areaDTOList, String reconciliationArea) {
|
|
public String findLastLevelCode(List<AreaDTO> areaDTOList, String reconciliationArea) {
|
|
|
// 按 "-" 拆分层级
|
|
// 按 "-" 拆分层级
|
|
|
String[] split = reconciliationArea.split("-");
|
|
String[] split = reconciliationArea.split("-");
|