Browse Source

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

ptos
zy_Java 4 years ago
parent
commit
d1c7ba782b
  1. 27
      src/main/java/com/ccsens/ptccsens/api/OcrController.java
  2. 10
      src/main/java/com/ccsens/ptccsens/api/ProjectFinanceController.java
  3. 32
      src/main/java/com/ccsens/ptccsens/api/finance/FinanceController.java
  4. 24
      src/main/java/com/ccsens/ptccsens/bean/dto/FinanceDto.java
  5. 8
      src/main/java/com/ccsens/ptccsens/bean/dto/ProjectFinanceDto.java
  6. 48
      src/main/java/com/ccsens/ptccsens/bean/vo/FinanceVo.java
  7. 10
      src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java
  8. 19
      src/main/java/com/ccsens/ptccsens/bean/vo/ProjectFinanceVo.java
  9. 23
      src/main/java/com/ccsens/ptccsens/persist/dao/FinanceDao.java
  10. 7
      src/main/java/com/ccsens/ptccsens/persist/dao/PluFinanceApplyDao.java
  11. 78
      src/main/java/com/ccsens/ptccsens/service/FinanceService.java
  12. 27
      src/main/java/com/ccsens/ptccsens/service/IFinanceService.java
  13. 3
      src/main/java/com/ccsens/ptccsens/service/IOcrService.java
  14. 10
      src/main/java/com/ccsens/ptccsens/service/IProjectFinanceService.java
  15. 14
      src/main/java/com/ccsens/ptccsens/service/OcrService.java
  16. 5
      src/main/java/com/ccsens/ptccsens/service/ProjectFinanceService.java
  17. 1
      src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java
  18. 2
      src/main/resources/application-dev.yml
  19. 2
      src/main/resources/application-prod.yml
  20. 2
      src/main/resources/application-test.yml
  21. 75
      src/main/resources/mapper_dao/FinanceDao.xml
  22. 40
      src/main/resources/mapper_dao/PluFinanceApplyDao.xml

27
src/main/java/com/ccsens/ptccsens/api/OcrController.java

@ -1,14 +1,17 @@
package com.ccsens.ptccsens.api;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ImageUtil;
import cn.hutool.extra.servlet.ServletUtil;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.ptccsens.bean.dto.ProjectFinanceDto;
import com.ccsens.ptccsens.bean.vo.OcrVo;
import com.ccsens.ptccsens.bean.vo.ProjectFinanceVo;
import com.ccsens.ptccsens.service.IOcrService;
import com.ccsens.ptccsens.util.BasicsConstant;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.*;
import com.ccsens.util.baidu.BaiDuDto;
import com.ccsens.util.baidu.BaiDuUtil;
import com.ccsens.util.baidu.BaiDuVo;
@ -25,8 +28,10 @@ import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.Part;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
/**
@ -49,7 +54,25 @@ public class OcrController {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageUtil.scale(ImageIO.read(part.getInputStream()), out, 1f);
String img = Base64.encode(out.toByteArray());
OcrVo.BillInfo billInfo = ocrService.identifyBill(img);
//保存文件
// String extName = FileUtil.extName(part.getSubmittedFileName());
// String dir = PropUtil.path + File.separator + Constant.OrcImg.FILE_DIR;
// String extraPath = DateUtil.format(new Date(), "yyyyMMdd");
// String path = extraPath + File.separator+firstAidInfo.getId()+firstAidInfo.getName()+File.separator+ IdUtil.simpleUUID() + "." + extName;
// //转成file
// File saveFile = new File(dir + extraPath);
// if (!saveFile.exists()) {
// saveFile.mkdirs();
// }
// String fullPath = dir + File.separator + path;
// FileUtil.writeFromStream(file.getInputStream(), fullPath);
//1.上传文件
String allowedExts = BasicsConstant.FILE_TYPE_IMG;
String dir = PropUtil.path;
String path = UploadFileUtil_Servlet3.uploadFile(part, allowedExts, dir);
String realPath = PropUtil.imgDomain+""+path;
log.info("文件保存路径:{}",realPath);
OcrVo.BillInfo billInfo = ocrService.identifyBill(img,realPath);
log.info("图像识别结束:{}", billInfo);
return JsonResponse.newInstance().ok(billInfo);
}

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

32
src/main/java/com/ccsens/ptccsens/api/finance/FinanceController.java

@ -34,12 +34,12 @@ public class FinanceController {
@Resource
private IFinanceService financeService;
@MustLogin
@ApiOperation(value = "通过任务id查看任务关联的财务信息", notes = "")
@RequestMapping(value = "/getByTask", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.FinanceItem> getByTask(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.TaskId> params) {
log.info("通过任务id查看任务关联的财务信息:{}",params);
FinanceVo.FinanceItem item = financeService.getByTask(params.getParam(), params.getUserId());
FinanceVo.FinanceItem item = financeService.getByTask(params.getParam());
log.info("通过任务id查看任务关联的财务信息结束:{}", item);
return JsonResponse.newInstance().ok(item);
}
@ -88,4 +88,32 @@ public class FinanceController {
log.info("查看当前用户的费用申请历史信息(奖金)结束:{}", history);
return JsonResponse.newInstance().ok(history);
}
@MustLogin
@ApiOperation(value = "成员财务图", notes = "")
@RequestMapping(value = "/memberFinance", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.MemberFinance> memberFinance(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.MemberFinance> params) {
log.info("成员财务图:{}",params);
List<FinanceVo.MemberFinance> memberFinances = financeService.queryMemberFinance(params.getParam(), params.getUserId());
log.info("成员财务图结束:{}", memberFinances);
return JsonResponse.newInstance().ok(memberFinances);
}
@MustLogin
@ApiOperation(value = "任务支出图", notes = "")
@RequestMapping(value = "/taskExpense", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.TaskExpense> taskExpense(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.TaskExpense> params) {
log.info("任务支出图:{}",params);
List<FinanceVo.TaskExpense> taskExpenses = financeService.queryTaskExpense(params.getParam(), params.getUserId());
log.info("任务支出图结束:{}", taskExpenses);
return JsonResponse.newInstance().ok(taskExpenses);
}
@MustLogin
@ApiOperation(value = "名目支出统计", notes = "")
@RequestMapping(value = "/rowExpense", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<FinanceVo.RowExpense> rowExpense(@ApiParam @Validated @RequestBody QueryDto<FinanceDto.RowExpense> params) {
log.info("名目支出统计:{}",params);
List<FinanceVo.RowExpense> RowExpense = financeService.queryRowExpense(params.getParam(), params.getUserId());
log.info("名目支出统计结束:{}", RowExpense);
return JsonResponse.newInstance().ok(RowExpense);
}
}

24
src/main/java/com/ccsens/ptccsens/bean/dto/FinanceDto.java

@ -42,6 +42,7 @@ public class FinanceDto {
@NotNull
@ApiModelProperty("所属部门")
private String department;
@NotNull
@ApiModelProperty("所属项目id")
private Long projectId;
@ApiModelProperty("所属任务id")
@ -135,4 +136,27 @@ public class FinanceDto {
@ApiModelProperty("每页的数量,默认10,最大100")
private int pageSize = 10;
}
@Data
@ApiModel("财务-成员财务-请求")
public static class MemberFinance {
@NotNull
@ApiModelProperty("所属项目id")
private Long projectId;
}
@Data
@ApiModel("财务-任务支出-请求")
public static class TaskExpense {
@NotNull
@ApiModelProperty("所属项目id")
private Long projectId;
}
@Data
@ApiModel("财务-名目支出-请求")
public static class RowExpense {
@NotNull
@ApiModelProperty("所属项目id")
private Long projectId;
}
}

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

48
src/main/java/com/ccsens/ptccsens/bean/vo/FinanceVo.java

@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
@ -86,6 +87,8 @@ public class FinanceVo {
private String remark;
@ApiModelProperty("总金额")
private Long money;
@ApiModelProperty("申请时间")
private Long applyTime;
@ApiModelProperty("发票信息")
private List<Invoice> invoiceList;
@ApiModelProperty("审核人ID")
@ -142,5 +145,50 @@ public class FinanceVo {
private Long submitTime;
@ApiModelProperty("当前状态:0待审批 1已通过 2已驳回 3待放款 4:放款待确认 5已确认")
private byte applyType;
@ApiModelProperty("备注")
private String remark;
}
@Data
@ApiModel("财务-成员财务统计-返回")
public static class MemberFinance{
@ApiModelProperty("成员ID")
private Long memberId;
@ApiModelProperty("成员名")
private String memberName;
@ApiModelProperty("金额,单位:分")
private Long money;
@ApiModelProperty("占比,保留两位小数")
private BigDecimal percentage;
}
@Data
@ApiModel("财务-任务支出-返回")
public static class TaskExpense {
@ApiModelProperty("任务ID")
private Long taskDetailId;
@ApiModelProperty("财务信息id")
private Long financeId;
@ApiModelProperty("任务名")
private String taskName;
@ApiModelProperty("金额,单位:分")
private Long money;
@ApiModelProperty("占比,保留两位小数")
private BigDecimal percentage;
@ApiModelProperty("追加预算,单位:分")
private Long budget;
}
@Data
@ApiModel("财务-名目支出-返回")
public static class RowExpense {
@ApiModelProperty("名目ID")
private Long rowId;
@ApiModelProperty("名目")
private String rowName;
@ApiModelProperty("金额,单位:分")
private Long money;
@ApiModelProperty("占比,保留两位小数")
private BigDecimal percentage;
}
}

10
src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java

@ -14,12 +14,14 @@ public class OcrVo {
@ApiModelProperty("发票代码")
private String invoiceCode;
@ApiModelProperty("发票号码")
private String invoiceNum;
private String invoiceNumber;
@ApiModelProperty("金额")
private Long totalAmount;
private Long money;
@ApiModelProperty("税额")
private Long totalTax;
private Long taxMoney;
@ApiModelProperty("开票时间")
private Long invoiceDate;
private Long invoiceTime;
@ApiModelProperty("发票url")
private String url;
}
}

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

23
src/main/java/com/ccsens/ptccsens/persist/dao/FinanceDao.java

@ -82,4 +82,27 @@ public interface FinanceDao {
* @return 历史数据
*/
List<FinanceVo.PersonalHistory> queryPersonalHistory(@Param("param") FinanceDto.PersonalHistory param, @Param("userId") Long userId);
/**
* 查询成员财务信息
* @param projectId 项目ID
* @param userId 操作者
* @return 成员财务
*/
List<FinanceVo.MemberFinance> queryMemberFinance(@Param("projectId") Long projectId, @Param("userId") Long userId);
/**
* 查询任务支出信息
* @param projectId 项目ID
* @param userId 操作者
* @return 任务支出信息
*/
List<FinanceVo.TaskExpense> queryTaskExpense(@Param("projectId") Long projectId, @Param("userId") Long userId);
/**
* 查询名目支出信息
* @param projectId 项目ID
* @param userId 操作者
* @return 名目支出信息
*/
List<FinanceVo.RowExpense> queryRowExpense(@Param("projectId") Long projectId, @Param("userId") Long userId);
}

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

78
src/main/java/com/ccsens/ptccsens/service/FinanceService.java

@ -2,6 +2,7 @@ package com.ccsens.ptccsens.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.po.*;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
@ -19,6 +20,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -49,7 +51,7 @@ public class FinanceService implements IFinanceService {
@Override
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId) {
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param) {
FinanceVo.FinancePrepare prepare = financeDao.getPrepareByTaskId(param.getTaskDetailId());
List<FinanceVo.FinanceExpense> expenses = financeDao.getExpenseByTaskId(param.getTaskDetailId());
final FinanceVo.FinanceItem item = new FinanceVo.FinanceItem();
@ -88,15 +90,20 @@ public class FinanceService implements IFinanceService {
if (CollectionUtil.isEmpty(proMembers)) {
throw new BaseException(BasicsCodeError.NOT_MEMBER_SHEET);
}
// 查找对应的预算信息
PluFinanceExample financeExample = new PluFinanceExample();
financeExample.createCriteria().andTaskIdEqualTo(param.getTaskDetailId());
financeExample.setOrderByClause("id desc limit 1");
List<PluFinance> pluFinances = pluFinanceMapper.selectByExample(financeExample);
log.info("财务预算信息:{}", pluFinances);
if (CollectionUtil.isEmpty(pluFinances)) {
throw new BaseException(BasicsCodeError.FINANCE_NOT_FOUND);
PluFinance pluFinance = null;
if (param.getTaskDetailId() != null && param.getTaskDetailId() != 0) {
// 查找对应的预算信息
PluFinanceExample financeExample = new PluFinanceExample();
financeExample.createCriteria().andTaskIdEqualTo(param.getTaskDetailId());
financeExample.setOrderByClause("id desc limit 1");
List<PluFinance> pluFinances = pluFinanceMapper.selectByExample(financeExample);
log.info("财务预算信息:{}", pluFinances);
if (CollectionUtil.isEmpty(pluFinances)) {
throw new BaseException(BasicsCodeError.FINANCE_NOT_FOUND);
}
pluFinance = pluFinances.get(0);
}
// 计算总金额和发票金额是否一致
if (CollectionUtil.isNotEmpty(param.getInvoiceList())) {
long invoiceTotal = 0L;
@ -113,7 +120,7 @@ public class FinanceService implements IFinanceService {
apply.setId(snowflake.nextId());
apply.setMemberId(proMembers.get(0).getId());
apply.setTaskId(param.getTaskDetailId());
apply.setFinanceId(pluFinances.get(0).getId());
apply.setFinanceId(pluFinance == null ? 0 : pluFinance.getId());
apply.setApplyTime(System.currentTimeMillis());
apply.setInvoice(CollectionUtil.isEmpty(param.getInvoiceList()) ? BasicsConstant.Finance.INVOICE_UPLOAD_NO : BasicsConstant.Finance.INVOICE_UPLOAD_YES);
pluFinanceApplyMapper.insertSelective(apply);
@ -208,4 +215,55 @@ public class FinanceService implements IFinanceService {
List<FinanceVo.PersonalHistory> list = financeDao.queryPersonalHistory(param, userId);
return new PageInfo<>(list);
}
@Override
public List<FinanceVo.MemberFinance> queryMemberFinance(FinanceDto.MemberFinance param, Long userId) {
List<FinanceVo.MemberFinance> memberFinances = financeDao.queryMemberFinance(param.getProjectId(), userId);
if (CollectionUtil.isEmpty(memberFinances)) {
return memberFinances;
}
long total = 0;
for (FinanceVo.MemberFinance memberFinance: memberFinances) {
total += memberFinance.getMoney();
}
long finalTotal = total;
memberFinances.forEach(memberFinance -> {
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
memberFinance.setPercentage(new BigDecimal(memberFinance.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN));
});
return memberFinances;
}
@Override
public List<FinanceVo.TaskExpense> queryTaskExpense(FinanceDto.TaskExpense param, Long userId) {
List<FinanceVo.TaskExpense> taskExpenses = financeDao.queryTaskExpense(param.getProjectId(), userId);
long total = 0;
for (FinanceVo.TaskExpense taskExpense: taskExpenses) {
total += taskExpense.getMoney();
}
long finalTotal = total;
taskExpenses.forEach(taskExpense -> {
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
taskExpense.setPercentage(new BigDecimal(taskExpense.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN));
});
return taskExpenses;
}
@Override
public List<FinanceVo.RowExpense> queryRowExpense(FinanceDto.RowExpense param, Long userId) {
List<FinanceVo.RowExpense> rowExpenses = financeDao.queryRowExpense(param.getProjectId(), userId);
long total = 0;
for (FinanceVo.RowExpense rowExpense: rowExpenses) {
total += rowExpense.getMoney();
}
long finalTotal = total;
rowExpenses.forEach(rowExpense -> {
// BigDecimal.ROUND_HALF_DOWN:五舍六入,ROUND_HALF_UP:四舍五入,为避免超过100%,选择了五舍六入
rowExpense.setPercentage(new BigDecimal(rowExpense.getMoney()*100.0/ finalTotal).setScale(2, BigDecimal.ROUND_HALF_DOWN));
});
return rowExpenses;
}
}

27
src/main/java/com/ccsens/ptccsens/service/IFinanceService.java

@ -13,10 +13,9 @@ public interface IFinanceService {
/**
* 根据任务ID查询
* @param param 任务ID
* @param userId 操作人ID
* @return 财务条
*/
FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId);
FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param);
/**
* 查询费用申请类型
@ -55,4 +54,28 @@ public interface IFinanceService {
* @return 历史信息
*/
PageInfo<FinanceVo.PersonalHistory> queryPersonalHistory(FinanceDto.PersonalHistory param, Long userId);
/**
* 查询项目成员申请财务图
* @param param 项目
* @param userId 操作人信息
* @return 成员财务图
*/
List<FinanceVo.MemberFinance> queryMemberFinance(FinanceDto.MemberFinance param, Long userId);
/**
* 查询任务支出
* @param param 项目
* @param userId 操作人信息
* @return 任务支出
*/
List<FinanceVo.TaskExpense> queryTaskExpense(FinanceDto.TaskExpense param, Long userId);
/**
* 名目支出统计
* @param param 项目
* @param userId 操作人信息
* @return 名目支出
*/
List<FinanceVo.RowExpense> queryRowExpense(FinanceDto.RowExpense param, Long userId);
}

3
src/main/java/com/ccsens/ptccsens/service/IOcrService.java

@ -8,7 +8,8 @@ public interface IOcrService {
/**
* 发票识别
* @param img 发表base64
* @param realPath 文件路径
* @return 识别结果
*/
OcrVo.BillInfo identifyBill(String img) throws ParseException;
OcrVo.BillInfo identifyBill(String img,String realPath) 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);
}

14
src/main/java/com/ccsens/ptccsens/service/OcrService.java

@ -4,12 +4,15 @@ 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.po.Constant;
import com.ccsens.ptccsens.bean.vo.OcrVo;
import com.ccsens.ptccsens.util.BasicsCodeError;
import com.ccsens.ptccsens.util.BasicsConstant;
import com.ccsens.util.RestTemplateUtil;
import com.ccsens.util.baidu.BaiDuDto;
import com.ccsens.util.baidu.BaiDuUtil;
import com.ccsens.util.baidu.BaiDuVo;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -25,7 +28,7 @@ import java.text.SimpleDateFormat;
public class OcrService implements IOcrService{
@Override
public OcrVo.BillInfo identifyBill(String img) throws ParseException {
public OcrVo.BillInfo identifyBill(String img, String realPath) throws ParseException {
// 图像识别
BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic();
basic.setImage(img);
@ -41,10 +44,11 @@ public class OcrService implements IOcrService{
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());
billInfo.setInvoiceNumber(words.getWordsResult().get(0).getInvoiceNum());
billInfo.setMoney(new BigDecimal(words.getWordsResult().get(0).getTotalAmount()).multiply(BigDecimal.valueOf(100)).longValue());
billInfo.setTaxMoney(new BigDecimal(words.getWordsResult().get(0).getTotalTax()).multiply(BigDecimal.valueOf(100)).longValue());
billInfo.setInvoiceTime(sdf.parse(words.getWordsResult().get(0).getInvoiceDate()).getTime());
billInfo.setUrl(realPath);
}
// personMsg.toMsg(words.getWordsResult());
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());
}
}

1
src/main/java/com/ccsens/ptccsens/util/BasicsCodeError.java

@ -41,6 +41,7 @@ public class BasicsCodeError extends CodeError {
public static final Code CHECK_EXISTED = new Code(528,"您已经提交过审核结果了,无需重复提交。", true);
public static final Code TASK_DONT_EXIT = new Code(530,"任务不存在请检查后重试", true);
public static final Code FINANCE_NOT_FOUND = new Code(529,"没有找到任务对应的财务预算信息,请修改后重新提交申请。", true);
public static final Code IMG_ERROR = new Code(530,"请上传正确的发票图片", true);
public static final Code NOT_PERMISSION = new Code(529,"没有权限!", true);
public static final Code ROLE_ERROR = new Code(530,"角色信息错误!", true);

2
src/main/resources/application-dev.yml

@ -48,4 +48,4 @@ notGatewayUrl: http://101.201.226.163:7320/v1.0
file:
path: /home/ptccsens/server/uploads/
domain: https://test.tall.wiki/gateway/ptccsens
imgDomain: https://test.tall.wiki/gateway/ptccsens/uploads/
imgDomain: https://test.tall.wiki/gateway/ptccsens/v1.0/uploads/

2
src/main/resources/application-prod.yml

@ -37,4 +37,4 @@ apiUrl: http://www.tall.wiki/
file:
path: /home/ptccsens/server/uploads/
domain: https://www.tall.wiki/gateway/ptccsens
imgDomain: https://www.tall.wiki/gateway/ptccsens/uploads/
imgDomain: https://www.tall.wiki/gateway/ptccsens/v1.0/uploads/

2
src/main/resources/application-test.yml

@ -45,4 +45,4 @@ eureka:
file:
path: /home/ptccsens/server/uploads/
domain: https://test.tall.wiki/gateway/ptccsens
imgDomain: https://test.tall.wiki/gateway/ptccsens/uploads/
imgDomain: https://test.tall.wiki/gateway/ptccsens/v1.0/uploads/

75
src/main/resources/mapper_dao/FinanceDao.xml

@ -48,7 +48,8 @@
a.row_id AS rowId,
t3.NAME AS rowName,
a.remark,
a.money
a.money,
a.apply_time as applyTime
FROM
t_plu_finance_apply a
left join t_pro_task_detail p on a.project_id = p.id AND p.rec_status = 0
@ -121,7 +122,8 @@
a.submit_name as submitName,
a.money as money,
a.apply_time as submitTime,
a.apply_type as applyType
a.apply_type as applyType,
a.remark
FROM
t_plu_finance_apply a
LEFT JOIN t_pro_task_detail d ON a.task_id = d.id
@ -143,9 +145,76 @@
AND t.NAME = '奖金'
</when>
<otherwise>
AND t.NAME != '奖金'
AND (t.NAME != '奖金' OR t.`name` is NULL)
</otherwise>
</choose>
AND a.rec_status = 0
</select>
<select id="queryMemberFinance" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$MemberFinance">
SELECT
a.member_id AS memberId,
m.NAME AS memberName,
sum( a.money ) AS money
FROM
t_plu_finance_apply a,
t_pro_member m
WHERE
a.member_id = m.id
AND a.project_id = #{projectId}
AND a.apply_type NOT IN ( 0, 2 )
AND a.rec_status = 0
AND m.rec_status = 0
GROUP BY
a.member_id
</select>
<select id="queryTaskExpense" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$TaskExpense">
SELECT
a.finance_id,
a.task_id AS taskDetailId,
IF (d.id IS NULL, "其他", d. NAME) AS taskName,
sum(a.money) AS money,
SUM(ab.add_budget) AS budget
FROM
t_plu_finance_apply a
LEFT JOIN t_pro_task_detail d ON a.task_id = d.id
LEFT JOIN t_plu_finance_append_budget AS ab ON ab.finance_id = a.finance_id AND ab.rec_status = 0
AND d.rec_status = 0
WHERE
a.project_id = #{projectId}
AND a.apply_type NOT IN (0, 2)
AND a.rec_status = 0
GROUP BY
a.task_id
</select>
<select id="queryRowExpense" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$RowExpense">
SELECT
a.row_id AS rowId,
t.NAME AS rowName,
sum( a.money ) AS money
FROM
(
SELECT
id,
CASE
WHEN row_id != 0 THEN
row_id
WHEN category_id != 0 THEN
category_id ELSE type_id
END AS row_id,
money
FROM
t_plu_finance_apply
WHERE
project_id = #{projectId}
AND apply_type NOT IN ( 0, 2 )
AND rec_status = 0
) a,
t_plu_finance_type t
WHERE
a.row_id = t.id
AND t.rec_status = 0
GROUP BY
a.row_id
</select>
</mapper>

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