Browse Source

Merge branch 'master' of ssh://101.201.226.163:50022/ccsens_wiki/pt_ccsens

ptos
zhizhi wu 4 years ago
parent
commit
826eefe300
  1. 3
      src/main/java/com/ccsens/ptccsens/api/OcrController.java
  2. 10
      src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java
  3. 8
      src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java
  4. 13
      src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java
  5. 19
      src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java
  6. 7
      src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java
  7. 4
      src/main/java/com/ccsens/ptccsens/service/IOcrService.java
  8. 10
      src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java
  9. 35
      src/main/java/com/ccsens/ptccsens/service/OcrService.java
  10. 5
      src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java
  11. 40
      src/main/resources/mapper_dao/PluFinanceApplyDao.xml

3
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<OcrVo.BillInfo> identifyBill(@RequestParam(required = true) Part part) throws IOException {
public JsonResponse<OcrVo.BillInfo> identifyBill(@RequestParam(required = true) Part part) throws Exception {
log.info("图像识别");
// 压缩图像
ByteArrayOutputStream out = new ByteArrayOutputStream();

10
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<List<ProjectFinanceVo.TimeFinancialChart>> timeFinancialChart(@ApiParam @Validated @RequestBody QueryDto<ProjectFinanceDto.TimeFinancialChart> params) throws Exception{
log.info("查看所有的费用申请开始{}",params);
List<ProjectFinanceVo.TimeFinancialChart> timeFinancialChart = projectFinanceService.timeFinancialChart(params.getParam(),params.getUserId());
log.info("查看所有的费用申请结束:{}",timeFinancialChart);
return JsonResponse.newInstance().ok(timeFinancialChart);
}
}

8
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;
}
}

13
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;
}
}

19
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<ChartData> data;
}
@Data
@ApiModel("时间财务图-具体数据")
public static class ChartData {
@ApiModelProperty("任务名称")
private String name;
@ApiModelProperty("支出")
private Long expend;
}
}

7
src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java

@ -36,4 +36,11 @@ public interface PluFinanceApplyDao extends PluFinanceMapper {
* @return 所有的费用申请
*/
List<ProjectFinanceVo.AllMoneyApply> queryAllMoneyApply(@Param("projectId") Long projectId);
/**
* 时间财务图-统计
* @param projectId 项目id
* @return 时间财务图
*/
List<ProjectFinanceVo.TimeFinancialChart> timeFinancialChart(@Param("projectId") Long projectId);
}

4
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;
}

10
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<ProjectFinanceVo.AllMoneyApply> queryAllMoneyApply(ProjectFinanceDto.QueryAllMoneyApply param, Long userId);
/**
* 时间财务图-统计
* @param param 入参
* @param userId 用户id
* @return 时间财务图
*/
List<ProjectFinanceVo.TimeFinancialChart> timeFinancialChart(ProjectFinanceDto.TimeFinancialChart param, Long userId);
}

35
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;
}
}

5
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<ProjectFinanceVo.TimeFinancialChart> timeFinancialChart(ProjectFinanceDto.TimeFinancialChart param, Long userId) {
return pluFinanceApplyDao.timeFinancialChart(param.getProjectId());
}
}

40
src/main/resources/mapper_dao/PluFinanceApplyDao.xml

@ -101,5 +101,45 @@
AND ft2.rec_status = 0
</select>
<resultMap id="TimeFinancialChart" type="com.ccsens.ptccsens.bean.vo.ProjectFinanceVo$TimeFinancialChart">
<id column="time" property="time"/>
<collection property="data" ofType="com.ccsens.ptccsens.bean.vo.ProjectFinanceVo$ChartData">
<id column="name" property="name"/>
<result column="expend" property="expend"/>
</collection>
</resultMap>
<select id="timeFinancialChart" resultMap="TimeFinancialChart">
SELECT
task.`name`,
DATE_FORMAT(FROM_UNIXTIME (fa.apply_time/1000),'%Y-%m') AS `time`,
SUM(fa.money) AS expend
FROM
(
SELECT
ppt2.task_detail_id AS taskId,
td.`name`,
td.rec_status
FROM
t_pro_parent_task AS ppt2
LEFT JOIN t_pro_task_detail AS td ON td.id = ppt2.task_detail_id
WHERE
ppt2.rec_status = 0
AND ppt2.parent_task_detail_id IN (
SELECT
task_detail_id
FROM
t_pro_parent_task AS ppt1
WHERE
ppt1.parent_task_detail_id = #{projectId}
AND ppt1.rec_status = 0
)
AND td.rec_status = 0
) AS task
LEFT JOIN t_plu_finance AS f ON f.task_id = task.taskId
LEFT JOIN t_plu_finance_apply AS fa ON f.id = fa.finance_id
AND f.rec_status = 0 AND fa.rec_status = 0
GROUP BY task.`name`,DATE_FORMAT(FROM_UNIXTIME (fa.apply_time/1000),'%Y-%m')
</select>
</mapper>
Loading…
Cancel
Save