|
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
@@ -341,7 +342,12 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
public CwFinanceInvoiceDTO queryById(String id) {
|
|
|
|
|
|
CwFinanceInvoiceDTO cwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(id);
|
|
|
-
|
|
|
+ if(ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO.getRedInvoiceFlag()) && 1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
|
|
|
+ //此处为红冲数据 需要获取发票号
|
|
|
+ CwFinanceInvoiceDTO redCwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
|
|
|
+ String invoiceNumberStr = cwFinanceInvoiceMapper.getInvoiceNumberStr(redCwFinanceInvoiceDTO.getId());
|
|
|
+ cwFinanceInvoiceDTO.setInvoiceNumberStr(invoiceNumberStr);
|
|
|
+ }
|
|
|
// 电话号获取
|
|
|
if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && StringUtils.isNotBlank(cwFinanceInvoiceDTO.getBillingId())) {
|
|
|
CwWorkClientBilling cwWorkClientBilling = cwWorkClientBillingService.getById(cwFinanceInvoiceDTO.getBillingId());
|
|
@@ -393,6 +399,9 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
cwFinanceInvoice.setReportType(cwFinanceInvoiceDTO.getReportType());
|
|
|
}
|
|
|
}
|
|
|
+ cwFinanceInvoice.setRedInvoiceFlag(cwFinanceInvoiceDTO.getRedInvoiceFlag());
|
|
|
+ cwFinanceInvoice.setRedInvoiceRelevancyId(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
|
|
|
+ cwFinanceInvoice.setRedInvoiceRelevancyNumber(cwFinanceInvoiceDTO.getRedInvoiceRelevancyNumber());
|
|
|
}
|
|
|
if(StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getActualDrawerEmailAddress())){
|
|
|
cwFinanceInvoice.setActualDrawerEmailAddress(cwFinanceInvoiceDTO.getActualDrawerEmailAddress());
|
|
@@ -569,7 +578,16 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
dto.setFinanceInvoiceDetailDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceDetailDTOList());
|
|
|
dto.setFinanceInvoiceBaseDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceBaseDTOList());
|
|
|
dto.setWorkAttachmentDtoList(cwFinanceInvoiceDTO.getWorkAttachmentDtoList());
|
|
|
+ dto.setFinanceInvoiceReceivablesDTOList(cwFinanceInvoiceDTO.getFinanceInvoiceReceivablesDTOList());
|
|
|
+ dto.setReceivablesStatus(cwFinanceInvoiceDTO.getReceivablesStatus());
|
|
|
+ dto.setReceivablesDate(cwFinanceInvoiceDTO.getReceivablesDate());
|
|
|
dto.setCollectDate(cwFinanceInvoiceDTO.getCollectDate());
|
|
|
+ if(ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO.getRedInvoiceFlag()) && 1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
|
|
|
+ //此处为红冲数据 需要获取发票号
|
|
|
+ CwFinanceInvoiceDTO redCwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
|
|
|
+ String invoiceNumberStr = cwFinanceInvoiceMapper.getInvoiceNumberStr(redCwFinanceInvoiceDTO.getId());
|
|
|
+ dto.setInvoiceNumberStr(invoiceNumberStr);
|
|
|
+ }
|
|
|
String label = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getReceivablesType(), "invoice_receivables_type", "");
|
|
|
dto.setReceivablesTypeLabel(label);
|
|
|
String contentLabel = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getBillingContent(), "invoice_billing_content", "");
|
|
@@ -676,9 +694,26 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
return "操作成功";
|
|
|
}
|
|
|
|
|
|
- public String isReceivables(CwFinanceInvoiceDTO cwFinanceInvoiceDTO) {
|
|
|
+ public String isReceivables(CwFinanceInvoiceDTO cwFinanceInvoiceDTO) throws JsonProcessingException {
|
|
|
CwFinanceInvoice cwFinanceInvoice = CwFinanceInvoiceWrapper.INSTANCE.toEntity(cwFinanceInvoiceDTO);
|
|
|
+ if (cwFinanceInvoice.getReceivablesStatus().equals("1")){
|
|
|
+ cwFinanceInvoice.setReceivablesDate(new Date());
|
|
|
+ }
|
|
|
cwFinanceInvoiceMapper.update(cwFinanceInvoice, new QueryWrapper<CwFinanceInvoice>().lambda().eq(CwFinanceInvoice::getId, cwFinanceInvoice.getId()));
|
|
|
+ //将收款数据同步到ccpm系统中对应的发票信息
|
|
|
+ String json = objectMapper.writeValueAsString(cwFinanceInvoice);
|
|
|
+ String path = Global.getConfig("CCPM_PATH");
|
|
|
+ String url = path+"/a/cpa_finance/saveReceivable";
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.APPLICATION_JSON);
|
|
|
+ HttpEntity<String> httpEntity = new HttpEntity<>(json, headers);
|
|
|
+ try {
|
|
|
+ restTemplate.exchange(url, HttpMethod.POST,httpEntity,String.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 记录错误日志或进行其他处理
|
|
|
+ System.err.println("Error sending project info to cloud: " + e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
return "操作成功";
|
|
|
}
|
|
|
|
|
@@ -794,6 +829,12 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
// 发票
|
|
|
if (TaskAliasEnum.REIMBURSEMENT.getCpaTaskAlias().equals(taskAliasEnum.getCpaTaskAlias())) {
|
|
|
CwFinanceInvoiceDTO cwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryByProcId(id);
|
|
|
+ if(ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO.getRedInvoiceFlag()) && 1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
|
|
|
+ //此处为红冲数据 需要获取发票号
|
|
|
+ CwFinanceInvoiceDTO redCwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
|
|
|
+ String invoiceNumberStr = cwFinanceInvoiceMapper.getInvoiceNumberStr(redCwFinanceInvoiceDTO.getId());
|
|
|
+ cwFinanceInvoiceDTO.setInvoiceNumberStr(invoiceNumberStr);
|
|
|
+ }
|
|
|
String label = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getReceivablesType(), "invoice_receivables_type", "");
|
|
|
cwFinanceInvoiceDTO.setReceivablesTypeLabel(label);
|
|
|
String contentLabel = SpringUtil.getBean(IDictApi.class).getDictLabel(cwFinanceInvoiceDTO.getBillingContent(), "invoice_billing_content", "");
|
|
@@ -866,4 +907,208 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public IPage<CwFinanceInvoiceDTO> findRedList(Page<CwFinanceInvoiceDTO> page, CwFinanceInvoiceDTO cwFinanceInvoiceDTO,String export) throws Exception{
|
|
|
+ QueryWrapper<CwFinanceInvoice> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( CwFinanceInvoiceWrapper.INSTANCE.toEntity(cwFinanceInvoiceDTO), CwFinanceInvoice.class );
|
|
|
+ queryWrapper.eq("fi.del_flag","0");
|
|
|
+ queryWrapper.eq("a.del_flag","0");
|
|
|
+ //判定开票金额大于等于0 的发票信息
|
|
|
+ queryWrapper.ge("fi.account","0");
|
|
|
+ ArrayList<String> searchIdList = new ArrayList<>();
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ AtomicInteger checkNum = new AtomicInteger();
|
|
|
+ if (ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO)) {
|
|
|
+ // 发票号查询
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getNumber())) {
|
|
|
+ List<CwFinanceInvoiceDetail> cwFinanceInvoiceDetails = cwFinanceInvoiceDetailMapper.selectList(new LambdaQueryWrapper<CwFinanceInvoiceDetail>().like(CwFinanceInvoiceDetail::getNumber, cwFinanceInvoiceDTO.getNumber()));
|
|
|
+ List<String> ids = cwFinanceInvoiceDetails.stream().distinct().map(CwFinanceInvoiceDetail::getInvoiceId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(ids)) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> newSearchIdList = getSearchList(searchIdList,ids);
|
|
|
+ searchIdList = new ArrayList<String>();
|
|
|
+ for (String item : newSearchIdList) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (checkNum.get() > 0){
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ for (String item : ids) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkNum.getAndIncrement();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 开票总金额
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getAccountBegin())&&StringUtils.isNotBlank(cwFinanceInvoiceDTO.getAccountEnd())) {
|
|
|
+ List<CwFinanceInvoice> cwFinanceInvoices = cwFinanceInvoiceMapper.selectList(new LambdaQueryWrapper<CwFinanceInvoice>()
|
|
|
+ .between(CwFinanceInvoice::getAccount, new BigDecimal(cwFinanceInvoiceDTO.getAccountBegin()), new BigDecimal(cwFinanceInvoiceDTO.getAccountEnd())));
|
|
|
+ List<String> ids = cwFinanceInvoices.stream().distinct().map(CwFinanceInvoice::getId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(ids)) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> newSearchIdList = getSearchList(searchIdList,ids);
|
|
|
+ searchIdList = new ArrayList<String>();
|
|
|
+ for (String item : newSearchIdList) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (checkNum.get() > 0){
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ for (String item : ids) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkNum.getAndIncrement();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 开票日期
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getBillingDateBegin())&&StringUtils.isNotBlank(cwFinanceInvoiceDTO.getBillingDateEnd())) {
|
|
|
+ List<CwFinanceInvoice> cwFinanceInvoices = cwFinanceInvoiceMapper.selectList(new LambdaQueryWrapper<CwFinanceInvoice>()
|
|
|
+ .between(CwFinanceInvoice::getBillingDate, sdf.parse(cwFinanceInvoiceDTO.getBillingDateBegin()), sdf.parse(cwFinanceInvoiceDTO.getBillingDateEnd())));
|
|
|
+ List<String> ids = cwFinanceInvoices.stream().distinct().map(CwFinanceInvoice::getId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(ids)) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> newSearchIdList = getSearchList(searchIdList,ids);
|
|
|
+ searchIdList = new ArrayList<String>();
|
|
|
+ for (String item : newSearchIdList) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (checkNum.get() > 0){
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ for (String item : ids) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkNum.getAndIncrement();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 收款日期
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getRemittanceDateBegin())&&StringUtils.isNotBlank(cwFinanceInvoiceDTO.getRemittanceDateEnd())) {
|
|
|
+ List<CwFinanceInvoice> cwFinanceInvoices = cwFinanceInvoiceMapper.selectList(new LambdaQueryWrapper<CwFinanceInvoice>()
|
|
|
+ .between(CwFinanceInvoice::getReceivablesDate, sdf.parse(cwFinanceInvoiceDTO.getRemittanceDateBegin()), sdf.parse(cwFinanceInvoiceDTO.getRemittanceDateEnd())));
|
|
|
+ List<String> ids = cwFinanceInvoices.stream().distinct().map(CwFinanceInvoice::getId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(ids)) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> newSearchIdList = getSearchList(searchIdList,ids);
|
|
|
+ searchIdList = new ArrayList<String>();
|
|
|
+ for (String item : newSearchIdList) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (checkNum.get() > 0){
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ for (String item : ids) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkNum.getAndIncrement();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 项目名称
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getProgramId())){
|
|
|
+ List<CwFinanceInvoiceBase> cwFinanceInvoiceBaseList = cwFinanceInvoiceBaseMapper.selectList(new LambdaQueryWrapper<CwFinanceInvoiceBase>()
|
|
|
+ .eq(CwFinanceInvoiceBase::getProgramId, cwFinanceInvoiceDTO.getProgramId()));
|
|
|
+ List<String> ids = cwFinanceInvoiceBaseList.stream().distinct().map(CwFinanceInvoiceBase::getInvoiceId).collect(Collectors.toList());
|
|
|
+ if(CollectionUtil.isEmpty(ids)) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> newSearchIdList = getSearchList(searchIdList,ids);
|
|
|
+ searchIdList = new ArrayList<String>();
|
|
|
+ for (String item : newSearchIdList) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (checkNum.get() > 0){
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }else{
|
|
|
+ for (String item : ids) {
|
|
|
+ searchIdList.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ checkNum.getAndIncrement();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 经办人
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getOperator())){
|
|
|
+ queryWrapper.like("su.id", cwFinanceInvoiceDTO.getOperator()).or().like("su.name", cwFinanceInvoiceDTO.getOperator());
|
|
|
+ }
|
|
|
+ //报备类型
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getReportType())){
|
|
|
+ queryWrapper.eq("fi.report_type",cwFinanceInvoiceDTO.getReportType()).or(i->i.eq("pr.report_type",cwFinanceInvoiceDTO.getReportType()));
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getReconciliationPeopleName())) {
|
|
|
+ queryWrapper.eq("fi.reconciliation_people",cwFinanceInvoiceDTO.getReconciliationPeopleName()).or().like("su1.name",cwFinanceInvoiceDTO.getReconciliationPeopleName());
|
|
|
+ }
|
|
|
+ // 经办人部门
|
|
|
+ if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getOperatorOffice())){
|
|
|
+ List<User> userList = SpringUtil.getBean ( IUserApi.class ).getUserByOfficeAll(cwFinanceInvoiceDTO.getOperatorOffice());
|
|
|
+ if (CollectionUtil.isNotEmpty(userList)) {
|
|
|
+ List<String> userIdList = userList.stream().distinct().map(User::getId).collect(Collectors.toList());
|
|
|
+ if (CollectionUtil.isNotEmpty(userIdList)) {
|
|
|
+ queryWrapper.in("fi.create_by_id",userIdList);
|
|
|
+ } else {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (CollectionUtil.isNotEmpty(searchIdList)){
|
|
|
+ List<String> ids = searchIdList.stream().distinct().collect(Collectors.toList());
|
|
|
+ queryWrapper.in("fi.id",ids);
|
|
|
+ } else{
|
|
|
+ if (checkNum.get() > 0) {
|
|
|
+ return new Page<CwFinanceInvoiceDTO>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ IPage<CwFinanceInvoiceDTO> list = null;
|
|
|
+ list = cwFinanceInvoiceMapper.findList(page, queryWrapper);
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ 查询开票时间距今超过1个月的开票数据
|
|
|
+ */
|
|
|
+ public List<CwFinanceInvoiceDTO> getExceedCwFinance() {
|
|
|
+
|
|
|
+ //查询开票时间为空的,或者是否开票为否的 开票时间距今超过1个月的开票数据
|
|
|
+ List<CwFinanceInvoiceDTO> list=cwFinanceInvoiceMapper.getExceedCwFinance();
|
|
|
+ //将红字发票及红字发票关联的发票进行剔除
|
|
|
+ ArrayList<String> redReveId = new ArrayList<>();
|
|
|
+ for (CwFinanceInvoiceDTO cwFinanceInvoiceDTO : list) {
|
|
|
+ if (ObjectUtils.isNotEmpty(cwFinanceInvoiceDTO.getRedInvoiceFlag()) && 1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
|
|
|
+ redReveId.add(cwFinanceInvoiceDTO.getId());
|
|
|
+ redReveId.add(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //将redReveId中存放的id从list中进行去除
|
|
|
+ List<CwFinanceInvoiceDTO> filteredList = list.stream()
|
|
|
+ .filter(dto -> !redReveId.contains(dto.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ return filteredList;
|
|
|
+ }
|
|
|
}
|