Browse Source

财务条

ptos
zhizhi wu 4 years ago
parent
commit
feb6e7d02a
  1. 211
      pom.xml
  2. 45
      src/main/java/com/ccsens/ptccsens/api/finance/FinanceController.java
  3. 19
      src/main/java/com/ccsens/ptccsens/bean/dto/FinanceDto.java
  4. 50
      src/main/java/com/ccsens/ptccsens/bean/vo/FinanceVo.java
  5. 2
      src/main/java/com/ccsens/ptccsens/config/SpringConfig.java
  6. 2
      src/main/java/com/ccsens/ptccsens/config/SwaggerConfigure.java
  7. 16
      src/main/java/com/ccsens/ptccsens/persist/dao/FinanceDao.java
  8. 48
      src/main/java/com/ccsens/ptccsens/service/FinanceService.java
  9. 17
      src/main/java/com/ccsens/ptccsens/service/IFinanceService.java
  10. 8
      src/main/resources/application-dev.yml
  11. 8
      src/main/resources/application-prod.yml
  12. 8
      src/main/resources/application-test.yml
  13. 20
      src/main/resources/mapper_dao/FinanceDao.xml

211
pom.xml

@ -13,6 +13,12 @@
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!--cloud 工具类-->
@ -40,8 +46,213 @@
<groupId>com.ccsens</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring 缓存-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--多redis配置-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions> <!--排除android-json,与腾讯短信接口qcloudsms冲突-->
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.21</version>
</dependency>
<!--Poi Excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--websocket-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- spring RabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- spring MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mybatis pagehelper包-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
</dependency>
<!-- MySQL数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Durid数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--jjwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<!--Jackson Xml-->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.0</version>
</dependency>
<!--Shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!--HtmlCleaner-->
<dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.22</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
<!--Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!--mybatis generator包-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.beanshell/bsh -->
<dependency>
<groupId>org.beanshell</groupId>
<artifactId>bsh</artifactId>
<version>2.0b5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.3</version>
</dependency>
<!--腾讯短信-->
<dependency>
<groupId>com.github.qcloudsms</groupId>
<artifactId>qcloudsms</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
</dependencies>
<build>

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

@ -0,0 +1,45 @@
package com.ccsens.ptccsens.api.finance;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import com.ccsens.ptccsens.service.IFinanceService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @description:
* @author: whj
* @time: 2022/1/24 16:41
*/
@Api(tags = "财务相关1" )
@RestController
@RequestMapping("/finance")
@Slf4j
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());
log.info("通过任务id查看任务关联的财务信息结束:{}", item);
return JsonResponse.newInstance().ok();
}
}

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

@ -0,0 +1,19 @@
package com.ccsens.ptccsens.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: whj
* @time: 2022/1/24 16:51
*/
public class FinanceDto {
@Data
@ApiModel("财务-根据任务ID查询财务条-请求")
public static class TaskId{
@ApiModelProperty("任务详情ID")
private Long taskDetailId;
}
}

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

@ -0,0 +1,50 @@
package com.ccsens.ptccsens.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @description:
* @author: whj
* @time: 2022/1/24 16:59
*/
public class FinanceVo {
@Data
@ApiModel("财务-根据任务ID查询财务条-返回")
public static class FinanceItem{
@ApiModelProperty("财务信息id")
private Long financeId;
@ApiModelProperty("预算,单位:分,展示时除以100")
private Long budget;
@ApiModelProperty("奖金,单位:分,展示时除以100")
private Long bonus;
@ApiModelProperty("项目支出,单位:分,展示时除以100")
private Long projectExpend;
@ApiModelProperty("日常支出,单位:分,展示时除以100")
private Long dailyExpend;
}
@Data
@ApiModel("财务-奖金+预算-返回")
public static class FinancePrepare{
@ApiModelProperty("财务信息id")
private Long financeId;
@ApiModelProperty("预算,单位:分,展示时除以100")
private Long budget;
@ApiModelProperty("奖金,单位:分,展示时除以100")
private Long bonus;
}
@Data
@ApiModel("财务-支出-返回")
public static class FinanceExpense{
@ApiModelProperty("财务信息id")
private Long financeId;
@ApiModelProperty("类型")
private String type;
@ApiModelProperty("金额,单位:分,展示时除以100")
private Long money;
}
}

2
src/main/java/com/ccsens/ptccsens/config/SpringConfig.java

@ -100,7 +100,7 @@ public class SpringConfig implements WebMvcConfigurer {
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/uploads/**")
.addResourceLocations("file:///home/cloud/ccbasics/uploads/");
.addResourceLocations("file:///home/ptccsens/server/uploads/");
}
/**

2
src/main/java/com/ccsens/ptccsens/config/SwaggerConfigure.java

@ -28,7 +28,7 @@ public class SwaggerConfigure /*implements WebMvcConfigurer*/ {
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors
.basePackage("com.ccsens.ccbasics.api"))
.basePackage("com.ccsens.ptccsens.api"))
.build()
.globalOperationParameters(setHeaderToken());
}

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

@ -0,0 +1,16 @@
package com.ccsens.ptccsens.persist.dao;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author whj
*/
public interface FinanceDao {
FinanceVo.FinancePrepare getPrepareByTaskId(@Param("taskId") Long taskDetailId);
List<FinanceVo.FinanceExpense> getExpenseByTaskId(@Param("taskId") Long taskDetailId);
}

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

@ -0,0 +1,48 @@
package com.ccsens.ptccsens.service;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
import com.ccsens.ptccsens.persist.dao.FinanceDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* @description:
* @author: whj
* @time: 2022/1/24 16:44
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class FinanceService implements IFinanceService {
@Resource
private FinanceDao financeDao;
@Override
public FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId) {
FinanceVo.FinancePrepare prepare = financeDao.getPrepareByTaskId(param.getTaskDetailId());
List<FinanceVo.FinanceExpense> expenses = financeDao.getExpenseByTaskId(param.getTaskDetailId());
final FinanceVo.FinanceItem item = new FinanceVo.FinanceItem();
if (prepare != null) {
item.setFinanceId(prepare.getFinanceId());
item.setBudget(prepare.getBudget());
item.setBonus(prepare.getBonus());
}
if (CollectionUtil.isNotEmpty(expenses)) {
item.setFinanceId(item.getFinanceId() == null ? expenses.get(0).getFinanceId() : item.getFinanceId());
expenses.forEach(expense->{
switch (expense.getType()) {
case "项目申请" : item.setProjectExpend(expense.getMoney());break;
case "日常报销" : item.setDailyExpend(expense.getMoney());break;
}
});
}
return item;
}
}

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

@ -0,0 +1,17 @@
package com.ccsens.ptccsens.service;
import com.ccsens.ptccsens.bean.dto.FinanceDto;
import com.ccsens.ptccsens.bean.vo.FinanceVo;
/**
* @author whj
*/
public interface IFinanceService {
/**
* 根据任务ID查询
* @param param 任务ID
* @param userId 操作人ID
* @return 财务条
*/
FinanceVo.FinanceItem getByTask(FinanceDto.TaskId param, Long userId);
}

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

@ -1,7 +1,7 @@
server:
port: 7320
servlet:
context-path:
context-path: v1.0
spring:
application:
name: ptccsens
@ -45,6 +45,6 @@ mybatisCache:
timeout: 1000
file:
path: /home/cloud/ccbasics/uploads/
domain: https://test.tall.wiki/gateway/ccbasics
imgDomain: https://test.tall.wiki/gateway/ccbasics/uploads/
path: /home/ptccsens/server/uploads/
domain: https://test.tall.wiki/gateway/ptccsens
imgDomain: https://test.tall.wiki/gateway/ptccsens/uploads/

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

@ -1,7 +1,7 @@
server:
port: 7320
servlet:
context-path:
context-path: v1.0
spring:
application:
name: ptccsens
@ -35,6 +35,6 @@ gatewayUrl: https://www.tall.wiki/gateway/
notGatewayUrl: https://www.tall.wiki/
apiUrl: https://www.tall.wiki/
file:
path: /home/cloud/ccbasics/uploads/
domain: https://www.tall.wiki/gateway/ccbasics
imgDomain: https://www.tall.wiki/gateway/ccbasics/uploads/
path: /home/ptccsens/server/uploads/
domain: https://www.tall.wiki/gateway/ptccsens
imgDomain: https://www.tall.wiki/gateway/ptccsens/uploads/

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

@ -1,7 +1,7 @@
server:
port: 7320
servlet:
context-path:
context-path: v1.0
spring:
application:
name: ptccsens
@ -43,6 +43,6 @@ eureka:
ip-address: 127.0.0.1
file:
path: /home/cloud/ccbasics/uploads/
domain: https://test.tall.wiki/gateway/ccbasics
imgDomain: https://test.tall.wiki/gateway/ccbasics/uploads/
path: /home/ptccsens/server/uploads/
domain: https://test.tall.wiki/gateway/ptccsens
imgDomain: https://test.tall.wiki/gateway/ptccsens/uploads/

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

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.ptccsens.persist.dao.FinanceDao">
<select id="getPrepareByTaskId" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$FinancePrepare">
select f.id as financeId, (f.budget+ifNull(sum(b.add_budget),0)) as budge, f.bonus from t_plu_finance f
left join t_plu_finance_append_budget b on f.id = b.finance_id and b.rec_status = 0
where f.task_id = #{taskId} and f.rec_status = 0
group by f.id
</select>
<select id="getExpenseByTaskId" resultType="com.ccsens.ptccsens.bean.vo.FinanceVo$FinanceExpense">
select f.id as financeId, t.name as type, sum(a.money) as money from
t_plu_finance f
left join t_plu_finance_apply a on f.id = a.finance_id and a.rec_status = 0
left join t_plu_finance_type t on a.type_id = t.id and t.rec_status = 0
where f.task_id = #{taskId} and f.rec_status = 0
GROUP BY f.id, t.id
</select>
</mapper>
Loading…
Cancel
Save