From 75c32d6d697a550400d0b4eec95b8570d83b726f Mon Sep 17 00:00:00 2001 From: kimi <kimi42345@gmail.com> Date: 星期五, 27 十一月 2020 19:20:32 +0800 Subject: [PATCH] 提交 --- src/main/java/com/highdatas/srs/web/SchemeController.java | 441 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 413 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/highdatas/srs/web/SchemeController.java b/src/main/java/com/highdatas/srs/web/SchemeController.java index 0de5da8..00e1a35 100644 --- a/src/main/java/com/highdatas/srs/web/SchemeController.java +++ b/src/main/java/com/highdatas/srs/web/SchemeController.java @@ -11,10 +11,7 @@ import com.highdatas.srs.entity.*; import com.highdatas.srs.pojo.CodeMsg; import com.highdatas.srs.pojo.Result; -import com.highdatas.srs.service.IProjectDealService; -import com.highdatas.srs.service.ISchemeDetailService; -import com.highdatas.srs.service.ISchemeService; -import com.highdatas.srs.service.ISysUserService; +import com.highdatas.srs.service.*; import com.highdatas.srs.util.DbUtils; import com.highdatas.srs.util.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -26,9 +23,11 @@ import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.DecimalFormat; +import java.text.MessageFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.IntFunction; /** * <p> @@ -49,9 +48,310 @@ ISchemeDetailService iSchemeDetailService; @Autowired IProjectDealService projectDealService; - + @Autowired + ISysRoleMappingService roleMappingService; + @Autowired + ISysRoleService roleService; + @Autowired + ISchemeDetailParttimeService detailParttimeService; + @Autowired + ISysTargetService targetService; @Value("${base.file.path}") String basePath; + + @RequestMapping(value = "/achieve", method = RequestMethod.GET) + public Result getAcheve(@RequestParam String type, HttpServletRequest request) throws ParseException { + EntityWrapper<Scheme> schemeEntityWrapper = new EntityWrapper<>(); + //缂栬緫 鍙栨秷 涓嶈鍏� + schemeEntityWrapper.notIn("status", "edit"); + List<Scheme> schemes = schemeService.selectList(schemeEntityWrapper); + + List<SchemeDetail> detailList = new ArrayList<>(); + for (Scheme scheme : schemes) { + String id = scheme.getId(); + EntityWrapper<SchemeDetail> schemeDetailEntityWrapper = new EntityWrapper<>(); + schemeDetailEntityWrapper.eq("parent_id", id); + List<SchemeDetail> schemeDetails = iSchemeDetailService.selectList(schemeDetailEntityWrapper); + detailList.addAll(schemeDetails); + } + + if (type.equalsIgnoreCase("total")) { + Result result = getTotalOptions(detailList); + }else if (type.equalsIgnoreCase("per")) { + Result result = getPerOptions(detailList); + }else if (type.equalsIgnoreCase("after")) { + Result result = getAfterOptions(detailList); + }else if(type.equalsIgnoreCase("month")) { + Result result = getMonthOptions(detailList); + }else if(type.equalsIgnoreCase("team")) { + Result result = getTeamOptions(detailList); + }else if(type.equalsIgnoreCase("member")) { + Result result = getTeamOptions(detailList); + } + return Result.success(null); + } + + private Result getTeamOptions(List<SchemeDetail> detailList) { + return null; + } + + private Result getMonthOptions(List<SchemeDetail> detailList) throws ParseException { + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + JSONObject resultData = new JSONObject(); + List<String> months = new ArrayList<>(); + List<String> types = new ArrayList<>(); + types.add("鎸囨爣"); + types.add("瀹屾垚"); + types.add("杈炬垚鐜�"); + List<JSONObject> datas = new ArrayList<>(); + JSONObject targetDataObject = new JSONObject(); + targetDataObject.put("name", "鎸囨爣"); + targetDataObject.put("type", "bar"); + datas.add(targetDataObject); + JSONObject amountDataObject = new JSONObject(); + amountDataObject.put("name", "瀹屾垚"); + amountDataObject.put("type", "bar"); + datas.add(amountDataObject); + JSONObject achieveDataObject = new JSONObject(); + achieveDataObject.put("name", "杈炬垚鐜�"); + achieveDataObject.put("type", "line"); + datas.add(achieveDataObject); + + List<JSONObject> entityset = new ArrayList<>(); + + JSONObject targetEntityObject = new JSONObject(); + targetEntityObject.put("type", "鎸囨爣"); + entityset.add(targetEntityObject); + JSONObject amountEntityObject = new JSONObject(); + amountEntityObject.put("type", "瀹屾垚"); + entityset.add(amountEntityObject); + JSONObject achieveEntityObject = new JSONObject(); + achieveEntityObject.put("type", "杈炬垚鐜�"); + entityset.add(achieveEntityObject); + + for (int i = 0; i < 12; i++) { + + calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),1,0,0,0); + Date yearStart = calendar.getTime(); + calendar.add(Calendar.MONTH, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + Date yearEnd = calendar.getTime(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH) + 1; + String oneMonth = MessageFormat.format("{0}{1}", year, month); + + BigDecimal totalBudget = BigDecimal.ZERO; + + for (SchemeDetail schemeDetail : detailList) { + BigDecimal rangeBudget = getRangeBudget(schemeDetail, yearStart, yearEnd); + totalBudget = totalBudget.add(rangeBudget); + } + //2 target + + EntityWrapper<SysTarget> sysTargetEntityWrapper = new EntityWrapper<>(); + sysTargetEntityWrapper.eq("amt_type", "pro") + .eq("year", year); + List<SysTarget> sysTargets = targetService.selectList(sysTargetEntityWrapper); + BigDecimal totalTarget = BigDecimal.ZERO; + + for (SysTarget sysTarget : sysTargets) { + BigDecimal one = sysTarget.getTarget(); + totalTarget = totalTarget.add(one); + } + BigDecimal achieve; + if(totalTarget.compareTo(BigDecimal.ZERO) == 0) { + achieve = BigDecimal.ZERO; + }else { + achieve = totalBudget.multiply(BigDecimal.valueOf(100)).divide(totalTarget, 1, BigDecimal.ROUND_HALF_UP); + } + ArrayList<BigDecimal> targetData = (ArrayList<BigDecimal>) targetDataObject.get("data"); + if (targetData == null) { + targetData = new ArrayList<BigDecimal>(); + } + targetData.add(i, totalTarget); + + ArrayList<BigDecimal> amountData = (ArrayList<BigDecimal>) amountDataObject.get("data"); + if (amountData == null) { + amountData = new ArrayList<BigDecimal>(); + } + amountData.add(i, totalBudget); + + ArrayList<BigDecimal> achieveData = (ArrayList<BigDecimal>) achieveDataObject.get("data"); + if (achieveData == null) { + achieveData = new ArrayList<BigDecimal>(); + } + achieveData.add(i, achieve); + + targetEntityObject.put(oneMonth, totalTarget); + amountEntityObject.put(oneMonth, totalBudget); + achieveEntityObject.put(oneMonth, achieve); + + months.add(oneMonth); + calendar.add(Calendar.MONTH , -1); + } + resultData.put("months",months); + resultData.put("types",types); + resultData.put("datas",datas); + resultData.put("entityset",entityset); + + return Result.success(resultData); + } + + private Result getAfterOptions(List<SchemeDetail> detailList) throws ParseException { + //0 + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + calendar.set(calendar.get(Calendar.YEAR),5,1,0,0,0); + Date yearStart = calendar.getTime(); + calendar.add(Calendar.MONTH, 7); + calendar.add(Calendar.DAY_OF_MONTH, -1); + + Date yearEnd = calendar.getTime(); + + //1 amount + BigDecimal totalBudget = BigDecimal.ZERO; + for (SchemeDetail schemeDetail : detailList) { + BigDecimal rangeBudget = getRangeBudget(schemeDetail, yearStart, yearEnd); + totalBudget = totalBudget.add(rangeBudget); + } + //2 target + int year = calendar.get(Calendar.YEAR); + EntityWrapper<SysTarget> sysTargetEntityWrapper = new EntityWrapper<>(); + sysTargetEntityWrapper.eq("amt_type", "pro") + .eq("year", year).eq("tgt_type","per"); + List<SysTarget> sysTargets = targetService.selectList(sysTargetEntityWrapper); + BigDecimal totalTarget = BigDecimal.ZERO; + + for (SysTarget sysTarget : sysTargets) { + BigDecimal one = sysTarget.getTarget(); + totalTarget = totalTarget.add(one); + } + if(totalTarget.compareTo(BigDecimal.ZERO) == 0) { + return Result.success(0); + }else { + BigDecimal achieve = totalBudget.multiply(BigDecimal.valueOf(100)).divide(totalTarget, 1, BigDecimal.ROUND_HALF_UP); + return Result.success(achieve); + } + } + + private Result getPerOptions(List<SchemeDetail> detailList) throws ParseException { + //0 + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + calendar.set(calendar.get(Calendar.YEAR),0,1,0,0,0); + Date yearStart = calendar.getTime(); + calendar.add(Calendar.MONTH, 7); + calendar.add(Calendar.DAY_OF_MONTH, -1); + + Date yearEnd = calendar.getTime(); + + //1 amount + BigDecimal totalBudget = BigDecimal.ZERO; + for (SchemeDetail schemeDetail : detailList) { + BigDecimal rangeBudget = getRangeBudget(schemeDetail, yearStart, yearEnd); + totalBudget = totalBudget.add(rangeBudget); + } + //2 target + int year = calendar.get(Calendar.YEAR); + EntityWrapper<SysTarget> sysTargetEntityWrapper = new EntityWrapper<>(); + sysTargetEntityWrapper.eq("amt_type", "pro") + .eq("year", year).eq("tgt_type","per"); + List<SysTarget> sysTargets = targetService.selectList(sysTargetEntityWrapper); + BigDecimal totalTarget = BigDecimal.ZERO; + + for (SysTarget sysTarget : sysTargets) { + BigDecimal one = sysTarget.getTarget(); + totalTarget = totalTarget.add(one); + } + if(totalTarget.compareTo(BigDecimal.ZERO) == 0) { + return Result.success(0); + }else { + BigDecimal achieve = totalBudget.multiply(BigDecimal.valueOf(100)).divide(totalTarget, 1, BigDecimal.ROUND_HALF_UP); + return Result.success(achieve); + } + } + + private Result getTotalOptions(List<SchemeDetail> detailList) throws ParseException { + //0 + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + calendar.set(calendar.get(Calendar.YEAR),0,1,0,0,0); + Date yearStart = calendar.getTime(); + calendar.add(Calendar.YEAR, 1); + calendar.add(Calendar.DAY_OF_MONTH, -1); + Date yearEnd = calendar.getTime(); + + //1 amount + BigDecimal totalBudget = BigDecimal.ZERO; + for (SchemeDetail schemeDetail : detailList) { + BigDecimal rangeBudget = getRangeBudget(schemeDetail, yearStart, yearEnd); + totalBudget = totalBudget.add(rangeBudget); + } + //2 target + int year = calendar.get(Calendar.YEAR); + EntityWrapper<SysTarget> sysTargetEntityWrapper = new EntityWrapper<>(); + sysTargetEntityWrapper.eq("amt_type", "pro").eq("year", year); + List<SysTarget> sysTargets = targetService.selectList(sysTargetEntityWrapper); + BigDecimal totalTarget = BigDecimal.ZERO; + + for (SysTarget sysTarget : sysTargets) { + BigDecimal one = sysTarget.getTarget(); + totalTarget = totalTarget.add(one); + } + if(totalTarget.compareTo(BigDecimal.ZERO) == 0) { + return Result.success(0); + }else { + BigDecimal achieve = totalBudget.multiply(BigDecimal.valueOf(100)).divide(totalTarget, 1, BigDecimal.ROUND_HALF_UP); + return Result.success(achieve); + } + } + + + + private BigDecimal getRangeBudget(SchemeDetail schemeDetail, Date yearStart, Date yearEnd) throws ParseException { + BigDecimal average = BigDecimal.ZERO; + BigDecimal rangeBudget = BigDecimal.ZERO; + Integer rangeDays; + BigDecimal budget = schemeDetail.getBudget(); + Boolean finish = schemeDetail.getFinish(); + Boolean edit = schemeDetail.getEdit(); + Boolean delay = schemeDetail.getDelay(); + if (edit) { + return BigDecimal.ZERO; + } + if (finish) { + int dayDiffer = DbUtils.getDayDiffer(schemeDetail.getStartTime(), schemeDetail.getFinishTime()); + dayDiffer = Math.abs(dayDiffer); + average = budget.divide(BigDecimal.valueOf(dayDiffer), 10, BigDecimal.ROUND_HALF_UP); + rangeDays = DbUtils.getRangeDays(schemeDetail.getStartTime(), schemeDetail.getFinishTime(), yearStart, yearEnd); + rangeDays = Math.abs(rangeDays); + } + if (delay) { + Date endTime = schemeDetail.getEndTime(); + Integer dayDiffer = null; + Date now = new Date(); + if (endTime.before(now)) { + dayDiffer = DbUtils.getDayDiffer(schemeDetail.getStartTime(), now); + dayDiffer = Math.abs(dayDiffer); + rangeDays = DbUtils.getRangeDays(schemeDetail.getStartTime(), now, yearStart, yearEnd); + rangeDays = Math.abs(rangeDays); + }else { + dayDiffer = DbUtils.getDayDiffer(schemeDetail.getStartTime(), schemeDetail.getEndTime()); + dayDiffer = Math.abs(dayDiffer); + rangeDays = DbUtils.getRangeDays(schemeDetail.getStartTime(), schemeDetail.getEndTime(), yearStart, yearEnd); + + } + average = budget.divide(BigDecimal.valueOf(dayDiffer), 10, BigDecimal.ROUND_HALF_UP); + rangeBudget = average.multiply(BigDecimal.valueOf(rangeDays)); + } + + return rangeBudget; + } @RequestMapping(value = "/daywork/{id}", method = RequestMethod.GET) public Result dayByUser(@PathVariable String id, HttpServletRequest request) { @@ -120,6 +420,27 @@ @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) public Result get(@PathVariable String id) { Scheme scheme = schemeService.selectById(id); + String leadUserId = scheme.getLeadUserId(); + if (!StringUtils.isEmpty(leadUserId)) { + String[] split = leadUserId.split(";"); + ArrayList<List<String>> lists = new ArrayList<>(); + for (String one : split) { + if (StringUtils.isEmpty(one)) { + continue; + } + SysRoleMapping mapping = roleMappingService.selectOne(new EntityWrapper<SysRoleMapping>().eq("user_id", one)); + if (mapping == null) { + continue; + } + SysRole sysRole = roleService.selectById(mapping.getRoleId()); + ArrayList<String> sysRoleMappings = new ArrayList<>(); + sysRoleMappings.add(sysRole.getName()); + sysRoleMappings.add(mapping.getUserId()); + lists.add(sysRoleMappings); + } + scheme.setLeadUserList(lists); + } + return Result.success(scheme); } @@ -312,7 +633,10 @@ detail.setEdit(false); detail.updateById(); } - scheme.setStatus("working"); + if (scheme.getStatus().equalsIgnoreCase("edit")) { + scheme.setStatus("working"); + } + boolean b = scheme.updateById(); if (b) { return Result.success(CodeMsg.UPDATE_SUCCESS); @@ -327,6 +651,16 @@ return Result.success(schemes); } + @RequestMapping(value = "/save/{id}", method = RequestMethod.GET) + public Result save(@PathVariable String id, @RequestParam BigDecimal budget) { + Scheme scheme = schemeService.selectById(id); + if (scheme == null) { + return Result.error(CodeMsg.ERROR_PARAMS_NOT_MATHED); + } + scheme.setBudget(budget).updateById(); + return Result.success(scheme); + } + @RequestMapping(value = "/page/{pageNo}", method = RequestMethod.GET) public Result get(@PathVariable Integer pageNo, HttpServletRequest request) { String pageSize = request.getParameter("pageSize"); @@ -334,19 +668,28 @@ String status = request.getParameter("status"); String type = request.getParameter("type"); String userId = request.getParameter("userId"); + String isRun = request.getParameter("isRun"); + String orderBy = request.getParameter("orderBy"); EntityWrapper<Scheme> schemeEntityWrapper = new EntityWrapper<>(); + if (!StringUtils.isEmpty(name)) { schemeEntityWrapper.like("name", name); + } + if (!StringUtils.isEmpty(orderBy)) { + schemeEntityWrapper.orderBy(orderBy); } if (!StringUtils.isEmpty(userId)) { schemeEntityWrapper.eq("user_id", userId); } if (!StringUtils.isEmpty(type)) { - schemeEntityWrapper.eq("reseach_type", type); + schemeEntityWrapper.like("type", type); } if (!StringUtils.isEmpty(status)) { schemeEntityWrapper.eq("status", status); + } + if (!StringUtils.isEmpty(isRun) && Boolean.valueOf(isRun)) { + schemeEntityWrapper.ne("status", "edit"); } Page<Scheme> schemePage; @@ -359,23 +702,45 @@ } Page<Scheme> page = schemeService.selectPage(schemePage, schemeEntityWrapper); + List<Scheme> schemes = schemeService.selectList(schemeEntityWrapper); + JSONObject resultObj = new JSONObject(); + BigDecimal decimal = new BigDecimal(0); + BigDecimal moneydecimal = new BigDecimal(0); + for (Scheme scheme : schemes) { + if (scheme.getBudget() != null) { + decimal = decimal.add(scheme.getBudget()); + } + if (scheme.getPayMoney() != null) { + moneydecimal = moneydecimal.add(scheme.getPayMoney()); + } + } + resultObj.fluentPut("budget", decimal); + resultObj.fluentPut("payMoney", moneydecimal); List<Scheme> records = page.getRecords(); Page<JSONObject> jsonObjectPage = new Page<>(); jsonObjectPage.setTotal(page.getTotal()); jsonObjectPage.setCurrent(page.getCurrent()); jsonObjectPage.setSize(page.getSize()); List<JSONObject> result = new ArrayList<>(); + for (Scheme scheme : records) { JSONObject json = (JSONObject) JSON.toJSON(scheme); Wrapper<SchemeDetail> delayWrapper = new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId()); Wrapper<SchemeDetail> finishWrapper = new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId()); - int total = iSchemeDetailService.selectCount(delayWrapper); + List<SchemeDetail> detailList = iSchemeDetailService.selectList(delayWrapper); + BigDecimal totalBudget = new BigDecimal(0); + for (SchemeDetail detail : detailList) { + BigDecimal budget = detail.getBudget(); + totalBudget = totalBudget.add(budget); + } + int total =detailList.size(); int delayInt = iSchemeDetailService.selectCount(delayWrapper.eq("delay", true)); int finishInt = iSchemeDetailService.selectCount(finishWrapper.eq("finish", true)); json.fluentPut("totalCnt", total); json.fluentPut("delayCnt", delayInt); json.fluentPut("finishCnt", finishInt); + json.fluentPut("totalBudget", totalBudget); // List<SchemeDetail> schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId()).eq("finish", true)); @@ -395,10 +760,14 @@ if (endDate == null) { endDate = detail.getFinishTime(); }else { - int i = DbUtils.compareDate(endDate, detail.getFinishTime()); - if(i == 1) { - endDate = detail.getFinishTime(); + if (detail.getFinish() && detail.getFinishTime() != null) { + + int i = DbUtils.compareDate(endDate, detail.getFinishTime()); + if(i == 1) { + endDate = detail.getFinishTime(); + } } + } } json.fluentPut("beginDate", beginDate); @@ -406,29 +775,37 @@ result.add(json); } jsonObjectPage.setRecords(result); - return Result.success(jsonObjectPage); + resultObj.fluentPut("datas", jsonObjectPage); + return Result.success(resultObj); + } + @RequestMapping(value = "/checkCode/{code}", method = RequestMethod.GET) + public Result add(@RequestParam String code) { + int cnt = schemeService.selectCount(new EntityWrapper<Scheme>().eq("code", code)); + if (cnt == 0) { + return Result.success(true); + } + return Result.success(false); } - @RequestMapping(value = "/addOrUpdate", method = RequestMethod.GET) - public Result add(@RequestParam String reseachType, @RequestParam String name, @RequestParam Date startTime, @RequestParam Date endTime, HttpServletRequest request) { - String id = request.getParameter("id"); - String desp = request.getParameter("desp"); - String userId = request.getParameter("userId"); - Scheme scheme; - if (StringUtils.isEmpty(id)) { - scheme = new Scheme(); - }else{ - scheme = schemeService.selectById(id); + @RequestMapping(value = "/addOrUpdate", method = RequestMethod.POST) + public Result add( @RequestBody Scheme scheme) { + + String code = scheme.getCode(); + Wrapper<Scheme> codeWrapper = new EntityWrapper<Scheme>().eq("code", code); + if (!StringUtils.isEmpty(scheme.getId())) { + codeWrapper.ne("id", scheme.getId()); } - if (scheme == null) { - return Result.error(CodeMsg.SELECT_ERROR_NOTFOUND); + int i = schemeService.selectCount(codeWrapper); + if (i > 0) { + return Result.error(CodeMsg.EXISTSCODE_ERROR); } - // reseachType to enum + if (StringUtils.isEmpty(scheme.getId())) { - scheme.setId(DbUtils.getUUID()); + scheme.setId(DbUtils.getUUID()).setCreateTime(new Date()); } - scheme.setUserId(userId).setCreateTime(new Date()).setName(name).setStartTime(startTime).setEndTime(endTime) - .setDesp(desp).setReseachType(reseachType); + + Date startTime = scheme.getStartTime(); + Date endTime = scheme.getEndTime(); List<SchemeDetail> schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId())); for (SchemeDetail detail : schemeDetailList) { @@ -446,6 +823,8 @@ detail.setEndTime(endTime); } } + + boolean updated = detail.updateById(); } @@ -495,6 +874,12 @@ @RequestMapping(value = "/del/{id}", method = RequestMethod.GET) public Result del(@PathVariable String id, HttpServletRequest request) throws JsonProcessingException { Scheme scheme = schemeService.selectById(id); + List<SchemeDetail> schemeDetailList = iSchemeDetailService.selectList(new EntityWrapper<SchemeDetail>().eq("parent_id", scheme.getId())); + for (SchemeDetail detail : schemeDetailList) { + detailParttimeService.delete(new EntityWrapper<SchemeDetailParttime>().eq("parent_id", detail.getId())); + detail.deleteById(); + } + boolean delete = scheme.deleteById(); if (delete) { -- Gitblit v1.8.0