From da8139530934312bb3cbbac0989512126ebdcbfe Mon Sep 17 00:00:00 2001 From: OathK1per Date: Fri, 19 Nov 2021 10:41:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=E5=8A=9B=E6=88=90?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/HumanCostController.java | 5 +- .../cn/palmte/work/model/ProjectUserTime.java | 6 +- .../work/model/ProjectUserTimeRepository.java | 16 ++++- .../ProjectUserTimeRepositoryCustom.java | 3 + .../model/ProjectUserTimeRepositoryImpl.java | 13 +++- .../palmte/work/service/HumanCostService.java | 35 ++++++---- .../templates/admin/human_cost_individual.ftl | 6 +- .../templates/admin/human_cost_list.ftl | 65 +++++++++++-------- .../templates/admin/project_settle_add.ftl | 62 +++++++++++++++++- 9 files changed, 157 insertions(+), 54 deletions(-) diff --git a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java index 67bf14b..c53a5c0 100644 --- a/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java +++ b/src/main/java/cn/palmte/work/controller/backend/HumanCostController.java @@ -95,9 +95,11 @@ public class HumanCostController extends BaseController{ Page project = humanCostService.project(searchInfo, admin, pageNumber, pageSize); List staff = humanCostService.staff(searchInfo, admin); Map map = humanCostService.map(searchInfo, admin, pageNumber, pageSize); + BigDecimal total = humanCostService.sum(searchInfo, admin); model.put("pager", project); model.put("staff", staff); model.put("map", map); + model.put("total", total); return "admin/human_cost_list"; } @@ -152,9 +154,8 @@ public class HumanCostController extends BaseController{ @RequestMapping("/batchImport") @ResponseBody - public String batchImport(MultipartFile file) { + public String batchImport(MultipartFile file, @RequestParam(value = "date",required = false) String date) { try { - String date = "2021-11"; Map title = new HashMap<>(); Collection maps = ExcelUtil.importHumanCost(Map.class, file.getInputStream(), title,0); diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTime.java b/src/main/java/cn/palmte/work/model/ProjectUserTime.java index c526966..8f8b494 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTime.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTime.java @@ -37,7 +37,7 @@ public class ProjectUserTime { private String userName; @Column(name = "time") - private Date time; + private String time; @Column(name = "created_by") private int createdBy; @@ -107,11 +107,11 @@ public class ProjectUserTime { this.userName = userName; } - public Date getTime() { + public String getTime() { return time; } - public void setTime(Date time) { + public void setTime(String time) { this.time = time; } diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java index a1570cf..d809216 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepository.java @@ -1,16 +1,26 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; -import java.util.Date; +import java.util.List; /** * @author Yuanping Zhang * @date 2021/11/1 */ +@Transactional(rollbackFor = Exception.class) public interface ProjectUserTimeRepository extends JpaRepository { - @Query(value = "select * from project_user_time where user_id = ? and project_id = ? and time = ? limit 1", nativeQuery = true) - public ProjectUserTime findByUserIdAndProjectIdAndTime(int userId, int projectId, Date time); + @Query(value = "select * from project_user_time where user_id = ?1 and project_id = ?2 and time = ?3 limit 1", nativeQuery = true) + ProjectUserTime findByUserIdAndProjectIdAndTime(int userId, int projectId, String time); + + @Query(value = "select * from project_user_time where time = ?1", nativeQuery = true) + List findAllByTime(String time); + + @Modifying + @Query(value = "delete from project_user_time where time = ?1", nativeQuery = true) + int deleteByTime(String date); } diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryCustom.java b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryCustom.java index f882280..7720342 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryCustom.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryCustom.java @@ -2,6 +2,7 @@ package cn.palmte.work.model; import top.jfunc.common.db.bean.Page; +import java.math.BigDecimal; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -18,4 +19,6 @@ public interface ProjectUserTimeRepositoryCustom { List list(ConcurrentHashMap searchInfo, Admin admin, int pageNumber, int pageSize); Page individual(ConcurrentHashMap searchInfo, Integer id, int pageNumber, int pageSize); + + List sum(ConcurrentHashMap searchInfo, Admin admin); } diff --git a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryImpl.java b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryImpl.java index caf47de..08306a0 100644 --- a/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryImpl.java +++ b/src/main/java/cn/palmte/work/model/ProjectUserTimeRepositoryImpl.java @@ -53,13 +53,22 @@ public class ProjectUserTimeRepositoryImpl implements ProjectUserTimeRepositoryC public Page individual(ConcurrentHashMap searchInfo, Integer id, int pageNumber, int pageSize) { QueryHelper helper = new QueryHelper("select put.*", "from project_user_time put"); helper.addCondition("put.user_id = ?", id); - helper.addCondition(searchInfo.containsKey("time"),"put.time = ?", searchInfo.get("time") + "-01 00:00:00"); + helper.addCondition(searchInfo.containsKey("time"),"put.time = ?", searchInfo.get("time")); helper.addOrderProperty("created_time", false); return pagination.paginate(helper.getSql(), ProjectUserTime.class, pageNumber, pageSize); } + @Override + public List sum(ConcurrentHashMap searchInfo, Admin admin) { + QueryHelper helper = new QueryHelper("select put.user_salary, put.user_cost", "from project_user_time put"); + helper.leftJoin("project proj", "put.project_id = proj.id"); + helper.leftJoin("dept", "proj.dept_id = dept.id"); + searchQuery(helper, searchInfo, admin); + return pagination.find(helper.getSql(), ProjectUserTime.class); + } + private QueryHelper searchQuery(QueryHelper helper, ConcurrentHashMap searchInfo, Admin admin) { - helper.addCondition(searchInfo.containsKey("time"),"put.time = ?", searchInfo.get("time") + "-01 00:00:00"); + helper.addCondition(searchInfo.containsKey("time"),"put.time = ?", searchInfo.get("time")); helper.addCondition(searchInfo.containsKey("projectId") && !"-1".equals(searchInfo.get("projectId")), "put.project_id = ?", searchInfo.get("projectId")); helper.addCondition(searchInfo.containsKey("deptId") && !"-1".equals(searchInfo.get("deptId")), "dept.id = ?", searchInfo.get("deptId")); helper.addCondition(searchInfo.containsKey("userName"), "put.user_name like ?", "%'" + searchInfo.get("userName") + "'%"); diff --git a/src/main/java/cn/palmte/work/service/HumanCostService.java b/src/main/java/cn/palmte/work/service/HumanCostService.java index 3b42791..ccd7247 100644 --- a/src/main/java/cn/palmte/work/service/HumanCostService.java +++ b/src/main/java/cn/palmte/work/service/HumanCostService.java @@ -2,7 +2,6 @@ package cn.palmte.work.service; import cn.palmte.work.bean.ResponseMsg; import cn.palmte.work.model.*; -import cn.palmte.work.utils.DateKit; import cn.palmte.work.utils.InterfaceUtil; import cn.palmte.work.utils.StrKit; import org.slf4j.Logger; @@ -11,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.db.bean.Page; +import top.jfunc.common.utils.CollectionUtil; import java.math.BigDecimal; import java.util.*; @@ -101,7 +101,7 @@ public class HumanCostService { Project project = projectRepository.findByProjectName(projectName); if (project == null) { throw new Exception(projectName + "不存在"); - } else if (project.getStatus() != 15 || project.getApproveStatusSettle() == 1 || project.getApproveStatusSettle() == 2) { + } else if (project.getStatus() != Project.STATUS_SETTLE || project.getApproveStatusSettle() == 1 || project.getApproveStatusSettle() == 2) { throw new Exception(projectName + "不在项目结算的可编辑状态"); } if (projectSet.contains(projectName)) { @@ -136,17 +136,15 @@ public class HumanCostService { } else { throw new Exception(projectName + " " + key + "的成本需为大于0的最多两位小数的的数字"); } - ProjectUserTime put = projectUserTimeRepository.findByUserIdAndProjectIdAndTime(admin.getId(), project.getId(), DateKit.getDate(date + "-01 00:00:00", DateKit.TIME_FORMAT)); - if (put == null) { - put = new ProjectUserTime(); - put.setCreatedBy(InterfaceUtil.getAdminId()); - put.setCreatedTime(new Date()); - put.setTime(DateKit.getDate(date, "yyyy-MM")); - put.setProjectId(project.getId()); - put.setProjectName(project.getName()); - put.setUserName(admin.getRealName()); - put.setUserId(admin.getId()); - } +// ProjectUserTime put = projectUserTimeRepository.findByUserIdAndProjectIdAndTime(admin.getId(), project.getId(), date); + ProjectUserTime put = new ProjectUserTime(); + put.setCreatedBy(InterfaceUtil.getAdminId()); + put.setCreatedTime(new Date()); + put.setTime(date); + put.setProjectId(project.getId()); + put.setProjectName(project.getName()); + put.setUserName(admin.getRealName()); + put.setUserId(admin.getId()); put.setUserCost(userCost); put.setUserSalary(userSalary); @@ -173,6 +171,8 @@ public class HumanCostService { } } if (errorCount == 0) { + int row = projectUserTimeRepository.deleteByTime(date); + logger.info("删除重复条目:" + row + "条"); projectUserTimeRepository.save(saveList); } final ResponseMsg msg = ResponseMsg.buildSuccessMsg(String.format("成功:%d, 失败:%d", successCount, errorCount)); @@ -205,4 +205,13 @@ public class HumanCostService { } return columns; } + + public BigDecimal sum(ConcurrentHashMap searchInfo, Admin admin) { + List sum = projectUserTimeRepositoryImpl.sum(searchInfo, admin); + if(CollectionUtil.isNotEmpty(sum)){ + BigDecimal result = sum.stream().map((ProjectUserTime t) -> t.getUserCost().multiply(t.getUserSalary())).reduce(BigDecimal.ZERO, BigDecimal::add); + return result; + } + return new BigDecimal(0); + } } diff --git a/src/main/resources/templates/admin/human_cost_individual.ftl b/src/main/resources/templates/admin/human_cost_individual.ftl index 8f38591..67224cd 100644 --- a/src/main/resources/templates/admin/human_cost_individual.ftl +++ b/src/main/resources/templates/admin/human_cost_individual.ftl @@ -29,16 +29,14 @@
-<#-- <@shiro.hasPermission name="HUMAN_QUERY">--> + <@shiro.hasPermission name="HUMAN_QUERY"> -<#-- --> -<#-- <@shiro.hasPermission name="HUMAN_EXPORT">--> -<#-- --> +
diff --git a/src/main/resources/templates/admin/human_cost_list.ftl b/src/main/resources/templates/admin/human_cost_list.ftl index b5c2e0b..825e345 100644 --- a/src/main/resources/templates/admin/human_cost_list.ftl +++ b/src/main/resources/templates/admin/human_cost_list.ftl @@ -85,23 +85,21 @@
- +
- <#-- <@shiro.hasPermission name="HUMAN_COST_QUERY">--> + <@shiro.hasPermission name="HUMAN_COST_QUERY"> - <#-- --> - <#-- <@shiro.hasPermission name="HUMAN_COST_QUERY">--> - <#-- --> +
@@ -113,19 +111,18 @@
-<#-- <@shiro.hasPermission name="HUMAN_COST_IMPORT">--> + <@shiro.hasPermission name="HUMAN_COST_IMPORT">
- -
-<#-- --> + + 成本总计:${(total!0)?string("0.##")} +
@@ -182,7 +179,6 @@ -

@@ -190,7 +186,7 @@ - +