Explorar el Código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/FinanceApiFallbackFactory.java
#	jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IFinanceApi.java
#	jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java
sangwenwei hace 11 meses
padre
commit
23adc8e61a
Se han modificado 41 ficheros con 701 adiciones y 4 borrados
  1. 5 0
      jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/factory/WorkAttachmentApiFallbackFactory.java
  2. 9 0
      jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/feign/IWorkAttachmentApi.java
  3. 5 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/FinanceApiFallbackFactory.java
  4. 7 0
      jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IFinanceApi.java
  5. 23 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/controller/ReimbursementInfoController.java
  6. 5 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/domain/ReimbursementAmountInfo.java
  7. 2 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/ReimbursementInfoMapper.java
  8. 10 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/xml/ReimbursementInfoMapper.xml
  9. 9 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/ReimbursementInfoService.java
  10. 7 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/dto/ReimbursementAmountInfoDTO.java
  11. 23 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/controller/CcpmReimbursementInfoController.java
  12. 5 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/domain/CcpmReimbursementAmountInfo.java
  13. 2 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/mapper/CcpmReimbursementInfoMapper.java
  14. 10 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/mapper/xml/CcpmReimbursementInfoMapper.xml
  15. 9 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/service/CcpmReimbursementInfoService.java
  16. 7 0
      jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/service/dto/CcpmReimbursementAmountInfoDTO.java
  17. 22 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/controller/ZsReimbursementInfoController.java
  18. 5 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/domain/ZsReimbursementAmountInfo.java
  19. 2 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/mapper/ZsReimbursementInfoMapper.java
  20. 10 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/mapper/xml/ZsReimbursementInfoMapper.xml
  21. 9 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/service/ZsReimbursementInfoService.java
  22. 6 0
      jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/service/dto/ZsReimbursementAmountInfoDTO.java
  23. 23 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/controller/ConsultancyReimbursementInfoController.java
  24. 5 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/domain/ConsultancyReimbursementAmountInfo.java
  25. 2 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/mapper/ConsultancyReimbursementInfoMapper.java
  26. 10 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/mapper/xml/ConsultancyReimbursementInfoMapper.xml
  27. 9 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/service/ConsultancyReimbursementInfoService.java
  28. 7 0
      jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/service/dto/ConsultancyReimbursementAmountInfoDTO.java
  29. 14 4
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java
  30. 33 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/controller/CwReimbursementInfoController.java
  31. 5 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/domain/CwReimbursementAmountInfo.java
  32. 9 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/mapper/CwReimbursementInfoMapper.java
  33. 53 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/mapper/xml/CwReimbursementInfoMapper.xml
  34. 107 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/service/CwReimbursementInfoService.java
  35. 7 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/service/dto/CwReimbursementAmountInfoDTO.java
  36. 7 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/controller/OssFileController.java
  37. 5 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/feign/WorkAttachmentApiImpl.java
  38. 7 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/mapper/OssServiceMapper.java
  39. 22 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/mapper/xml/OssServiceMapper.xml
  40. 169 0
      jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/OssService.java
  41. 15 0
      jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

+ 5 - 0
jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/factory/WorkAttachmentApiFallbackFactory.java

@@ -126,6 +126,11 @@ public class WorkAttachmentApiFallbackFactory implements FallbackFactory <IWorkA
 
             }
 
+            @Override
+            public Map<String, String> disposeElectronicEngineeringInvoice(List<String> attachmentIdList, String type) {
+                return null;
+            }
+
         };
     }
 }

+ 9 - 0
jeeplus-api/jeeplus-public-modules-api/src/main/java/com/jeeplus/sys/feign/IWorkAttachmentApi.java

@@ -190,6 +190,15 @@ public interface IWorkAttachmentApi {
      */
     @RequestMapping(value = "/oss/file/saveMsg2", method = RequestMethod.POST)
     void saveMsg2(@RequestBody Map<String ,String > map);
+
+    /**
+     * 处理数电发票数据中的购买方名称信息
+     * @param attachmentIdList
+     * @param type
+     * @return
+     */
+    @RequestMapping(value = "/oss/file/disposeElectronicEngineeringInvoice", method = RequestMethod.GET)
+    Map<String ,String > disposeElectronicEngineeringInvoice(@RequestParam(value = "attachmentIdList")List<String> attachmentIdList,@RequestParam(value = "type")String type);
 }
 
 

+ 5 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/factory/FinanceApiFallbackFactory.java

@@ -48,6 +48,11 @@ public class FinanceApiFallbackFactory implements FallbackFactory<IFinanceApi> {
             }
 
             @Override
+            public String disposeElectronicEngineeringInvoice() {
+                return null;
+            }
+
+            @Override
             public String getExceedCwFinance() {
                 return null;
             }

+ 7 - 0
jeeplus-api/jeeplus-system-api/src/main/java/com/jeeplus/flowable/feign/IFinanceApi.java

@@ -37,6 +37,13 @@ public interface IFinanceApi {
     String getCompleteCollection();
 
     /**
+     * 查询暂时未归档报告归档数据
+     * @return
+     */
+    @GetMapping(value = "/reimbursementApproval/info/disposeElectronicEngineeringInvoice")
+    String disposeElectronicEngineeringInvoice();
+
+    /**
      * 查询开票时间距今超过1个月的开票数据
      */
     @GetMapping(value = "/cw_finance/invoice/getExceedCwFinance")

+ 23 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/controller/ReimbursementInfoController.java

@@ -277,6 +277,29 @@ public class ReimbursementInfoController {
         return map;
     }
 
+
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @return
+     */
+    @ApiLog(value = "根据报销id和发票编号删除数据记录")
+    @PostMapping("deleteByIdAndNumber")
+    @ApiOperation(value = "根据报销id和发票编号删除数据记录")
+    public Map<String,Object> deleteByIdAndNumber(String id,String invoiceNumber){
+        Map map = new HashMap();
+        if(StringUtils.isBlank(invoiceNumber)){
+            map.put("success",false);
+            map.put("message","发票号不可为空");
+        }else if(StringUtils.isBlank(id)){
+            map.put("success",false);
+            map.put("message","报销信息未选择");
+        }else{
+            Integer count = service.deleteByIdAndNumber(invoiceNumber,id);
+            map.put("success",true);
+        }
+        return map;
+    }
+
     /**
      * 查询有无历史数据
      * @param id

+ 5 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/domain/ReimbursementAmountInfo.java

@@ -68,6 +68,11 @@ public class ReimbursementAmountInfo extends BaseEntity {
     private String invoiceUnit;
 
     /**
+     * 购买方名称
+     */
+    private String buyerName;
+
+    /**
      * 备注
      */
     private String remarks;

+ 2 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/ReimbursementInfoMapper.java

@@ -83,6 +83,8 @@ public interface ReimbursementInfoMapper extends BaseMapper<ReimbursementInfo> {
      */
     Integer getEffectiveDataByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
 
+    Integer deleteByIdAndNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
+
     @InterceptorIgnore(tenantLine = "true")
     List<ReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(@Param("idList") List<String> idList);
     @InterceptorIgnore(tenantLine = "true")

+ 10 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/mapper/xml/ReimbursementInfoMapper.xml

@@ -443,6 +443,7 @@
 		date_format(a.invoice_date,'%Y-%m-%d %h:%i:%s') as 'invoiceDate',
 		a.invoice_date,
 		a.invoice_unit,
+		a.buyer_name,
 		a.remarks,
 		ri.type as "status",
 		date_format(ri.reim_date,'%Y-%m-%d') as 'reimDate',
@@ -485,4 +486,13 @@
 		where id = #{id}
 	</update>
 
+
+	<delete id="deleteByIdAndNumber">
+		delete from reimbursement_amount_info
+		<where>
+			number = #{invoiceNumber}
+			and info_id = #{id}
+		</where>
+	</delete>
+
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/ReimbursementInfoService.java

@@ -1287,6 +1287,15 @@ public class ReimbursementInfoService {
         return infoMapper.getEffectiveDataByInvoiceNumber(invoiceNumber,id);
     }
 
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @param invoiceNumber
+     * @return
+     */
+    public Integer deleteByIdAndNumber(String invoiceNumber,String id){
+        return infoMapper.deleteByIdAndNumber(invoiceNumber,id);
+    }
+
     public List<ReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(List<String> idList) {
         List<ReimbursementAmountInfoDTO> list = infoMapper.getInvoiceReimbursementAmountList(idList);
 

+ 7 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/reimbursement/reimbursementInfo/service/dto/ReimbursementAmountInfoDTO.java

@@ -80,6 +80,13 @@ public class ReimbursementAmountInfoDTO extends BaseEntity {
     @Excel(name = "开票单位", width = 30, orderNum = "5")
     private String invoiceUnit;
 
+
+    /**
+     * 购买方名称
+     */
+    @Excel(name = "购买方名称", width = 30, orderNum = "5")
+    private String buyerName;
+
     /**
      * 备注
      */

+ 23 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/controller/CcpmReimbursementInfoController.java

@@ -291,6 +291,29 @@ public class CcpmReimbursementInfoController {
         return map;
     }
 
+
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @return
+     */
+    @ApiLog(value = "根据报销id和发票编号删除数据记录")
+    @PostMapping("deleteByIdAndNumber")
+    @ApiOperation(value = "根据报销id和发票编号删除数据记录")
+    public Map<String,Object> deleteByIdAndNumber(String id,String invoiceNumber){
+        Map map = new HashMap();
+        if(StringUtils.isBlank(invoiceNumber)){
+            map.put("success",false);
+            map.put("message","发票号不可为空");
+        }else if(StringUtils.isBlank(id)){
+            map.put("success",false);
+            map.put("message","报销信息未选择");
+        }else{
+            Integer count = service.deleteByIdAndNumber(invoiceNumber,id);
+            map.put("success",true);
+        }
+        return map;
+    }
+
     /**
      * 查询有无历史数据
      * @param id

+ 5 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/domain/CcpmReimbursementAmountInfo.java

@@ -69,6 +69,11 @@ public class CcpmReimbursementAmountInfo extends BaseEntity {
     private String invoiceUnit;
 
     /**
+     * 购买方名称
+     */
+    private String buyerName;
+
+    /**
      * 备注
      */
     private String remarks;

+ 2 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/mapper/CcpmReimbursementInfoMapper.java

@@ -62,6 +62,8 @@ public interface CcpmReimbursementInfoMapper extends BaseMapper<CcpmReimbursemen
      */
     Integer getEffectiveDataByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
 
+    Integer deleteByIdAndNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
+
     @InterceptorIgnore(tenantLine = "true")
     List<CcpmReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(@Param("idList") List<String> idList);
 

+ 10 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/mapper/xml/CcpmReimbursementInfoMapper.xml

@@ -636,6 +636,7 @@
 		date_format(a.invoice_date,'%Y-%m-%d %h:%i:%s') as 'invoiceDate',
 		a.invoice_date,
 		a.invoice_unit,
+		a.buyer_name,
 		a.remarks,
 		ri.type as "status",
 		date_format(ri.reim_date,'%Y-%m-%d') as 'reimDate',
@@ -695,4 +696,13 @@ WHERE
 			else null end
 		where id = #{id}
 	</update>
+
+
+	<delete id="deleteByIdAndNumber">
+		delete from ccpm_reimbursement_amount_info
+		<where>
+			number = #{invoiceNumber}
+			and info_id = #{id}
+		</where>
+	</delete>
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/service/CcpmReimbursementInfoService.java

@@ -827,6 +827,15 @@ public class CcpmReimbursementInfoService {
         return infoMapper.getEffectiveDataByInvoiceNumber(invoiceNumber, id);
     }
 
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @param invoiceNumber
+     * @return
+     */
+    public Integer deleteByIdAndNumber(String invoiceNumber,String id){
+        return infoMapper.deleteByIdAndNumber(invoiceNumber,id);
+    }
+
     public List<CcpmReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(List<String> idList) {
         List<CcpmReimbursementAmountInfoDTO> list = infoMapper.getInvoiceReimbursementAmountList(idList);
 

+ 7 - 0
jeeplus-modules/jeeplus-ccpm/src/main/java/com/jeeplus/ccpm/approvalInfo/service/dto/CcpmReimbursementAmountInfoDTO.java

@@ -80,6 +80,13 @@ public class CcpmReimbursementAmountInfoDTO extends BaseEntity {
     @Excel(name = "开票单位", width = 30, orderNum = "5")
     private String invoiceUnit;
 
+
+    /**
+     * 购买方名称
+     */
+    @Excel(name = "购买方名称", width = 30, orderNum = "5")
+    private String buyerName;
+
     /**
      * 备注
      */

+ 22 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/controller/ZsReimbursementInfoController.java

@@ -289,6 +289,28 @@ public class ZsReimbursementInfoController {
     }
 
     /**
+     * 根据发票号查询是否已经或正在报销
+     * @return
+     */
+    @ApiLog(value = "根据报销id和发票编号删除数据记录")
+    @PostMapping("deleteByIdAndNumber")
+    @ApiOperation(value = "根据报销id和发票编号删除数据记录")
+    public Map<String,Object> deleteByIdAndNumber(String id,String invoiceNumber){
+        Map map = new HashMap();
+        if(StringUtils.isBlank(invoiceNumber)){
+            map.put("success",false);
+            map.put("message","发票号不可为空");
+        }else if(StringUtils.isBlank(id)){
+            map.put("success",false);
+            map.put("message","报销信息未选择");
+        }else{
+            Integer count = service.deleteByIdAndNumber(invoiceNumber,id);
+            map.put("success",true);
+        }
+        return map;
+    }
+
+    /**
      * 查询有无历史数据
      * @param id
      * @return

+ 5 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/domain/ZsReimbursementAmountInfo.java

@@ -69,6 +69,11 @@ public class ZsReimbursementAmountInfo extends BaseEntity {
     private String invoiceUnit;
 
     /**
+     * 购买方名称
+     */
+    private String buyerName;
+
+    /**
      * 备注
      */
     private String remarks;

+ 2 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/mapper/ZsReimbursementInfoMapper.java

@@ -62,6 +62,8 @@ public interface ZsReimbursementInfoMapper extends BaseMapper<ZsReimbursementInf
      */
     Integer getEffectiveDataByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
 
+    Integer deleteByIdAndNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
+
     @InterceptorIgnore(tenantLine = "true")
     List<ZsReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(@Param("idList") List<String> idList);
 

+ 10 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/mapper/xml/ZsReimbursementInfoMapper.xml

@@ -635,6 +635,7 @@
 		date_format(a.invoice_date,'%Y-%m-%d %h:%i:%s') as 'invoiceDate',
 		a.invoice_date,
 		a.invoice_unit,
+		a.buyer_name,
 		a.remarks,
 		ri.type as "status",
 		date_format(ri.reim_date,'%Y-%m-%d') as 'reimDate',
@@ -667,4 +668,13 @@
 		where id = #{id}
 	</update>
 
+
+	<delete id="deleteByIdAndNumber">
+		delete from zs_reimbursement_amount_info
+		<where>
+			number = #{invoiceNumber}
+			and info_id = #{id}
+		</where>
+	</delete>
+
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/service/ZsReimbursementInfoService.java

@@ -822,6 +822,15 @@ public class ZsReimbursementInfoService {
         return infoMapper.getEffectiveDataByInvoiceNumber(invoiceNumber, id);
     }
 
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @param invoiceNumber
+     * @return
+     */
+    public Integer deleteByIdAndNumber(String invoiceNumber,String id){
+        return infoMapper.deleteByIdAndNumber(invoiceNumber,id);
+    }
+
     public List<ZsReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(List<String> idList) {
         List<ZsReimbursementAmountInfoDTO> list = infoMapper.getInvoiceReimbursementAmountList(idList);
 

+ 6 - 0
jeeplus-modules/jeeplus-centrecareful/src/main/java/com/jeeplus/centrecareful/approvalInfo/service/dto/ZsReimbursementAmountInfoDTO.java

@@ -80,6 +80,12 @@ public class ZsReimbursementAmountInfoDTO extends BaseEntity {
     @Excel(name = "开票单位", width = 30, orderNum = "5")
     private String invoiceUnit;
 
+
+    /**
+     * 购买方名称
+     */
+    @Excel(name = "购买方名称", width = 30, orderNum = "5")
+    private String buyerName;
     /**
      * 备注
      */

+ 23 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/controller/ConsultancyReimbursementInfoController.java

@@ -290,6 +290,29 @@ public class ConsultancyReimbursementInfoController {
         return map;
     }
 
+
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @return
+     */
+    @ApiLog(value = "根据报销id和发票编号删除数据记录")
+    @PostMapping("deleteByIdAndNumber")
+    @ApiOperation(value = "根据报销id和发票编号删除数据记录")
+    public Map<String,Object> deleteByIdAndNumber(String id,String invoiceNumber){
+        Map map = new HashMap();
+        if(StringUtils.isBlank(invoiceNumber)){
+            map.put("success",false);
+            map.put("message","发票号不可为空");
+        }else if(StringUtils.isBlank(id)){
+            map.put("success",false);
+            map.put("message","报销信息未选择");
+        }else{
+            Integer count = service.deleteByIdAndNumber(invoiceNumber,id);
+            map.put("success",true);
+        }
+        return map;
+    }
+
     /**
      * 查询有无历史数据
      * @param id

+ 5 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/domain/ConsultancyReimbursementAmountInfo.java

@@ -69,6 +69,11 @@ public class ConsultancyReimbursementAmountInfo extends BaseEntity {
     private String invoiceUnit;
 
     /**
+     * 购买方名称
+     */
+    private String buyerName;
+
+    /**
      * 备注
      */
     private String remarks;

+ 2 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/mapper/ConsultancyReimbursementInfoMapper.java

@@ -62,6 +62,8 @@ public interface ConsultancyReimbursementInfoMapper extends BaseMapper<Consultan
      */
     Integer getEffectiveDataByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
 
+    Integer deleteByIdAndNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
+
     @InterceptorIgnore(tenantLine = "true")
     List<ConsultancyReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(@Param("idList") List<String> idList);
 

+ 10 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/mapper/xml/ConsultancyReimbursementInfoMapper.xml

@@ -636,6 +636,7 @@
 		date_format(a.invoice_date,'%Y-%m-%d %h:%i:%s') as 'invoiceDate',
 		a.invoice_date,
 		a.invoice_unit,
+		a.buyer_name,
 		a.remarks,
 		ri.type as "status",
 		date_format(ri.reim_date,'%Y-%m-%d') as 'reimDate',
@@ -696,4 +697,13 @@ WHERE
 		where id = #{id}
 	</update>
 
+
+	<delete id="deleteByIdAndNumber">
+		delete from consultancy_reimbursement_amount_info
+		<where>
+			number = #{invoiceNumber}
+			and info_id = #{id}
+		</where>
+	</delete>
+
 </mapper>

+ 9 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/service/ConsultancyReimbursementInfoService.java

@@ -827,6 +827,15 @@ public class ConsultancyReimbursementInfoService {
         return infoMapper.getEffectiveDataByInvoiceNumber(invoiceNumber, id);
     }
 
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @param invoiceNumber
+     * @return
+     */
+    public Integer deleteByIdAndNumber(String invoiceNumber,String id){
+        return infoMapper.deleteByIdAndNumber(invoiceNumber,id);
+    }
+
     public List<ConsultancyReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(List<String> idList) {
         List<ConsultancyReimbursementAmountInfoDTO> list = infoMapper.getInvoiceReimbursementAmountList(idList);
 

+ 7 - 0
jeeplus-modules/jeeplus-consult/src/main/java/com/jeeplus/consultancy/approvalInfo/service/dto/ConsultancyReimbursementAmountInfoDTO.java

@@ -80,6 +80,13 @@ public class ConsultancyReimbursementAmountInfoDTO extends BaseEntity {
     @Excel(name = "开票单位", width = 30, orderNum = "5")
     private String invoiceUnit;
 
+
+    /**
+     * 购买方名称
+     */
+    @Excel(name = "购买方名称", width = 30, orderNum = "5")
+    private String buyerName;
+
     /**
      * 备注
      */

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

@@ -331,8 +331,6 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
 //        }
         IPage<CwFinanceInvoiceDTO> list = null;
         if(StringUtils.isNotBlank(export) && "export".equals(export)){
-            UserDTO userDTO = SpringUtil.getBean(IUserApi.class).getByToken(TokenProvider.getCurrentToken());
-            queryWrapper.eq("fi.create_by_id",userDTO.getId());
             list = cwFinanceInvoiceMapper.findExportList(page, queryWrapper);
             list.getRecords().forEach(item->{
                 //预开票且报告与发票关联完成的则已完成关联
@@ -785,18 +783,24 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
 
                 for (CwFinanceInvoiceDTO invoiceDTO : mapList) {
                     flag = true;
+                    //判定:项目开票金额不为0且不为空
                     if (!StringUtils.isBlank(invoiceDTO.getBaseAccount()) && !"0".equals(invoiceDTO.getBaseAccount())) {
                         flag = false;
                         break;
                     }
                 }
 
-                if (flag) {
+                if (flag) {//开票金额为0的状态
                     mapList.get(0).setBaseAccount(mapList.get(0).getAccount());
-                } else {
+                } else {//开票金额不为0的状态
+                    int indexFlag = 0;
                     for (CwFinanceInvoiceDTO invoiceDTO : mapList) {
+                        indexFlag ++ ;
+                        //开票金额
                         BigDecimal accountB = new BigDecimal(invoiceDTO.getAccount());
+                        //发票金额
                         BigDecimal accountDetailB = new BigDecimal(invoiceDTO.getAccountDetail());
+                        //项目开票金额
                         BigDecimal baseAccountB = new BigDecimal(invoiceDTO.getBaseAccount());
 
                         if((baseAccountB.compareTo(accountB) < 0 && baseAccountB.compareTo(accountDetailB) < 0)) {
@@ -806,6 +810,12 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
                         } else if(accountDetailB.compareTo(accountB) < 0){
                             invoiceDTO.setBaseAccount(invoiceDTO.getAccountDetail());
                         }
+
+                        if(indexFlag>1){
+                            invoiceDTO.setAccount("0");
+                            invoiceDTO.setAccountDetail("0");
+                            invoiceDTO.setNumber("");
+                        }
                     }
                 }
                 resultList.addAll(mapList);

+ 33 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/controller/CwReimbursementInfoController.java

@@ -397,6 +397,28 @@ public class CwReimbursementInfoController {
     }
 
     /**
+     * 根据发票号查询是否已经或正在报销
+     * @return
+     */
+    @ApiLog(value = "根据报销id和发票编号删除数据记录")
+    @PostMapping("deleteByIdAndNumber")
+    @ApiOperation(value = "根据报销id和发票编号删除数据记录")
+    public Map<String,Object> deleteByIdAndNumber(String id,String invoiceNumber){
+        Map map = new HashMap();
+        if(StringUtils.isBlank(invoiceNumber)){
+            map.put("success",false);
+            map.put("message","发票号不可为空");
+        }else if(StringUtils.isBlank(id)){
+            map.put("success",false);
+            map.put("message","报销信息未选择");
+        }else{
+            Integer count = service.deleteByIdAndNumber(invoiceNumber,id);
+            map.put("success",true);
+        }
+        return map;
+    }
+
+    /**
      * 查询有无历史数据
      * @param id
      * @return
@@ -431,4 +453,15 @@ public class CwReimbursementInfoController {
         String data=service.updatePaymentStatus(dto.getId(),dto.getPaymentStatus());
         return data;
     }
+
+
+    /**
+     * 查询暂时未归档报告归档数据
+     */
+    @ApiLog(value = "处理数电发票附件种购买方名称信息")
+    @GetMapping("disposeElectronicEngineeringInvoice")
+    @ApiOperation(value = "处理数电发票附件种购买方名称信息")
+    public void disposeElectronicEngineeringInvoice(){
+        service.disposeElectronicEngineeringInvoice();
+    }
 }

+ 5 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/domain/CwReimbursementAmountInfo.java

@@ -69,6 +69,11 @@ public class CwReimbursementAmountInfo extends BaseEntity {
     private String invoiceUnit;
 
     /**
+     * 购买方名称
+     */
+    private String buyerName;
+
+    /**
      * 备注
      */
     private String remarks;

+ 9 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/mapper/CwReimbursementInfoMapper.java

@@ -65,6 +65,8 @@ public interface CwReimbursementInfoMapper extends BaseMapper<CwReimbursementInf
      */
     Integer getEffectiveDataByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
 
+    Integer deleteByIdAndNumber(@Param("invoiceNumber") String invoiceNumber, @Param("id") String id);
+
     @InterceptorIgnore(tenantLine = "true")
     List<CwReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(@Param("idList") List<String> idList);
 
@@ -75,4 +77,11 @@ public interface CwReimbursementInfoMapper extends BaseMapper<CwReimbursementInf
     String findOfficeById(@Param("projectOffice")String projectOffice);
 
     void updatePaymentById(@Param("id") String id,@Param("paymentStatus") String paymentStatus);
+
+    List<String> getReimbursementIdList(String type);
+
+
+    void updateCwReimbursementAmountInfo(@Param("number") String number,@Param("buyerName") String buyerName,@Param("type") String type);
+
+
 }

+ 53 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/mapper/xml/CwReimbursementInfoMapper.xml

@@ -578,6 +578,14 @@
 		</where>
 	</select>
 
+	<delete id="deleteByIdAndNumber">
+		delete from cw_reimbursement_amount_info
+		<where>
+			number = #{invoiceNumber}
+			and info_id = #{id}
+		</where>
+	</delete>
+
 	<select id="getInvoiceReimbursementAmountList" resultType="com.jeeplus.finance.reimbursementApproval.approvalInfo.service.dto.CwReimbursementAmountInfoDTO">
 		select
 		a.id,
@@ -599,6 +607,7 @@
 		date_format(a.invoice_date,'%Y-%m-%d %h:%i:%s') as 'invoiceDate',
 		a.invoice_date,
 		a.invoice_unit,
+		a.buyer_name,
 		a.remarks,
 		ri.type as "status",
 		date_format(ri.reim_date,'%Y-%m-%d') as 'reimDate',
@@ -614,6 +623,7 @@
 		left join sys_dict_type sdt on sdt.id = sdv.dict_type_id and sdt.type = 'invoice_reimbursement_type'
 		<where>
 			a.del_flag = 0
+			and a.invoice_type is not null
 			and a.info_id in
 			<foreach collection="idList" item="id" index="index" open="(" close=")" separator=",">
 				#{id}
@@ -666,4 +676,47 @@ select
 			else null end
 		where id = #{id}
 	</update>
+
+	<select id="getReimbursementIdList" resultType="java.lang.String">
+		select distinct info_id
+		from
+		<if test="type == 1">
+			reimbursement_amount_info
+		</if>
+		<if test="type == 2">
+			cw_reimbursement_amount_info
+		</if>
+		<if test="type == 3">
+			ccpm_reimbursement_amount_info
+		</if>
+		<if test="type == 4">
+			zs_reimbursement_amount_info
+		</if>
+		<if test="type == 5">
+			consultancy_reimbursement_amount_info
+		</if>
+
+		where del_flag = 0 and invoice_type is not null and (buyer_name ='' or buyer_name is null)
+	</select>
+
+	<update id="updateCwReimbursementAmountInfo">
+		update
+			<if test="type == 1">
+				reimbursement_amount_info
+			</if>
+			<if test="type == 2">
+				cw_reimbursement_amount_info
+			</if>
+			<if test="type == 3">
+				ccpm_reimbursement_amount_info
+			</if>
+			<if test="type == 4">
+				zs_reimbursement_amount_info
+			</if>
+			<if test="type == 5">
+				consultancy_reimbursement_amount_info
+			</if>
+		set buyer_name = #{buyerName}
+		where number = #{number}
+	</update>
 </mapper>

+ 107 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/service/CwReimbursementInfoService.java

@@ -34,6 +34,7 @@ import org.apache.commons.compress.utils.Lists;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
@@ -1133,6 +1134,15 @@ public class CwReimbursementInfoService {
         return infoMapper.getEffectiveDataByInvoiceNumber(invoiceNumber,id);
     }
 
+    /**
+     * 根据发票号查询是否已经或正在报销
+     * @param invoiceNumber
+     * @return
+     */
+    public Integer deleteByIdAndNumber(String invoiceNumber,String id){
+        return infoMapper.deleteByIdAndNumber(invoiceNumber,id);
+    }
+
     public List<CwReimbursementAmountInfoDTO> getInvoiceReimbursementAmountList(List<String> idList) {
         List<CwReimbursementAmountInfoDTO> list = infoMapper.getInvoiceReimbursementAmountList(idList);
 
@@ -1188,4 +1198,101 @@ public class CwReimbursementInfoService {
             return "付款失败,请确认后付款";
         }
     }
+
+    /**
+     *
+     */
+    public void disposeElectronicEngineeringInvoice(){
+        //首先获取所有数电发票报销信息(会计)
+        /*List<String> cwReimbursementIdList = infoMapper.getReimbursementIdList("2");
+        //获取处理后的数据信息
+        Map<String, String> cwStringMap = batchDisposeElectronicEngineeringInvoice(cwReimbursementIdList,"2");
+        //遍历并修改数据
+        // 使用for-each循环和Map.Entry来遍历键和值
+        for (Map.Entry<String, String> entry : cwStringMap.entrySet()) {
+            String number = entry.getKey();
+            String buyerName = entry.getValue();
+            infoMapper.updateCwReimbursementAmountInfo(number,buyerName,"2");
+        }*/
+
+        //首先获取所有数电发票报销信息(评估)
+        /*List<String> pgReimbursementIdList = infoMapper.getReimbursementIdList("1");
+        //获取处理后的数据信息
+        Map<String, String> pgStringMap = batchDisposeElectronicEngineeringInvoice(pgReimbursementIdList,"1");
+        //遍历并修改数据
+        // 使用for-each循环和Map.Entry来遍历键和值
+        for (Map.Entry<String, String> entry : pgStringMap.entrySet()) {
+            String number = entry.getKey();
+            String buyerName = entry.getValue();
+            infoMapper.updateCwReimbursementAmountInfo(number,buyerName,"1");
+        }*/
+
+        //首先获取所有数电发票报销信息(ccpm)
+        List<String> ccpmReimbursementIdList = infoMapper.getReimbursementIdList("3");
+        //获取处理后的数据信息
+        Map<String, String> ccpmStringMap = batchDisposeElectronicEngineeringInvoice(ccpmReimbursementIdList,"3");
+        //遍历并修改数据
+        // 使用for-each循环和Map.Entry来遍历键和值
+        for (Map.Entry<String, String> entry : ccpmStringMap.entrySet()) {
+            String number = entry.getKey();
+            String buyerName = entry.getValue();
+            infoMapper.updateCwReimbursementAmountInfo(number,buyerName,"3");
+        }
+
+        //首先获取所有数电发票报销信息(ccpm)
+        List<String> zsReimbursementIdList = infoMapper.getReimbursementIdList("4");
+        //获取处理后的数据信息
+        Map<String, String> zsStringMap = batchDisposeElectronicEngineeringInvoice(zsReimbursementIdList,"4");
+        //遍历并修改数据
+        // 使用for-each循环和Map.Entry来遍历键和值
+        for (Map.Entry<String, String> entry : zsStringMap.entrySet()) {
+            String number = entry.getKey();
+            String buyerName = entry.getValue();
+            infoMapper.updateCwReimbursementAmountInfo(number,buyerName,"4");
+        }
+
+        //首先获取所有数电发票报销信息(ccpm)
+        List<String> zxReimbursementIdList = infoMapper.getReimbursementIdList("5");
+        //获取处理后的数据信息
+        Map<String, String> zxStringMap = batchDisposeElectronicEngineeringInvoice(zxReimbursementIdList,"5");
+        //遍历并修改数据
+        // 使用for-each循环和Map.Entry来遍历键和值
+        for (Map.Entry<String, String> entry : zxStringMap.entrySet()) {
+            String number = entry.getKey();
+            String buyerName = entry.getValue();
+            infoMapper.updateCwReimbursementAmountInfo(number,buyerName,"5");
+        }
+    }
+
+    public Map<String, String> batchDisposeElectronicEngineeringInvoice(List<String> reimbursementIdList,String type){
+        Map<String, String> map = new HashMap<>();
+        Map<String, String> stringObjectMap = new HashMap<>();
+        //分批处理
+        if(null!=reimbursementIdList && reimbursementIdList.size()>0){
+            int pointsDataLimit = 1;//限制条数
+            Integer size = reimbursementIdList.size();
+            //判断是否有必要分批
+            if(pointsDataLimit<size){
+                int part = size/pointsDataLimit;//分批数
+                //
+                for (int i = 0; i < part; i++) {
+                    //1条
+                    List<String> attachmentIdList = reimbursementIdList.subList(0, pointsDataLimit);
+                    //针对1条数据进行处理
+                    stringObjectMap = SpringUtil.getBean(IWorkAttachmentApi.class).disposeElectronicEngineeringInvoice(attachmentIdList, type);
+                    map.putAll(stringObjectMap);
+                    //剔除已经处理的数据
+                    reimbursementIdList.subList(0, pointsDataLimit).clear();
+                }
+                if(!reimbursementIdList.isEmpty()){
+                    stringObjectMap = SpringUtil.getBean(IWorkAttachmentApi.class).disposeElectronicEngineeringInvoice(reimbursementIdList, type);
+                    map.putAll(stringObjectMap);
+                }
+            }else{
+                stringObjectMap = SpringUtil.getBean(IWorkAttachmentApi.class).disposeElectronicEngineeringInvoice(reimbursementIdList, type);
+                map.putAll(stringObjectMap);
+            }
+        }
+        return map;
+    }
 }

+ 7 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/reimbursementApproval/approvalInfo/service/dto/CwReimbursementAmountInfoDTO.java

@@ -80,6 +80,13 @@ public class CwReimbursementAmountInfoDTO extends BaseEntity {
     @Excel(name = "开票单位", width = 30, orderNum = "5")
     private String invoiceUnit;
 
+
+    /**
+     * 购买方名称
+     */
+    @Excel(name = "购买方名称", width = 30, orderNum = "5")
+    private String buyerName;
+
     /**
      * 备注
      */

+ 7 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/controller/OssFileController.java

@@ -662,5 +662,12 @@ public class OssFileController {
         return map;
     }
 
+    @ApiOperation("处理数电发票数据中的购买方名称信息")
+    @GetMapping("/disposeElectronicEngineeringInvoice")
+    public Map<String,String> disposeElectronicEngineeringInvoice(@RequestParam List<String> attachmentIdList, @RequestParam String type){
+        //首先获取所有数电发票报销信息
+        Map<String, String> map = ossService.disposeElectronicEngineeringInvoice(attachmentIdList, type);
 
+        return map;
+    }
 }

+ 5 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/feign/WorkAttachmentApiImpl.java

@@ -124,4 +124,9 @@ public class WorkAttachmentApiImpl implements IWorkAttachmentApi {
 
     }
 
+    @Override
+    public Map<String, String> disposeElectronicEngineeringInvoice(List<String> attachmentIdList, String type) {
+        return null;
+    }
+
 }

+ 7 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/mapper/OssServiceMapper.java

@@ -63,4 +63,11 @@ public interface OssServiceMapper extends BaseMapper<WorkAttachment> {
 
     @InterceptorIgnore(tenantLine = "true")
     void deleteByAttachmentIdNotInIds(@Param("attachmentId")String attachmentId, @Param("delIds")List<String> delIds);
+
+    /**
+     * 根据attachmentId查询附件数据信息
+     * @param attachmentIdList
+     * @return
+     */
+    List<WorkAttachmentInfo> getElectronicEngineeringInvoiceAttachmentList(@Param("attachmentIdList")List<String> attachmentIdList, @Param("attachmentFlag")String attachmentFlag);
 }

+ 22 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/mapper/xml/OssServiceMapper.xml

@@ -117,4 +117,26 @@
     <select id="selectListByAttachmentId" resultType="com.jeeplus.sys.domain.WorkAttachmentInfo">
         select a.* from work_attachment a where a.attachment_id = #{id} order by a.sort ASC
     </select>
+
+
+
+    <select id="getElectronicEngineeringInvoiceAttachmentList" resultType="com.jeeplus.sys.domain.WorkAttachmentInfo">
+        SELECT a.id, a.url, a.type, a.attachment_id, a.attachment_name, a.attachment_flag,
+        a.module_type, a.attachment_type, a.file_size, a.sort, a.description,
+        a.create_time, a.create_by_id as "create_by.id" , a.update_time, a.update_by_id as "updateBy.id", a.del_flag
+        FROM work_attachment a
+        <where>
+            a.del_flag = 0
+
+            <if test="attachmentIdList != null">
+                AND a.attachment_id IN
+                <foreach collection="attachmentIdList" item="attachmentId" index="index" open="(" close=")" separator=",">
+                    #{attachmentId}
+                </foreach>
+            </if>
+            <if test="attachmentFlag != null and attachmentFlag != ''">
+                and a.attachment_flag = #{attachmentFlag}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 169 - 0
jeeplus-modules/jeeplus-public-modules/src/main/java/com/jeeplus/pubmodules/oss/service/OssService.java

@@ -2,6 +2,7 @@ package com.jeeplus.pubmodules.oss.service;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.OSSClient;
 import com.aliyun.oss.model.OSSObject;
@@ -20,6 +21,7 @@ import com.jeeplus.pubmodules.oss.service.dto.FileUrlDto;
 import com.jeeplus.pubmodules.oss.service.dto.WorkAttachmentDto;
 import com.jeeplus.sys.domain.WorkAttachmentInfo;
 import com.jeeplus.sys.feign.IUserApi;
+import com.jeeplus.sys.feign.IWorkAttachmentApi;
 import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.service.dto.WorkAttachmentInfoDTO;
 import lombok.extern.slf4j.Slf4j;
@@ -31,12 +33,19 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
+import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLEncoder;
@@ -548,4 +557,164 @@ public class OssService extends ServiceImpl<OssServiceMapper, WorkAttachment> {
     public void deleteByAttachmentIdNotInIds(String attachmentId, List<String> delIds) {
         ossServiceMapper.deleteByAttachmentIdNotInIds(attachmentId,delIds);
     }
+
+
+    public Map<String,Object> downLoadFileDisposeXmlFile(String file) {
+        file = "http://oss.gangwaninfo.com" + file;
+        file = file.replace("amp;", "");
+        String fileName = file.substring(file.lastIndexOf("/") + 1, file.length());
+        String cons = "";
+        if (file.contains(aliyunUrl)) {
+            cons = aliyunUrl;
+        } else if (file.contains("http://gangwan-app.oss-cn-hangzhou.aliyuncs.com")) {
+            cons = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com";
+        } else {
+            cons = aliyunDownloadUrl;
+        }
+        String key = file.split(cons + "/")[1];
+        log.info("-----------------------------------------");
+        log.info("fileName=" + fileName);
+        log.info("key=" + key);
+        log.info("-----------------------------------------");
+
+        String path = null;
+        if(System.getProperty("os.name").toLowerCase().contains("win")){
+            path = "D:/attachment-file/";
+        }else{
+            path = "/attachment-file/";
+        }
+        ossClientService.downByStreamSaveLocal(key, fileName, path+fileName);
+
+        Map<String,Object> map = new HashMap();
+        //创建DOM4J解析器对象
+        File newFile = new File(path + fileName);
+        try {
+            //MultipartFile转File
+            //newFile = FileUtil.transformMultipartFile(file);
+            // 创建一个 DocumentBuilderFactory
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            // 使用工厂创建一个 DocumentBuilder
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            // 使用 DocumentBuilder 解析 XML 文件
+            Document document = builder.parse(newFile);
+            // 获取所有header节点的集合
+            NodeList headerList = document.getElementsByTagName("Header");
+            // 获取所有eInvoiceDataList节点的集合
+            NodeList eInvoiceDataList = document.getElementsByTagName("EInvoiceData");
+            // 获取所有taxSupervisionInfo节点的集合
+            NodeList taxSupervisionInfoList = document.getElementsByTagName("TaxSupervisionInfo");
+
+            Map<String,String> map1 = xmlNodeListDataDispose(headerList, document);
+            Map<String,String> map2 = xmlNodeListDataDispose(eInvoiceDataList, document);
+            Map<String,String> map3 = xmlNodeListDataDispose(taxSupervisionInfoList, document);
+            map.putAll(map1);
+            map.putAll(map2);
+            map.putAll(map3);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            newFile.delete();
+        }
+        return map;
+    }
+
+    /**
+     * 对节点集合进行遍历,并获取每个节点下的参数信息
+     * @param nodeList
+     * @param document
+     * @return
+     */
+    public Map<String,String> xmlNodeListDataDispose(NodeList nodeList,Document document){
+        Map<String,String> map = new HashMap<>();
+        if(null != nodeList && nodeList.getLength()>0){
+            //遍历每一个header节点
+            for (int i = 0; i < nodeList.getLength(); i++) {
+                //通过 item(i)方法 获取一个header节点,nodelist的索引值从0开始
+                Node header = nodeList.item(i);
+                //解析定义节点的子节点
+                NodeList childNodes = header.getChildNodes();
+                //节点数据处理
+                Map<String,String> map1 = xmlDataDispose(childNodes, document);
+                map.putAll(map1);
+            }
+        }
+        return map;
+    }
+
+    /**
+     * 子节点遍历获取参数,若其下还有子节点,则循环调用 xmlNodeListDataDispose 方法
+     * @param childNodes
+     * @param document
+     * @return
+     */
+    public Map<String,String> xmlDataDispose(NodeList childNodes,Document document){
+        Map<String,String> map = new HashMap<>();
+        for (int k = 0; k < childNodes.getLength(); k++) {
+            // 区分出text类型的node以及element类型的node
+            if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
+                Node firstChild = childNodes.item(k).getFirstChild();
+                if(null != firstChild){
+                    if(StringUtils.isBlank(childNodes.item(k).getFirstChild().getNodeValue())){
+                        // 获取所有header节点的集合
+                        NodeList childList = document.getElementsByTagName(childNodes.item(k).getNodeName());
+
+                        String parentName = childNodes.item(k).getNodeName();
+                        //循环调用,获取最低级节点数据信息
+                        Map<String,String> map1 = xmlNodeListDataDispose(childList, document);
+                        Map<String,String> map2 = new HashMap<>();
+                        if(map1.size()>0){
+                            //将获取到的数据进行遍历,添加父节点的参数信息,防止子节点key键相同,导致数据被覆盖
+                            for (String key : map1.keySet()) {
+                                if(key.contains("-")){
+                                    String newKey = key.replaceAll("-","");
+                                    map2.put(parentName + newKey,map1.get(key));
+                                }else{
+                                    map2.put(parentName + key,map1.get(key));
+                                }
+                            }
+                        }
+                        map.putAll(map2);
+                    }
+                    //判定key 和value 值均存在,则进行储存,否则不进行储存
+                    if(StringUtils.isNotBlank(childNodes.item(k).getNodeName()) && StringUtils.isNotBlank(childNodes.item(k).getFirstChild().getNodeValue())){
+                        map.put(childNodes.item(k).getNodeName(),childNodes.item(k).getFirstChild().getNodeValue());
+                    }
+                }
+            }
+        }
+        return map;
+    }
+
+
+
+
+
+
+    /**
+     *
+     * @param attachmentIdList
+     * @param type  代表处理类型,不同类型代表不同的分公司的报销数据:1、评估;2、会计;3、ccpm;4、中审;5、咨询
+     */
+    public Map<String,String> disposeElectronicEngineeringInvoice(List<String> attachmentIdList, String type){
+        Map<String,String> map = new HashMap<>();
+        //首先获取所有数电发票报销信息
+        List<WorkAttachmentInfo> attachmentList = ossServiceMapper.getElectronicEngineeringInvoiceAttachmentList(attachmentIdList,"");
+        //遍历所有附件发票信息,并将其下载到本地固定文件夹,并对下载的文件进行数据解析
+        try{
+            for (WorkAttachmentInfo attachmentInfo : attachmentList) {
+                if(attachmentInfo.getUrl().contains(".xml")){
+                    Map<String, Object> stringObjectMap = this.downLoadFileDisposeXmlFile(attachmentInfo.getUrl());
+                    String invoiceNumber = (String) stringObjectMap.get("InvoiceNumber");
+                    String buyerInformationBuyerName = (String) stringObjectMap.get("BuyerInformationBuyerName");
+                    if(StringUtils.isNotBlank(invoiceNumber) && StringUtils.isNotBlank(buyerInformationBuyerName)){
+                        map.put(invoiceNumber,buyerInformationBuyerName);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.getMessage();
+        }
+        return map;
+    }
 }

+ 15 - 0
jeeplus-modules/jeeplus-xxl-job-executor-sample/src/main/java/com/xxl/job/executor/service/jobhandler/SampleXxlJob.java

@@ -733,6 +733,21 @@ public class SampleXxlJob {
 
 
     /**
+     * 处理电子发票
+     * @throws Exception
+     */
+    @XxlJob("disposeElectronicEngineeringInvoice")
+    public void disposeElectronicEngineeringInvoice(){
+        //处理评估公司数电发票报销数据
+        //String projectList = SpringUtil.getBean(IAssessApi.class).getProjectList();
+
+        SpringUtil.getBean ( FinanceFeignApi.class ).disposeElectronicEngineeringInvoice();
+    }
+
+
+
+
+    /**
      * 会计-超期收款发票通知
      */
     @XxlJob("exceedCwFinance")