Browse Source

事务管理--主营业务 功能开发

1021934019@qq.com 4 years ago
parent
commit
a880025132
17 changed files with 750 additions and 0 deletions
  1. 17 0
      blade-service-api/blade-project-api/pom.xml
  2. 103 0
      blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProject.java
  3. 105 0
      blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProjectItem.java
  4. 1 0
      blade-service-api/pom.xml
  5. 15 0
      blade-service/blade-project/Dockerfile
  6. 88 0
      blade-service/blade-project/pom.xml
  7. 39 0
      blade-service/blade-project/src/main/java/org/springblade/project/ProjectApplication.java
  8. 118 0
      blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java
  9. 18 0
      blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectItemMapper.java
  10. 19 0
      blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectMapper.java
  11. 23 0
      blade-service/blade-project/src/main/java/org/springblade/project/service/ServiceProjectItemService.java
  12. 25 0
      blade-service/blade-project/src/main/java/org/springblade/project/service/ServiceProjectService.java
  13. 22 0
      blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectItemServiceImpl.java
  14. 126 0
      blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java
  15. 11 0
      blade-service/blade-project/src/main/resources/application-dev.yml
  16. 10 0
      blade-service/blade-project/src/main/resources/application-prod.yml
  17. 10 0
      blade-service/blade-project/src/main/resources/application-test.yml

+ 17 - 0
blade-service-api/blade-project-api/pom.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>blade-service-api</artifactId>
+        <groupId>org.springblade</groupId>
+        <version>2.8.2.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-project-api</artifactId>
+    <name>${project.artifactId}</name>
+    <version>2.8.2.RELEASE</version>
+    <packaging>jar</packaging>
+
+</project>

+ 103 - 0
blade-service-api/blade-project-api/src/main/java/org/springblade/project/entity/ServiceProject.java

@@ -0,0 +1,103 @@
+package org.springblade.project.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springblade.core.tenant.mp.TenantEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+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
+@TableName("service_project")
+public class ServiceProject extends TenantEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	//主键
+	@TableId
+	private Long id;
+	//系统编号
+	private String sysNo;
+	//项目编号
+	private String code;
+	//项目名称
+	private String cName;
+	//客户id
+	private Long corpId;
+	//客户联系人
+	private String corpAttn;
+	//电话
+	private String corpTel;
+	//承揽人
+	private String salesName;
+	//收款方式
+	private String paymentType;
+	//应收金额
+	private BigDecimal debitAmount;
+	//预收金额
+	private BigDecimal advanceAmount;
+	//已收金额
+	private BigDecimal settlmentAmount;
+	//未收金额
+	private BigDecimal balanceAmount;
+	//开始时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+	//结束时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+	//租户id
+	private String tenantId;
+	//版本
+	private String version;
+	//特别提醒
+	private String specialRemarks;
+	//状态
+	private Integer status;
+	//是否删除
+	@TableLogic
+	private Integer isDeleted;
+	//备注
+	private String remark;
+	//创建人
+	private Long createUser;
+	//创建部门
+	private Long createDept;
+	//创建时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	//创建人姓名
+	private String createUserName;
+	//修改人
+	private Long updateUser;
+	//修改时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	//修改人姓名
+	private String updateUserName;
+	//责任人
+	private String dutyName;
+
+	@TableField(exist = false)
+	private List<ServiceProjectItem> itemList;
+
+
+}

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

@@ -0,0 +1,105 @@
+package org.springblade.project.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springblade.core.tenant.mp.TenantEntity;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+
+/**
+ * 服务明细
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+@Data
+@TableName("service_project_item")
+public class ServiceProjectItem extends TenantEntity implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	//
+	@TableId
+	private Long id;
+	//主表主键
+	private Long pId;
+	//排序
+	private Integer sort;
+	//费用id
+	private Long goodsId;
+	//备注
+	private String feeRemarks;
+	//计费单位
+	private String unit;
+	//数量
+	private BigDecimal quantity;
+	//单价
+	private BigDecimal price;
+	//金额
+	private BigDecimal amount;
+	//频率
+	private String frequency;
+	//提醒日
+	private Date reminderDay;
+	//税率
+	private BigDecimal taxRate;
+	//核销金额
+	private BigDecimal settlmentAmount;
+	//任务部门
+	private Long deptid;
+	//承做人
+	private Long userid;
+	//开始时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date beginTime;
+	//结束时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date endTime;
+	//实际完成时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date actualDate;
+	//账户名称
+	private String accountName;
+	//开户银行
+	private String accountBank;
+	//银行账号
+	private String accountNo;
+	//备注
+	private String remarks;
+	//版本
+	private String version;
+	//租户id
+	private String tenantId;
+	//创建人
+	private Long createUser;
+	//创建部门
+	private Long createDept;
+	//创建时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	//修改人
+	private Long updateUser;
+	//修改时间
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date updateTime;
+	//状态
+	private Integer status;
+	//是否已删除
+	@TableLogic
+	private Integer isDeleted;
+
+
+}

+ 1 - 0
blade-service-api/pom.xml

@@ -27,6 +27,7 @@
         <module>blade-stock-api</module>
         <module>blade-mocha-item-api</module>
         <module>trade-purchase-api</module>
+        <module>blade-project-api</module>
     </modules>
 
     <dependencies>

+ 15 - 0
blade-service/blade-project/Dockerfile

@@ -0,0 +1,15 @@
+FROM bladex/alpine-java:openjdk8-openj9_cn_slim
+
+MAINTAINER bladejava@qq.com
+
+RUN mkdir -p /blade/desk
+
+WORKDIR /blade/desk
+
+EXPOSE 8105
+
+ADD ./target/blade-desk.jar ./app.jar
+
+ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
+
+CMD ["--spring.profiles.active=test"]

+ 88 - 0
blade-service/blade-project/pom.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <parent>
+        <groupId>org.springblade</groupId>
+        <artifactId>blade-service</artifactId>
+        <version>2.8.2.RELEASE</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>blade-project</artifactId>
+    <name>${project.artifactId}</name>
+    <version>2.8.2.RELEASE</version>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-core-boot</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-swagger</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-project-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-user-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-flow-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+        </dependency>
+        <!--Oss-->
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-oss</artifactId>
+        </dependency>
+        <!--MinIO-->
+        <dependency>
+            <groupId>io.minio</groupId>
+            <artifactId>minio</artifactId>
+        </dependency>
+        <!--QiNiu-->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+        </dependency>
+        <!--<dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-starter-transaction</artifactId>
+        </dependency>-->
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>dockerfile-maven-plugin</artifactId>
+                <configuration>
+                    <username>${docker.username}</username>
+                    <password>${docker.password}</password>
+                    <repository>${docker.registry.url}/${docker.namespace}/${project.artifactId}</repository>
+                    <tag>${project.version}</tag>
+                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+                    <buildArgs>
+                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+                    </buildArgs>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>

+ 39 - 0
blade-service/blade-project/src/main/java/org/springblade/project/ProjectApplication.java

@@ -0,0 +1,39 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.project;
+
+import org.springblade.core.cloud.feign.EnableBladeFeign;
+import org.springblade.core.launch.BladeApplication;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.cloud.client.SpringCloudApplication;
+
+/**
+ * Desk启动器
+ *
+ * @author Chill
+ */
+@EnableBladeFeign
+@SpringCloudApplication
+// @SeataCloudApplication
+public class ProjectApplication {
+
+	public static void main(String[] args) {
+		BladeApplication.run("trade-project", ProjectApplication.class, args);
+	}
+
+}
+

+ 118 - 0
blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java

@@ -0,0 +1,118 @@
+package org.springblade.project.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springblade.project.entity.ServiceProject;
+
+import org.springblade.project.entity.ServiceProjectItem;
+import org.springblade.project.service.ServiceProjectItemService;
+import org.springblade.project.service.ServiceProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import javax.servlet.ServletException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+@NonDS
+@ApiIgnore
+@RestController
+@RequestMapping("/project")
+@AllArgsConstructor
+public class ProjectController {
+	@Autowired
+	private ServiceProjectService serviceProjectService;
+	@Autowired
+	private ServiceProjectItemService serviceProjectItemService;
+
+	@GetMapping("/list")
+	public R<IPage<?>> list(@RequestParam(name = "current", defaultValue = "1") Integer current,
+							@RequestParam(name = "size", defaultValue = "10") Integer size,
+							@RequestParam(name = "code", required = false) String code,
+							@RequestParam(name = "cName", required = false) String cName,
+							@RequestParam(name = "corpAttn", required = false) String corpAttn,
+							@RequestParam(name = "dutyName", required = false) String dutyName,
+							@RequestParam(name = "remark", required = false) String remark
+	) {
+		LambdaQueryWrapper<ServiceProject> serviceProjectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		serviceProjectLambdaQueryWrapper
+			.like(StringUtils.isNotBlank(dutyName), ServiceProject::getDutyName, dutyName)
+			.like(StringUtils.isNotBlank(remark), ServiceProject::getRemark, remark)
+			.like(StringUtils.isNotBlank(corpAttn), ServiceProject::getCorpAttn, corpAttn)
+			.like(StringUtils.isNotBlank(cName), ServiceProject::getCName, cName)
+			.eq(StringUtils.isNotBlank(code), ServiceProject::getCode, code)
+			.eq(ServiceProject::getIsDeleted, 0)
+			.orderByDesc(ServiceProject::getCreateTime);
+
+		Page<ServiceProject> page = new Page<>(current, size);
+		IPage<ServiceProject> iPage = serviceProjectService.page(page, serviceProjectLambdaQueryWrapper);
+		return R.data(iPage);
+
+	}
+
+	@PutMapping("modify")
+	public R edit(@RequestBody ServiceProject serviceProject)
+	{
+		serviceProjectService.modify(serviceProject);
+		return R.success("操作成功");
+	}
+
+	@DeleteMapping("delete")
+	public R delete (@RequestParam(name = "id", required = true) Long id)
+	{
+		List<Long> ids= Arrays.asList(id);
+		serviceProjectService.deleteLogic(ids);
+		return R.success("删除成功");
+	}
+
+	@GetMapping("findById")
+	public R<?> findById(@RequestParam(name = "id", required = true) Long id)
+	{
+		ServiceProject serviceProject = serviceProjectService.getById(id);
+
+		LambdaQueryWrapper<ServiceProjectItem> itemServiceLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		itemServiceLambdaQueryWrapper.eq(ServiceProjectItem::getPId,id).eq(ServiceProjectItem::getIsDeleted,0);
+		List<ServiceProjectItem> serviceProjectItems = serviceProjectItemService.list(itemServiceLambdaQueryWrapper);
+
+		if(!CollectionUtils.isEmpty(serviceProjectItems))
+		{
+			serviceProject.setItemList(serviceProjectItems);
+		}
+		return R.data(serviceProject);
+	}
+
+	@PutMapping("updateItemStatus")
+	public R check(@RequestParam(name = "id", required = true) Long itemId
+		          ,@RequestParam(name = "status", required = true) int status)
+	{
+		ServiceProjectItem projectItem = serviceProjectItemService.getById(itemId);
+		if(projectItem==null)
+		{
+			throw new RuntimeException("请确认传入id正确");
+		}
+
+		ServiceProjectItem serviceProjectItem=new ServiceProjectItem();
+		    serviceProjectItem.setId(itemId);
+		    serviceProjectItem.setUpdateTime(new Date());
+		    serviceProjectItem.setUpdateUser(SecureUtil.getUserId());
+		    serviceProjectItem.setStatus(status);
+			serviceProjectItemService.updateById(serviceProjectItem);
+			return R.success("请核完成");
+	}
+
+
+
+
+
+}

+ 18 - 0
blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectItemMapper.java

@@ -0,0 +1,18 @@
+package org.springblade.project.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springblade.project.entity.ServiceProjectItem;
+
+/**
+ * 服务明细
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+@Mapper
+public interface ServiceProjectItemMapper extends BaseMapper<ServiceProjectItem> {
+
+}

+ 19 - 0
blade-service/blade-project/src/main/java/org/springblade/project/mapper/ServiceProjectMapper.java

@@ -0,0 +1,19 @@
+package org.springblade.project.mapper;
+
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springblade.project.entity.ServiceProject;
+
+/**
+ * 服务模块
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+@Mapper
+public interface ServiceProjectMapper extends BaseMapper<ServiceProject> {
+
+}

+ 23 - 0
blade-service/blade-project/src/main/java/org/springblade/project/service/ServiceProjectItemService.java

@@ -0,0 +1,23 @@
+package org.springblade.project.service;
+
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.project.entity.ServiceProjectItem;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务明细
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+public interface ServiceProjectItemService extends BaseService<ServiceProjectItem>
+{
+
+
+}

+ 25 - 0
blade-service/blade-project/src/main/java/org/springblade/project/service/ServiceProjectService.java

@@ -0,0 +1,25 @@
+package org.springblade.project.service;
+
+
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.project.entity.ServiceProject;
+import org.springblade.project.entity.ServiceProjectItem;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 服务模块
+ *
+ * @author castiel
+ * @email sunlightcs@gmail.com
+ * @date 2021-10-26 13:50:49
+ */
+public interface ServiceProjectService extends BaseService<ServiceProject>
+{
+    void modify(ServiceProject serviceProject);
+
+}

+ 22 - 0
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectItemServiceImpl.java

@@ -0,0 +1,22 @@
+package org.springblade.project.service.impl;
+
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.project.entity.ServiceProjectItem;
+import org.springblade.project.mapper.ServiceProjectItemMapper;
+import org.springblade.project.service.ServiceProjectItemService;
+import org.springblade.project.service.ServiceProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+
+
+
+
+@Service
+public class ServiceProjectItemServiceImpl extends BaseServiceImpl<ServiceProjectItemMapper, ServiceProjectItem> implements ServiceProjectItemService {
+
+
+}

+ 126 - 0
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java

@@ -0,0 +1,126 @@
+package org.springblade.project.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.project.entity.ServiceProject;
+import org.springblade.project.entity.ServiceProjectItem;
+import org.springblade.project.mapper.ServiceProjectItemMapper;
+import org.springblade.project.mapper.ServiceProjectMapper;
+import org.springblade.project.service.ServiceProjectItemService;
+import org.springblade.project.service.ServiceProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+@Service
+public class ServiceProjectServiceImpl extends BaseServiceImpl<ServiceProjectMapper, ServiceProject> implements ServiceProjectService
+{
+   @Autowired
+   private ServiceProjectMapper serviceProjectMapper;
+   @Autowired
+   private ServiceProjectItemMapper serviceProjectItemMapper;
+
+	@Override
+	@Transactional
+	public void modify(ServiceProject serviceProject)
+	{
+		List<ServiceProjectItem> itemList = serviceProject.getItemList();
+      //新增操作,不用考虑子项问题,子项必然是新增
+      if(serviceProject.getId()<1)
+      {
+
+		  serviceProjectMapper.insert(serviceProject);
+		  if(!CollectionUtils.isEmpty(itemList))
+		  {
+			  itemList.forEach(e->{
+			  	e.setPId(serviceProject.getId());
+                e.setCreateTime(new Date());
+                e.setUpdateUser(SecureUtil.getUserId());
+                serviceProjectItemMapper.insert(e);
+			  });
+		  }
+	  }
+	  //修改操作,则需要判断子项是否为新增、修改、删除
+      else
+      {
+      	  //操作主表
+		  serviceProjectMapper.updateById(serviceProject);
+		  //操作字表,查询之前的子项记录
+		  LambdaQueryWrapper<ServiceProjectItem> itemLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		  itemLambdaQueryWrapper
+			  .eq(ServiceProjectItem::getIsDeleted,0)
+			  .eq(ServiceProjectItem::getPId,serviceProject.getId());
+		  List<ServiceProjectItem> originServiceProjectItems = serviceProjectItemMapper.selectList(itemLambdaQueryWrapper);
+
+		  if(!CollectionUtils.isEmpty(itemList))
+		  {
+			  //查询原来的子项集合 与 传入的子项进行比较, 判断是否删除
+			  if(!CollectionUtils.isEmpty(originServiceProjectItems))
+			  {
+			  	  //先删除操作,开始比较id
+				  List<Long> oringinIds = originServiceProjectItems.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
+				  List<Long> newIds = itemList.stream().map(ServiceProjectItem::getId).collect(Collectors.toList());
+                  //id取交集,交集之外的id可以删除
+				  oringinIds.removeAll(newIds);
+				  //查询删除
+				  LambdaQueryWrapper<ServiceProjectItem> delete=new LambdaQueryWrapper<>();
+				  delete
+					  .eq(ServiceProjectItem::getPId,serviceProject.getId())
+					  .in(!CollectionUtils.isEmpty(oringinIds),ServiceProjectItem::getId,oringinIds);
+				  List<ServiceProjectItem> deleteList = serviceProjectItemMapper.selectList(delete);
+				  if(!CollectionUtils.isEmpty(deleteList))
+				  {
+					  deleteList.forEach(e->{
+					  	  e.setUpdateUser(SecureUtil.getUserId());
+					  	  e.setUpdateTime(new Date());
+						  serviceProjectItemMapper.deleteById(e.getId());
+					  });
+				  }
+
+				  //判断新增或者修改操作
+				  itemList.forEach(ls->{
+				  	//修改
+				  	if(ls.getId()>0)
+				  	{
+						ls.setUpdateUser(SecureUtil.getUserId());
+						ls.setUpdateTime(new Date());
+						serviceProjectItemMapper.updateById(ls);
+					}
+				  	//新增
+				  	else
+					{
+						ls.setCreateTime(new Date());
+						ls.setCreateUser(SecureUtil.getUserId());
+						ls.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+						serviceProjectItemMapper.insert(ls);
+					}
+				  });
+
+
+			  }
+		  }
+		  else
+		  {
+		  	//如果itemList为空,代表删除之前所有子项
+			if(!CollectionUtils.isEmpty(originServiceProjectItems))
+			{
+				originServiceProjectItems.forEach(it->{
+					it.setUpdateUser(SecureUtil.getUserId());
+					it.setUpdateTime(new Date());
+					serviceProjectItemMapper.deleteById(it.getId());
+				});
+			}
+		  }
+	  }
+
+	}
+}

+ 11 - 0
blade-service/blade-project/src/main/resources/application-dev.yml

@@ -0,0 +1,11 @@
+#服务器端口
+server:
+  port: 8111
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.dev.url}
+    username: ${blade.datasource.dev.username}
+    password: ${blade.datasource.dev.password}
+

+ 10 - 0
blade-service/blade-project/src/main/resources/application-prod.yml

@@ -0,0 +1,10 @@
+#服务器端口
+server:
+  port: 8111
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.prod.url}
+    username: ${blade.datasource.prod.username}
+    password: ${blade.datasource.prod.password}

+ 10 - 0
blade-service/blade-project/src/main/resources/application-test.yml

@@ -0,0 +1,10 @@
+#服务器端口
+server:
+  port: 8111
+
+#数据源配置
+spring:
+  datasource:
+    url: ${blade.datasource.test.url}
+    username: ${blade.datasource.test.username}
+    password: ${blade.datasource.test.password}