Bladeren bron

2023年7月12日11:30:37

纪新园 2 jaren geleden
bovenliggende
commit
aaa75d6cd6

+ 12 - 0
blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProjectItem.java

@@ -1,5 +1,6 @@
 package org.springblade.project.entity;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -211,6 +212,17 @@ public class ServiceProjectItem extends TenantEntity implements Serializable {
 	@TableField(exist = false)
 	private List<ProjectItemDate> projectItemDateList;
 
+	/**
+	 * 提成比例
+	 */
+	private BigDecimal proportion;
+
+	@TableField(exist = false)
+	private String corpName;
+
+	@TableField(exist = false)
+	private String projectName;
+
 
 
 }

+ 147 - 22
blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java

@@ -14,6 +14,7 @@ import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
@@ -21,6 +22,7 @@ import org.springblade.project.entity.ServiceProject;
 import org.springblade.project.entity.ServiceProjectFiles;
 import org.springblade.project.entity.ServiceProjectItem;
 import org.springblade.project.excel.CommissionExcel;
+import org.springblade.project.excel.ServiceProjectItemExcel;
 import org.springblade.project.excel.StatisticsExcel;
 import org.springblade.project.service.ServiceProjectFilesService;
 import org.springblade.project.service.ServiceProjectItemService;
@@ -40,6 +42,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -896,6 +899,122 @@ public class ProjectController {
 		return R.data(iPage);
 	}
 
+	/**
+	 * 新任务列表(导出)
+	 *
+	 * @param pName
+	 * @param cornId
+	 * @param corpName
+	 * @param userName
+	 * @param deptid
+	 * @param status
+	 * @param actualDateStart
+	 * @param actualDateEnd
+	 * @param beginStartTime
+	 * @param beginEndTime
+	 * @param projectType
+	 * @param branch
+	 * @return
+	 */
+	@GetMapping("/itemTask/export")
+	public void itemTaskExport(@RequestParam(name = "pname", required = false) String pName,
+							   @RequestParam(name = "cornId", required = false) Long cornId,
+							   @RequestParam(name = "corpName", required = false) String corpName,
+							   @RequestParam(name = "userName", required = false) String userName,
+							   @RequestParam(name = "deptid", required = false) Long deptid,
+							   @RequestParam(name = "status", required = true) String status,
+							   @RequestParam(name = "actualDateStart", required = false) String actualDateStart,
+							   @RequestParam(name = "actualDateEnd", required = false) String actualDateEnd,
+							   @RequestParam(name = "beginStartTime", required = false) String beginStartTime,
+							   @RequestParam(name = "beginEndTime", required = false) String beginEndTime,
+							   @RequestParam(name = "projectType", required = false) Integer projectType,
+							   @RequestParam(name = "branch", required = false) String branch,
+							   @RequestParam(name = "sysNo", required = false) String sysNo,
+							   @RequestParam(name = "payStartTime", required = false) String payStartTime,
+							   @RequestParam(name = "payEndTime", required = false) String payEndTime,
+							   HttpServletResponse response
+	) {
+		List<String> listStatus = Arrays.asList(status.split(","));
+
+		LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		itemLambdaQueryWrapper
+			.eq(projectType != null, ServiceProjectItem::getProjectType, projectType)
+			.eq(StringUtils.isNotBlank(userName), ServiceProjectItem::getUserName, userName)
+			.eq(ServiceProjectItem::getTenantId, AuthUtil.getTenantId())
+			.like(StringUtils.isNotBlank(pName), ServiceProjectItem::getPName, pName)
+			.eq(ServiceProjectItem::getTenantId, AuthUtil.getTenantId())
+			.ge(StringUtils.isNotBlank(beginStartTime), ServiceProjectItem::getBeginTime, beginStartTime)
+			.le(StringUtils.isNotBlank(beginEndTime), ServiceProjectItem::getBeginTime, beginEndTime)
+			.ge(StringUtils.isNotBlank(actualDateStart), ServiceProjectItem::getActualDate, actualDateStart)
+			.le(StringUtils.isNotBlank(actualDateEnd), ServiceProjectItem::getActualDate, actualDateEnd)
+			.ge(StringUtil.isNotBlank(payStartTime), ServiceProjectItem::getPayTime, payStartTime)
+			.le(StringUtil.isNotBlank(payEndTime), ServiceProjectItem::getPayTime, payEndTime)
+			.like(StringUtils.isNotBlank(sysNo), ServiceProjectItem::getSysNo, sysNo)
+			.orderByDesc(ServiceProjectItem::getCreateTime);
+
+
+		LambdaQueryWrapper<ServiceProject> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		//客户名称
+		if (cornId != null) {
+			lambdaQueryWrapper.eq(ServiceProject::getCorpId, cornId);
+			List<ServiceProject> list = serviceProjectService.list(lambdaQueryWrapper);
+		}
+		if (StringUtils.isNotBlank(corpName)) {
+			List<Long> corpIdList = corpsDescClient.listCorpIdByName(corpName);
+			lambdaQueryWrapper.in(CollectionUtil.isNotEmpty(corpIdList), ServiceProject::getCorpId, corpIdList);
+
+		}
+		if (cornId != null || StringUtils.isNotBlank(corpName)) {
+			List<ServiceProject> list = serviceProjectService.list(lambdaQueryWrapper);
+			if (!CollectionUtils.isEmpty(list)) {
+				itemLambdaQueryWrapper.in(ServiceProjectItem::getPId, list.stream().map(ServiceProject::getId).collect(Collectors.toList()));
+			} else {
+				ExcelUtil.export(response, "任务", "任务", new ArrayList<>(), ServiceProjectItemExcel.class);
+			}
+		}
+
+		// 承做人
+		if (StringUtils.isNotBlank(corpName)) {
+			List<User> userList = userClient.userInfoByName(corpName, AuthUtil.getTenantId());
+			List<Long> userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+			itemLambdaQueryWrapper.in(ServiceProjectItem::getUserid, userIds);
+		}
+		itemLambdaQueryWrapper.orderByDesc(ServiceProjectItem::getCreateTime)
+			.eq(deptid != null, ServiceProjectItem::getDeptid, deptid)
+			.eq(ServiceProjectItem::getIsDeleted, 0)
+			.in(ServiceProjectItem::getStatus, listStatus)
+			.eq(ServiceProjectItem::getBranch, branch);
+		List<ServiceProjectItem> list = serviceProjectItemService.list(itemLambdaQueryWrapper);
+		if (!CollectionUtils.isEmpty(list)) {
+			String[] str = new String[]{"录入", "已请核", "审核中", "审核通过", "正在结算", "结算完成", "", "追加", "退费"};
+			String[] frequency = new String[]{"年", "半年", "审核中", "季度", "月", "单次"};
+			list.forEach(e -> {
+				e.setStrStatus(str[e.getStatus()]);
+				e.setFrequency(frequency[Integer.parseInt(e.getFrequency())]);
+				Long corpId = serviceProjectService.getOne(new LambdaQueryWrapper<ServiceProject>()
+					.eq(ServiceProject::getId, e.getPId())).getCorpId();
+				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpId);
+				if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+					e.setCorpName(corpMessage.getData().getCname());
+				}
+				//任务部门
+				R<Dept> dept = iSysClient.getDept(e.getDeptid());
+				if (dept.isSuccess() && dept.getData() != null) {
+					e.setDeptName(dept.getData().getDeptName());
+				}
+				//承做人
+				R<User> userR = userClient.userInfoById(e.getUserid());
+				if (userR.isSuccess()) {
+					e.setUserName(userR.getData().getRealName());
+				}
+				//毛收入
+				e.setGrossIncome((e.getServiceCharge().add(e.getMatMoney())).subtract(e.getCostReturn()));
+				e.setProjectName(e.getPName());
+			});
+			ExcelUtil.export(response, "任务", "任务", BeanUtil.copy(list, ServiceProjectItemExcel.class), ServiceProjectItemExcel.class);
+		}
+	}
+
 
 	/**
 	 * 统计主营业务-任务、提成统计
@@ -907,7 +1026,6 @@ public class ProjectController {
 	 * @param actualDateStart
 	 * @param actualDateEnd
 	 * @param userName
-	 * @param status
 	 * @param branch
 	 * @return
 	 */
@@ -946,12 +1064,12 @@ public class ProjectController {
 		IPage<ServiceProjectItem> iPage = serviceProjectItemService.page(page, itemLambdaQueryWrapper);
 		String deptIds = "";//部门
 		String userIds = "";//承做人
-		for (ServiceProjectItem projectItem : iPage.getRecords()){
-			if (ObjectUtil.isNotEmpty(projectItem.getDeptid())){
+		for (ServiceProjectItem projectItem : iPage.getRecords()) {
+			if (ObjectUtil.isNotEmpty(projectItem.getDeptid())) {
 				deptIds = deptIds + projectItem.getDeptid() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(projectItem.getUserid())){
-				userIds = userIds +projectItem.getUserid() + ",";
+			if (ObjectUtil.isNotEmpty(projectItem.getUserid())) {
+				userIds = userIds + projectItem.getUserid() + ",";
 			}
 		}
 		R<List<Dept>> deptList = iSysClient.selectByDeptIds(deptIds);
@@ -968,14 +1086,14 @@ public class ProjectController {
 					e.setCornName(corpMessage.getData().getCname());
 				}
 				//任务部门
-				if (e.getDeptid() != null){
-					if (ObjectUtil.isNotEmpty(deptList)){
+				if (e.getDeptid() != null) {
+					if (ObjectUtil.isNotEmpty(deptList)) {
 						e.setDeptName(deptList.getData().stream().filter(d -> d.getId().equals(e.getDeptid())).findFirst().get().getDeptName());
 					}
 				}
 				//承做人
-				if (e.getUserid() != null){
-					if (ObjectUtil.isNotEmpty(userList)){
+				if (e.getUserid() != null) {
+					if (ObjectUtil.isNotEmpty(userList)) {
 						e.setUserName(userList.stream().filter(d -> d.getId().equals(e.getUserid())).findFirst().get().getRealName());
 					}
 				}
@@ -989,13 +1107,20 @@ public class ProjectController {
 
 	@PostMapping("/updateProjectItem")
 	public R updateProjectItem(@RequestBody ServiceProjectItem serviceProjectItem) {
-		if (ObjectUtils.isNotNull(serviceProjectItem.getId())){
+		if (ObjectUtils.isNotNull(serviceProjectItem.getId())) {
 			R.fail("请选择修改条件");
 		}
 		serviceProjectItem.setTenantId(AuthUtil.getTenantId());
 		serviceProjectItem.setUpdateUser(AuthUtil.getUserId());
 		serviceProjectItem.setUpdateTime(new Date());
 		serviceProjectItem.setUpdateUserName(AuthUtil.getUser().getUserName());
+		if (ObjectUtils.isNotNull(serviceProjectItem.getProportion())) {
+			BigDecimal proportion = serviceProjectItem.getProportion().divide(new BigDecimal("100"), MathContext.DECIMAL32);
+			BigDecimal amount = serviceProjectItem.getServiceCharge().subtract(serviceProjectItem.getMatMoney());
+			serviceProjectItem.setCommission(amount.multiply(proportion, MathContext.DECIMAL32));
+		} else {
+			serviceProjectItem.setCommission(new BigDecimal("0.00"));
+		}
 		serviceProjectItemService.updateById(serviceProjectItem);
 		return R.data(serviceProjectItem.getId());
 	}
@@ -1003,13 +1128,13 @@ public class ProjectController {
 	/**
 	 * 统计主营业务-任务、提成统计导出
 	 *
-	 * @param beginTimeStart	任务统计开始时间
-	 * @param beginTimeEnd		任务统计结束时间
-	 * @param actualDateStart	提成统计开始时间
-	 * @param actualDateEnd		提成统计结束时间
-	 * @param userName			承做人
-	 * @param taskStatus		状态
-	 * @param branch			任务分支
+	 * @param beginTimeStart  任务统计开始时间
+	 * @param beginTimeEnd    任务统计结束时间
+	 * @param actualDateStart 提成统计开始时间
+	 * @param actualDateEnd   提成统计结束时间
+	 * @param userName        承做人
+	 * @param taskStatus      状态
+	 * @param branch          任务分支
 	 */
 	@GetMapping("/statisticsExport")
 	@ApiOperation(value = "任务 提成统计导出", notes = "任务 提成统计导出")
@@ -1022,7 +1147,7 @@ public class ProjectController {
 								 @RequestParam(name = "branch") String branch,
 								 @RequestParam(name = "type") String type,
 								 HttpServletResponse response
-	){
+	) {
 		LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		itemLambdaQueryWrapper
 			.eq(ServiceProjectItem::getTenantId, AuthUtil.getTenantId())
@@ -1059,14 +1184,14 @@ public class ProjectController {
 				}
 
 				R<String> taskStatusName = iDictBizClient.getOneValue("task_status", String.valueOf(e.getTaskStatus()), AuthUtil.getTenantId());
-				if (ObjectUtil.isNotEmpty(taskStatusName)){
+				if (ObjectUtil.isNotEmpty(taskStatusName)) {
 					e.setTaskStatusName(taskStatusName.getData());
 				}
 
 			});
 		}
 
-		if (type.equals("RW")){
+		if (type.equals("RW")) {
 			List<StatisticsExcel> excelList = new ArrayList<>();
 			list.forEach(e -> {
 				StatisticsExcel excel = new StatisticsExcel();
@@ -1078,7 +1203,7 @@ public class ProjectController {
 				excelList.add(excel);
 			});
 			ExcelUtil.export(response, "任务统计", "任务统计", excelList, StatisticsExcel.class);
-		}else if (type.equals("TC")){
+		} else if (type.equals("TC")) {
 			List<CommissionExcel> excelList = new ArrayList<>();
 			if (ObjectUtil.isNotEmpty(list)) {
 				list.forEach(e -> {
@@ -1092,7 +1217,7 @@ public class ProjectController {
 				});
 			}
 			ExcelUtil.export(response, "提成统计", "提成统计", excelList, CommissionExcel.class);
-		}else {
+		} else {
 			throw new RuntimeException("用户无导出权限!");
 		}
 	}

+ 101 - 0
blade-service/blade-project/src/main/java/org/springblade/project/excel/ServiceProjectItemExcel.java

@@ -0,0 +1,101 @@
+package org.springblade.project.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springblade.project.entity.ProjectItemDate;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * 服务明细
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ServiceProjectItemExcel {
+	private static final long serialVersionUID = 1L;
+
+	@ExcelProperty(value = "状态")
+	private String strStatus;
+
+	@ExcelProperty(value = "承做人")
+	private String userName;
+
+	@ExcelProperty(value = "客户名称")
+	private String corpName;
+
+	@ExcelProperty(value = "业务单号")
+	private String sysNo;
+
+	@ExcelProperty(value = "服务项目")
+	private String projectName;
+
+	@ExcelProperty(value = "任务部门")
+	private String deptName;
+
+	@ExcelProperty(value = "服务费")
+	private BigDecimal serviceCharge;
+
+	@ExcelProperty(value = "成本")
+	private BigDecimal matMoney;
+
+	@ExcelProperty(value = "合计金额")
+	private BigDecimal amount;
+
+	@ExcelProperty(value = "频率")
+	private String frequency;
+
+	@ExcelProperty(value = "提成比例")
+	private BigDecimal proportion;
+
+	@ExcelProperty(value = "提成")
+	private BigDecimal commission;
+
+	@ExcelProperty(value = "提醒日")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date reminderDay;
+
+	@ExcelProperty(value = "开始日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+
+	@ExcelProperty(value = "完成日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date actualDate;
+
+	@ExcelProperty(value = "制单人")
+	private String createUserName;
+
+	@ExcelProperty(value = "制单日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	@ExcelProperty(value = "最新修改人")
+	private String updateUserName;
+
+	@ExcelProperty(value = "最新修改时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+
+}