From ea300dbd1f56421dbe48c21c8972e080bbc80a62 Mon Sep 17 00:00:00 2001 From: lucky Date: Wed, 26 Jan 2022 10:42:54 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8F=91=E7=A5=A8=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/ptccsens/api/OcrController.java | 3 +- .../com/ccsens/ptccsens/bean/vo/OcrVo.java | 13 +++---- .../ccsens/ptccsens/service/IOcrService.java | 4 ++- .../ccsens/ptccsens/service/OcrService.java | 35 +++++++++++++------ 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/ccsens/ptccsens/api/OcrController.java b/src/main/java/com/ccsens/ptccsens/api/OcrController.java index 7a923df..181d09d 100644 --- a/src/main/java/com/ccsens/ptccsens/api/OcrController.java +++ b/src/main/java/com/ccsens/ptccsens/api/OcrController.java @@ -26,6 +26,7 @@ import javax.imageio.ImageIO; import javax.servlet.http.Part; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.text.ParseException; /** @@ -42,7 +43,7 @@ public class OcrController { @ApiOperation(value = "图像识别", notes = "whj") @RequestMapping(value = "/bill", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse identifyBill(@RequestParam(required = true) Part part) throws IOException { + public JsonResponse identifyBill(@RequestParam(required = true) Part part) throws Exception { log.info("图像识别"); // 压缩图像 ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java index cd23594..464b1a2 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java +++ b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java @@ -11,20 +11,15 @@ public class OcrVo { @Data @ApiModel("发票信息") public static class BillInfo { - @JSONField(name = "InvoiceCode") @ApiModelProperty("发票代码") private String invoiceCode; - @JSONField(name = "InvoiceNum") @ApiModelProperty("发票号码") - private String invoiceNumber; - @JSONField(name = "CommodityAmount") + private String invoiceNum; @ApiModelProperty("金额") - private Long money; - @JSONField(name = "CommodityTax") + private Long totalAmount; @ApiModelProperty("税额") - private Long taxMoney; - @JSONField(name = "InvoiceDate") + private Long totalTax; @ApiModelProperty("开票时间") - private String invoiceTime; + private Long invoiceDate; } } diff --git a/src/main/java/com/ccsens/ptccsens/service/IOcrService.java b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java index 4b042d5..aefc14b 100644 --- a/src/main/java/com/ccsens/ptccsens/service/IOcrService.java +++ b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java @@ -2,11 +2,13 @@ package com.ccsens.ptccsens.service; import com.ccsens.ptccsens.bean.vo.OcrVo; +import java.text.ParseException; + public interface IOcrService { /** * 发票识别 * @param img 发表base64 * @return 识别结果 */ - OcrVo.BillInfo identifyBill(String img); + OcrVo.BillInfo identifyBill(String img) throws ParseException; } diff --git a/src/main/java/com/ccsens/ptccsens/service/OcrService.java b/src/main/java/com/ccsens/ptccsens/service/OcrService.java index 997e207..00925ba 100644 --- a/src/main/java/com/ccsens/ptccsens/service/OcrService.java +++ b/src/main/java/com/ccsens/ptccsens/service/OcrService.java @@ -1,6 +1,9 @@ package com.ccsens.ptccsens.service; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.druid.sql.visitor.functions.If; import com.ccsens.ptccsens.bean.vo.OcrVo; import com.ccsens.ptccsens.util.BasicsConstant; import com.ccsens.util.RestTemplateUtil; @@ -12,26 +15,38 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; + @Service @Slf4j @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class OcrService implements IOcrService{ @Override - public OcrVo.BillInfo identifyBill(String img) { + public OcrVo.BillInfo identifyBill(String img) throws ParseException { // 图像识别 BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); basic.setImage(img); -// BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.APP_KEY, BasicsConstant.BaiDu.SECRET_KEY, basic); -// log.info("识别结果:{}",words); - String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY); - String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}"; - String url = StrUtil.format(invoiceUrl, token); - String result = RestTemplateUtil.postUrlEncode(url, basic); - log.info("result:{}", result); + BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY, basic); + log.info("识别结果:{}",words); +// String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY); +// String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}"; +// String url = StrUtil.format(invoiceUrl, token); +// String result = RestTemplateUtil.postUrlEncode(url, basic); +// log.info("result:{}", result); // 返回数据 - OcrVo.BillInfo personMsg = new OcrVo.BillInfo(); + OcrVo.BillInfo billInfo = new OcrVo.BillInfo(); + if (CollectionUtil.isNotEmpty(words.getWordsResult())) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd"); + BeanUtil.copyProperties(words.getWordsResult().get(0),billInfo); + billInfo.setTotalAmount(new BigDecimal(words.getWordsResult().get(0).getTotalAmount()).multiply(BigDecimal.valueOf(100)).longValue()); + billInfo.setTotalTax(new BigDecimal(words.getWordsResult().get(0).getTotalTax()).multiply(BigDecimal.valueOf(100)).longValue()); + billInfo.setInvoiceDate(sdf.parse(words.getWordsResult().get(0).getInvoiceDate()).getTime()); + + } // personMsg.toMsg(words.getWordsResult()); - return personMsg; + return billInfo; } } From e462d7cba4268ec47038aa0ba41cc7f9d6677e34 Mon Sep 17 00:00:00 2001 From: lucky Date: Wed, 26 Jan 2022 11:52:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=B4=A2=E5=8A=A1?= =?UTF-8?q?=E5=9B=BE=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/ProjectFinanceController.java | 10 +++++ .../ptccsens/bean/dto/ProjectFinanceDto.java | 8 ++++ .../ptccsens/bean/vo/ProjectFinanceVo.java | 19 +++++++++ .../persist/dao/PluFinanceApplyDao.java | 7 ++++ .../service/IProjectFinanceService.java | 10 +++++ .../service/ProjectFinanceService.java | 5 +++ .../mapper_dao/PluFinanceApplyDao.xml | 40 +++++++++++++++++++ 7 files changed, 99 insertions(+) diff --git a/src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java b/src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java index 047cb7f..bf48a89 100644 --- a/src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java +++ b/src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java @@ -93,4 +93,14 @@ public class ProjectFinanceController { log.info("查看所有的费用申请结束:{}",financeOfProjectList); return JsonResponse.newInstance().ok(financeOfProjectList); } + + @MustLogin + @ApiOperation(value = "时间财务图-统计", notes = "") + @RequestMapping(value = "/timeFinancialChart", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> timeFinancialChart(@ApiParam @Validated @RequestBody QueryDto params) throws Exception{ + log.info("查看所有的费用申请开始{}",params); + List timeFinancialChart = projectFinanceService.timeFinancialChart(params.getParam(),params.getUserId()); + log.info("查看所有的费用申请结束:{}",timeFinancialChart); + return JsonResponse.newInstance().ok(timeFinancialChart); + } } diff --git a/src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java b/src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java index c890841..713ad7b 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java +++ b/src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java @@ -93,4 +93,12 @@ public class ProjectFinanceDto { @ApiModelProperty("每页的数量") private Integer pageSize = 10; } + + @Data + @ApiModel("时间财务图-入参") + public static class TimeFinancialChart { + @NotNull + @ApiModelProperty("项目id") + private Long projectId; + } } diff --git a/src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java b/src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java index 0e637e9..a2d962e 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java +++ b/src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.apache.poi.ss.usermodel.charts.ChartData; import java.util.List; @@ -131,4 +132,22 @@ public class ProjectFinanceVo { @ApiModelProperty("类目名") private String categoryName; } + + @Data + @ApiModel("时间财务图-返参") + public static class TimeFinancialChart { + @ApiModelProperty("时间") + private String time; + @ApiModelProperty("数据") + private List data; + } + @Data + @ApiModel("时间财务图-具体数据") + public static class ChartData { + @ApiModelProperty("任务名称") + private String name; + @ApiModelProperty("支出") + private Long expend; + } + } diff --git a/src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java b/src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java index d61d8eb..1444d90 100644 --- a/src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java +++ b/src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java @@ -36,4 +36,11 @@ public interface PluFinanceApplyDao extends PluFinanceMapper { * @return 所有的费用申请 */ List queryAllMoneyApply(@Param("projectId") Long projectId); + + /** + * 时间财务图-统计 + * @param projectId 项目id + * @return 时间财务图 + */ + List timeFinancialChart(@Param("projectId") Long projectId); } diff --git a/src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java b/src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java index e39835b..dc9c3b1 100644 --- a/src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java +++ b/src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java @@ -5,6 +5,8 @@ import com.ccsens.ptccsens.bean.vo.ProjectFinanceVo; import com.github.pagehelper.Page; import com.github.pagehelper.PageInfo; +import java.util.List; + /** * @author AUSU */ @@ -54,4 +56,12 @@ public interface IProjectFinanceService { * @return 项目下所有的费用申请 */ PageInfo queryAllMoneyApply(ProjectFinanceDto.QueryAllMoneyApply param, Long userId); + + /** + * 时间财务图-统计 + * @param param 入参 + * @param userId 用户id + * @return 时间财务图 + */ + List timeFinancialChart(ProjectFinanceDto.TimeFinancialChart param, Long userId); } diff --git a/src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java b/src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java index 94429aa..835b3db 100644 --- a/src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java +++ b/src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java @@ -203,4 +203,9 @@ public class ProjectFinanceService implements IProjectFinanceService{ return new PageInfo<>(allMoneyApplyList); } + + @Override + public List timeFinancialChart(ProjectFinanceDto.TimeFinancialChart param, Long userId) { + return pluFinanceApplyDao.timeFinancialChart(param.getProjectId()); + } } diff --git a/src/main/resources/mapper_dao/PluFinanceApplyDao.xml b/src/main/resources/mapper_dao/PluFinanceApplyDao.xml index 48e3958..20939b5 100644 --- a/src/main/resources/mapper_dao/PluFinanceApplyDao.xml +++ b/src/main/resources/mapper_dao/PluFinanceApplyDao.xml @@ -101,5 +101,45 @@ AND ft2.rec_status = 0 + + + + + + + + + \ No newline at end of file