Przeglądaj źródła

评估红字发票

sangwenwei 8 miesięcy temu
rodzic
commit
98643805c9

+ 11 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/controller/FinanceInvoiceController.java

@@ -77,6 +77,17 @@ public class FinanceInvoiceController {
         return ResponseEntity.ok (financeInvoiceDTO);
     }
 
+    /*
+    查询红字发票数据
+     */
+    @ApiLog("查询发票列表")
+    @GetMapping("redList")
+    public ResponseEntity<IPage<FinanceInvoiceDTO>> redList(FinanceInvoiceDTO financeInvoiceDTO, Page<FinanceInvoiceDTO> page) throws Exception {
+        IPage<FinanceInvoiceDTO> result = new Page<FinanceInvoiceDTO>();
+        result = financeInvoiceService.findRedList (page, financeInvoiceDTO,"");
+        return ResponseEntity.ok (result);
+    }
+
     /**
      * 查询发票号是否存在
      * @param number

+ 7 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/domain/FinanceInvoice.java

@@ -184,5 +184,12 @@ public class FinanceInvoice extends BaseEntity {
      */
     private String actualDrawerEmailAddress;
 
+    @Query(tableColumn = "fi.red_invoice_flag",type = QueryType.EQ)
+    private String redInvoiceFlag; //是否红字发票
+    @Query(tableColumn = "fi.red_invoice_relevancy_id",type = QueryType.EQ)
+    private String redInvoiceRelevancyId;	//红字发票关联其他发票id
+    @Query(tableColumn = "fi.red_invoice_relevancy_number",type = QueryType.EQ)
+    private String redInvoiceRelevancyNumber;	//红字发票关联其他发票编号
+
     private static final long serialVersionUID = 1L;
 }

+ 4 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/FinanceInvoiceMapper.java

@@ -23,6 +23,8 @@ import java.util.List;
 public interface FinanceInvoiceMapper extends BaseMapper<FinanceInvoice> {
 
     IPage<FinanceInvoiceDTO> findList(Page<FinanceInvoiceDTO> page, @Param(Constants.WRAPPER) QueryWrapper<FinanceInvoice> queryWrapper);
+    //查询红字发票数据
+    IPage<FinanceInvoiceDTO> findRedList(Page<FinanceInvoiceDTO> page, @Param(Constants.WRAPPER) QueryWrapper<FinanceInvoice> queryWrapper);
     //@InterceptorIgnore(tenantLine = "true")
     FinanceInvoiceDTO queryById(@Param("id") String id);
 
@@ -33,6 +35,8 @@ public interface FinanceInvoiceMapper extends BaseMapper<FinanceInvoice> {
     void setReceivablesDateNull(@Param("id") String id);
 
     List<FinanceInvoiceDTO> getExceedFinance();
+
+    String getInvoiceNumberStr(String id);
 }
 
 

+ 44 - 2
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml

@@ -45,7 +45,11 @@
             <result property="taskId" column="task_id" jdbcType="VARCHAR"/>
             <result property="taskIdInvalid" column="task_id_invalid" jdbcType="VARCHAR"/>
             <result property="isMultiple" column="is_multiple" jdbcType="VARCHAR"/>
-            <result property="actualDrawerEmailAddress" column="actual_drawer_email_address" jdbcType="VARCHAR"/>
+            <result property="redInvoiceFlag" column="red_invoice_flag" jdbcType="VARCHAR"/>
+            <result property="redInvoiceRelevancyId" column="red_invoice_relevancy_id" jdbcType="VARCHAR"/>
+            <result property="redInvoiceRelevancyNumber" column="red_invoice_relevancy_number" jdbcType="VARCHAR"/>
+
+        <result property="actualDrawerEmailAddress" column="actual_drawer_email_address" jdbcType="VARCHAR"/>
             <association property="financeInvoiceInvalidDTO" column="id" select="getFii" javaType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceInvalidDTO"></association>
             <collection property="financeInvoiceReceivablesDTOList" column="id" select="getFirList" ofType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceReceivablesDTO"></collection>
             <collection property="financeInvoiceBaseDTOList" column="id" select="getBaseList" ofType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceBaseDTO"></collection>
@@ -154,7 +158,10 @@
         fi.invalid_status,
         fi.receivables_date,
         fi.is_multiple,
-        fi.actual_drawer_email_address
+        fi.actual_drawer_email_address,
+        fi.red_invoice_flag,
+        fi.red_invoice_relevancy_id,
+        fi.red_invoice_relevancy_number
     </sql>
 
     <select id="getFii" resultType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceInvalidDTO">
@@ -224,6 +231,37 @@
         ${ew.customSqlSegment}
     </select>
 
+    <select id="findRedList" resultMap="BaseResultMap">
+        select
+        DISTINCT
+        <include refid="Base_Column_List"></include>,
+        su.name as operator,
+        so.name as operator_office,
+        (select
+        CASE
+        WHEN RIGHT( GROUP_CONCAT(case when program_id is null then 2 else 1 end),1) =2 THEN GROUP_CONCAT(concat('其他:',wipr1.program_name))
+        WHEN RIGHT( GROUP_CONCAT(case when program_id is null then 2 else 1 end),1) =1 THEN GROUP_CONCAT(rpr1.name)
+        ELSE '' END
+        FROM finance_invoice_base wipr1
+        LEFT JOIN program_project_list_info rpr1 ON wipr1.program_id = rpr1.id
+        WHERE wipr1.invoice_id = fi.id) as programName,
+        cfid.number as "number",
+        cfid.account as "accountDetail",
+        art.ID_ as task_id,
+        art_invalid.ID_ as task_id_invalid,
+        su1.name as reconciliationPeopleName
+        from finance_invoice fi
+        left join finance_invoice_detail cfid on cfid.invoice_id = fi.id and cfid.del_flag = '0'
+        left join sys_user su on fi.create_by_id = su.id and su.del_flag = '0'
+        --         left join sys_user_manage_office sumo on sumo.office_id = su.office_id
+        left join sys_office so on su.office_id = so.id and so.del_flag = '0'
+        left join act_ru_task art on fi.proc_ins_id = art.PROC_INST_ID_
+        left join finance_invoice_invalid invalid on invalid.invoice_id = fi.id and invalid.del_flag = '0'
+        left join act_ru_task art_invalid on invalid.proc_ins_id = art_invalid.PROC_INST_ID_
+        left join sys_user su1 on su1.id = fi.reconciliation_people
+        ${ew.customSqlSegment}
+    </select>
+
     <select id="queryById" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"></include>,
@@ -264,4 +302,8 @@
         ORDER BY
         fi.billing_date DESC
     </select>
+
+    <select id="getInvoiceNumberStr" resultType="java.lang.String">
+		select group_concat(number) from finance_invoice_detail where invoice_id = #{invoiceId}
+	</select>
 </mapper>

+ 243 - 1
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java

@@ -366,7 +366,12 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
     public FinanceInvoiceDTO queryById(String id) {
 
         FinanceInvoiceDTO financeInvoiceDTO = financeInvoiceMapper.queryById(id);
-
+        if(ObjectUtil.isNotEmpty(financeInvoiceDTO) && "1".equals(financeInvoiceDTO.getRedInvoiceFlag()) ){
+            //此处为红冲数据 需要获取发票号
+            FinanceInvoiceDTO redCwFinanceInvoiceDTO = financeInvoiceMapper.queryById(financeInvoiceDTO.getRedInvoiceRelevancyId());
+            String invoiceNumberStr = financeInvoiceMapper.getInvoiceNumberStr(redCwFinanceInvoiceDTO.getId());
+            financeInvoiceDTO.setInvoiceNumberStr(invoiceNumberStr);
+        }
         // 查询附件信息
         List<WorkAttachmentInfo> fileList = workContractInfoMapper.findDtos(id);
         if (CollectionUtil.isNotEmpty(fileList)) {
@@ -400,6 +405,9 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
             if(StringUtils.isNotEmpty(financeInvoiceDTO.getActualDrawerEmailAddress())){
                 financeInvoice.setActualDrawerEmailAddress(financeInvoiceDTO.getActualDrawerEmailAddress());
             }
+            financeInvoice.setRedInvoiceFlag(financeInvoiceDTO.getRedInvoiceFlag());
+            financeInvoice.setRedInvoiceRelevancyId(financeInvoiceDTO.getRedInvoiceRelevancyId());
+            financeInvoice.setRedInvoiceRelevancyNumber(financeInvoiceDTO.getRedInvoiceRelevancyNumber());
         }
         this.saveOrUpdate(financeInvoice);
         if (ObjectUtil.isNotEmpty(financeInvoiceDTO)) {
@@ -686,4 +694,238 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
         List<FinanceInvoiceDTO> list=financeInvoiceMapper.getExceedFinance();
         return list;
     }
+
+    /**
+     * 查询红字发票数据
+     * @param page
+     * @param financeInvoiceDTO
+     * @param s
+     * @return
+     */
+    public IPage<FinanceInvoiceDTO> findRedList(Page<FinanceInvoiceDTO> page, FinanceInvoiceDTO financeInvoiceDTO, String s) throws Exception {
+        QueryWrapper<FinanceInvoice> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( FinanceInvoiceWrapper.INSTANCE.toEntity(financeInvoiceDTO), FinanceInvoice.class );
+        queryWrapper.eq("fi.del_flag","0");
+        queryWrapper.orderByDesc("fi.create_time");
+        //判定开票金额大于等于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(financeInvoiceDTO)) {
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getNumber())) {
+                List<FinanceInvoiceDetail> financeInvoiceDetails = financeInvoiceDetailMapper.selectList(new LambdaQueryWrapper<FinanceInvoiceDetail>().like(FinanceInvoiceDetail::getNumber, financeInvoiceDTO.getNumber()));
+                List<String> ids = financeInvoiceDetails.stream().distinct().map(FinanceInvoiceDetail::getInvoiceId).collect(Collectors.toList());
+                if(CollectionUtil.isEmpty(ids)) {
+                    return new Page<FinanceInvoiceDTO>();
+                }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<FinanceInvoiceDTO>();
+                        }else{
+                            for (String item : ids) {
+                                searchIdList.add(item);
+                            }
+                        }
+                    }
+                    checkNum.getAndIncrement();
+                }
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getAccountBegin())&&StringUtils.isNotBlank(financeInvoiceDTO.getAccountEnd())) {
+                List<FinanceInvoice> financeInvoices = financeInvoiceMapper.selectList(new LambdaQueryWrapper<FinanceInvoice>()
+                        .between(FinanceInvoice::getAccount, new BigDecimal(financeInvoiceDTO.getAccountBegin()), new BigDecimal(financeInvoiceDTO.getAccountEnd())));
+                List<String> ids = financeInvoices.stream().distinct().map(FinanceInvoice::getId).collect(Collectors.toList());
+                if(CollectionUtil.isEmpty(ids)) {
+                    return new Page<FinanceInvoiceDTO>();
+                }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<FinanceInvoiceDTO>();
+                        }else{
+                            for (String item : ids) {
+                                searchIdList.add(item);
+                            }
+                        }
+                    }
+                    checkNum.getAndIncrement();
+                }
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getBillingDateBegin())&&StringUtils.isNotBlank(financeInvoiceDTO.getBillingDateEnd())) {
+                List<FinanceInvoice> financeInvoices = financeInvoiceMapper.selectList(new LambdaQueryWrapper<FinanceInvoice>()
+                        .between(FinanceInvoice::getBillingDate, sdf.parse(financeInvoiceDTO.getBillingDateBegin()), sdf.parse(financeInvoiceDTO.getBillingDateEnd())));
+                List<String> ids = financeInvoices.stream().distinct().map(FinanceInvoice::getId).collect(Collectors.toList());
+                if(CollectionUtil.isEmpty(ids)) {
+                    return new Page<FinanceInvoiceDTO>();
+                }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<FinanceInvoiceDTO>();
+                        }else{
+                            for (String item : ids) {
+                                searchIdList.add(item);
+                            }
+                        }
+                    }
+                    checkNum.getAndIncrement();
+                }
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getRemittanceDateBegin())&&StringUtils.isNotBlank(financeInvoiceDTO.getRemittanceDateEnd())) {
+                List<FinanceInvoice> financeInvoices = financeInvoiceMapper.selectList(new LambdaQueryWrapper<FinanceInvoice>()
+                        .between(FinanceInvoice::getReceivablesDate, sdf.parse(financeInvoiceDTO.getRemittanceDateBegin()), sdf.parse(financeInvoiceDTO.getRemittanceDateEnd())));
+                List<String> ids = financeInvoices.stream().distinct().map(FinanceInvoice::getId).collect(Collectors.toList());
+                if(CollectionUtil.isEmpty(ids)) {
+                    return new Page<FinanceInvoiceDTO>();
+                }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<FinanceInvoiceDTO>();
+                        }else{
+                            for (String item : ids) {
+                                searchIdList.add(item);
+                            }
+                        }
+                    }
+                    checkNum.getAndIncrement();
+                }
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getProgramId())||StringUtils.isNotBlank(financeInvoiceDTO.getProgramName())) {
+                if (StringUtils.isNotBlank(financeInvoiceDTO.getProgramId())){
+                    List<FinanceInvoiceBase> financeInvoiceBaseList = financeInvoiceBaseMapper.selectList(new LambdaQueryWrapper<FinanceInvoiceBase>()
+                            .eq(FinanceInvoiceBase::getProgramId,financeInvoiceDTO.getProgramId()));
+                    List<String> ids = financeInvoiceBaseList.stream().distinct().map(FinanceInvoiceBase::getInvoiceId).collect(Collectors.toList());
+                    if(CollectionUtil.isEmpty(ids)) {
+                        return new Page<FinanceInvoiceDTO>();
+                    }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<FinanceInvoiceDTO>();
+                            }else{
+                                for (String item : ids) {
+                                    searchIdList.add(item);
+                                }
+                            }
+                        }
+                        checkNum.getAndIncrement();
+                    }
+                }else{
+                    List<FinanceInvoiceBase> financeInvoiceBaseList = financeInvoiceBaseMapper.selectList(new LambdaQueryWrapper<FinanceInvoiceBase>()
+                            .like(FinanceInvoiceBase::getProgramName,financeInvoiceDTO.getProgramName()));
+                    List<String> ids = financeInvoiceBaseList.stream().distinct().map(FinanceInvoiceBase::getInvoiceId).collect(Collectors.toList());
+                    if(CollectionUtil.isEmpty(ids)) {
+                        return new Page<FinanceInvoiceDTO>();
+                    }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<FinanceInvoiceDTO>();
+                            }else{
+                                for (String item : ids) {
+                                    searchIdList.add(item);
+                                }
+                            }
+                        }
+                        checkNum.getAndIncrement();
+                    }
+                }
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getOperator())){
+                queryWrapper.eq("su.id",financeInvoiceDTO.getOperator()).or().like("su.name",financeInvoiceDTO.getOperator());
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getReconciliationPeopleName())) {
+//                List<User> users = SpringUtil.getBean ( IUserApi.class ).selectListByName(financeInvoiceDTO.getReconciliationPeopleName());
+//                List<String> userIdList = users.stream().distinct().map(User::getId).collect(Collectors.toList());
+//                if (CollectionUtil.isNotEmpty(userIdList)) {
+//                    queryWrapper.in("fi.reconciliation_people",userIdList);
+//                } else {
+//                    return new Page<FinanceInvoiceDTO>();
+//                }
+                queryWrapper.like("su1.name",financeInvoiceDTO.getReconciliationPeopleName());
+
+            }
+            if (StringUtils.isNotBlank(financeInvoiceDTO.getOperatorOffice())){
+                List<User> userList = SpringUtil.getBean ( IUserApi.class ).getUserByOfficeAll(financeInvoiceDTO.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<FinanceInvoiceDTO>();
+                    }
+                } else {
+                    return new Page<FinanceInvoiceDTO>();
+                }
+            }
+        }
+        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<FinanceInvoiceDTO>();
+            }
+        }
+        if (StringUtils.isNotBlank(financeInvoiceDTO.getName())){
+            queryWrapper.like("fi.name",financeInvoiceDTO.getName());
+        }
+        //开票类型筛选
+        if (StringUtils.isNotBlank(financeInvoiceDTO.getBillingType())){
+            queryWrapper.eq("fi.billing_type",financeInvoiceDTO.getBillingType());
+        }
+
+        IPage<FinanceInvoiceDTO> pageList = financeInvoiceMapper.findRedList(page, queryWrapper);
+        pageList.getRecords().stream().forEach(item ->{
+            // 发票申请
+            if (StringUtils.isNotBlank(item.getTaskId()) && StringUtils.isNotBlank(item.getStatus())) {
+                if ("2".equals(item.getStatus())) { // “审核中”的数据要获取数据审核人
+                    item.setAuditUserIds(flowTaskService.getTaskAuditUsers(item.getTaskId()));  // 获取数据审核人
+                }
+            }
+            // 发票作废
+            if (StringUtils.isNotBlank(item.getTaskIdInvalid()) && StringUtils.isNotBlank(item.getStatus())) {
+                if ("6".equals(item.getStatus())) { // “审核中”的数据要获取数据审核人
+                    item.setAuditUserIdsInvalid(flowTaskService.getTaskAuditUsers(item.getTaskIdInvalid()));  // 获取数据审核人
+                }
+            }
+
+            if(StringUtils.isNotBlank(item.getBillingType()) && "2".equals(item.getBillingType()) && StringUtils.isNotBlank(item.getName())){
+                item.setBillingWorkplaceReal(item.getName());
+            }
+
+        });
+        return pageList;
+    }
 }

+ 6 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/dto/FinanceInvoiceDTO.java

@@ -313,6 +313,12 @@ public class FinanceInvoiceDTO extends BaseDTO {
      */
     private String actualDrawerEmailAddress;
 
+    private String redInvoiceFlag; //是否红字发票
+    private String redInvoiceRelevancyId;	//红字发票关联其他发票id
+    private String redInvoiceRelevancyNumber;	//红字发票关联其他发票编号
+    private String invoiceNumberStr;	//红字发票关联其他发票号
+    private List<String> redNotStatusList;
+
 
     private static final long serialVersionUID = 1L;
 }

+ 1 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java

@@ -553,7 +553,7 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
     public CwFinanceInvoiceDTO queryById(String id) {
 
         CwFinanceInvoiceDTO cwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(id);
-        if(1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
+        if(ObjectUtil.isNotEmpty(cwFinanceInvoiceDTO) && 1 == cwFinanceInvoiceDTO.getRedInvoiceFlag()){
             //此处为红冲数据 需要获取发票号
             CwFinanceInvoiceDTO redCwFinanceInvoiceDTO = cwFinanceInvoiceMapper.queryById(cwFinanceInvoiceDTO.getRedInvoiceRelevancyId());
             String invoiceNumberStr = cwFinanceInvoiceMapper.getInvoiceNumberStr(redCwFinanceInvoiceDTO.getId());