Bläddra i källkod

refactor:重构人情事件新增、更新、详情接口

刘传伟 1 månad sedan
förälder
incheckning
cc9bc1028a
32 ändrade filer med 645 tillägg och 484 borttagningar
  1. 12 23
      pom.xml
  2. 3 3
      src/main/java/Ognl.java
  3. 18 0
      src/main/java/com/anyway/favor/BusinessException.java
  4. 0 31
      src/main/java/com/anyway/favor/controller/DemoController.java
  5. 29 111
      src/main/java/com/anyway/favor/controller/FavorController.java
  6. 0 1
      src/main/java/com/anyway/favor/controller/PersonController.java
  7. 2 2
      src/main/java/com/anyway/favor/dao/FavorDao.java
  8. 22 3
      src/main/java/com/anyway/favor/dao/FavorItemDao.java
  9. 47 0
      src/main/java/com/anyway/favor/dao/GiftDao.java
  10. 2 2
      src/main/java/com/anyway/favor/dao/PersonDao.java
  11. 2 2
      src/main/java/com/anyway/favor/dao/UserDao.java
  12. 1 1
      src/main/java/com/anyway/favor/model/BaseModel.java
  13. 12 22
      src/main/java/com/anyway/favor/model/Favor.java
  14. 12 31
      src/main/java/com/anyway/favor/model/FavorItem.java
  15. 29 0
      src/main/java/com/anyway/favor/model/Gift.java
  16. 4 20
      src/main/java/com/anyway/favor/model/Person.java
  17. 1 1
      src/main/java/com/anyway/favor/model/User.java
  18. 46 0
      src/main/java/com/anyway/favor/model/dto/FavorDto.java
  19. 33 0
      src/main/java/com/anyway/favor/model/dto/FavorItemDto.java
  20. 6 5
      src/main/java/com/anyway/favor/service/FavorService.java
  21. 2 2
      src/main/java/com/anyway/favor/service/impl/FavorItemServiceImpl.java
  22. 132 36
      src/main/java/com/anyway/favor/service/impl/FavorServiceImpl.java
  23. 2 2
      src/main/java/com/anyway/favor/service/impl/PersonServiceImpl.java
  24. 2 2
      src/main/java/com/anyway/favor/service/impl/UserServiceImpl.java
  25. 12 12
      src/main/java/com/anyway/util/R.java
  26. 15 18
      src/main/resources/applicationContext.xml
  27. 36 23
      src/main/resources/init.sql
  28. 87 95
      src/main/resources/mapper/FavorItemMapper.xml
  29. 14 23
      src/main/resources/mapper/FavorMapper.xml
  30. 52 0
      src/main/resources/mapper/GiftMapper.xml
  31. 1 1
      src/main/resources/mapper/PersonDao.xml
  32. 9 12
      src/main/resources/mapper/UserMapper.xml

+ 12 - 23
pom.xml

@@ -30,33 +30,30 @@
             <artifactId>spring-context</artifactId>
             <version>${springframework.version}</version>
         </dependency>
-
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+            <version>${springframework.version}</version>
+        </dependency>
         <!--SpringMVC依赖-->
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-webmvc</artifactId>
             <version>${springframework.version}</version>
         </dependency>
+        <!-- 请求参数校验 -->
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>4.0.1</version>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>6.0.1.Final</version>
         </dependency>
 
-        <!-- https://mvnrepository.com/artifact/taglibs/standard -->
-        <dependency>
-            <groupId>taglibs</groupId>
-            <artifactId>standard</artifactId>
-            <version>1.1.2</version>
-        </dependency>
-        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
         <dependency>
             <groupId>javax.servlet</groupId>
-            <artifactId>jstl</artifactId>
-            <version>1.2</version>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>4.0.1</version>
         </dependency>
 
-
         <!-- 消息转换器处理Json格式数据 -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
@@ -75,12 +72,6 @@
             <artifactId>spring-jdbc</artifactId>
             <version>${springframework.version}</version>
         </dependency>
-        <!--mybatis-->
-        <dependency>
-            <groupId>org.mybatis</groupId>
-            <artifactId>mybatis</artifactId>
-            <version>3.5.9</version>
-        </dependency>
         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-spring</artifactId>
@@ -96,9 +87,8 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus</artifactId>
-            <version>3.5.3.2</version>
+            <version>3.5.7</version>
         </dependency>
-
         <!--lombok-->
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -117,7 +107,6 @@
             <artifactId>log4j</artifactId>
             <version>1.2.17</version>
         </dependency>
-
         <!-- StringUtils -->
         <dependency>
             <groupId>commons-lang</groupId>

+ 3 - 3
src/main/java/Ognl.java

@@ -73,8 +73,8 @@ public class Ognl {
         }
         if(o instanceof String) {
             String str = (String)o;
-            if(str.length() == 0) {return false;}
-            if(str.trim().length() == 0) {return false;}
+            if(str.isEmpty()) {return false;}
+            if(str.trim().isEmpty()) {return false;}
             return org.apache.commons.lang.StringUtils.isNumeric(str);
         }
         return false;
@@ -92,7 +92,7 @@ public class Ognl {
     }
 
     public static boolean isBlank(String str) {
-        if(str == null || str.length() == 0) {
+        if(str == null || str.isEmpty()) {
             return true;
         }
 

+ 18 - 0
src/main/java/com/anyway/favor/BusinessException.java

@@ -0,0 +1,18 @@
+package com.anyway.favor;
+
+/**
+ * 业务异常
+ */
+public class BusinessException extends RuntimeException{
+
+    private String message;
+
+    public BusinessException(String message) {
+        this.message = message;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+}

+ 0 - 31
src/main/java/com/anyway/favor/controller/DemoController.java

@@ -1,31 +0,0 @@
-package com.anyway.favor.controller;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 演示案例
- * @author liuchuanwei.ex
- * @date 2024/1/23
- */
-@Controller
-@RequestMapping("/demo")
-public class DemoController {
-
-    @RequestMapping("/hello")
-    public String hello() {
-        return "hello";
-    }
-
-    @ResponseBody
-    @RequestMapping("/bye")
-    public Map<String, String> bye() {
-        Map<String, String> map = new HashMap<>();
-        map.put("bye", "再见");
-        return map;
-    }
-}

+ 29 - 111
src/main/java/com/anyway/favor/controller/FavorController.java

@@ -1,23 +1,16 @@
 package com.anyway.favor.controller;
 
+import com.anyway.favor.model.dto.FavorDto;
 import com.anyway.favor.model.Favor;
-import com.anyway.favor.model.FavorItem;
-import com.anyway.favor.model.Person;
 import com.anyway.favor.model.User;
-import com.anyway.favor.service.FavorItemService;
 import com.anyway.favor.service.FavorService;
-import com.anyway.favor.service.PersonService;
 import com.anyway.util.PageQuery;
 import com.anyway.util.R;
 import com.anyway.util.SessionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.ModelAndView;
 
-import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -27,34 +20,40 @@ import java.util.Map;
  * @author liuchuanwei
  * @date 2024-02-24
  */
-@Controller
+@RestController
 @RequestMapping("/favor")
 public class FavorController {
     @Autowired
     private FavorService favorService;
-    @Autowired
-    private FavorItemService favorItemService;
-    @Autowired
-    private PersonService personService;
 
     /**
-     * 跳转列表页面
+     * 添加人情
      *
-     * @param mv
+     * @param favorAddDto
      * @return
      */
-    @RequestMapping("/toList")
-    public ModelAndView toList(ModelAndView mv) {
+    @PostMapping("/add")
+    public R<Boolean> add(@RequestBody @Validated FavorDto favorAddDto) {
         User currentUser = SessionUtils.currentUser();
-        //人员列表
-        Map<String, Object> map = new HashMap<>();
-        map.put("relatedId", SessionUtils.currentUserId());
-        List<Person> personList = personService.findByCondition(map);
-        mv.addObject("personList", personList);
-        mv.setViewName("/favor/list");
-        return mv;
+        favorAddDto.setCreateBy(currentUser.getId());
+        return favorService.add(favorAddDto) ? R.ok() : R.fail("新增失败");
     }
 
+    /**
+     * 更新人情
+     *
+     * @param favorAddDto
+     * @return
+     */
+    @PostMapping("/update")
+    public R<Boolean> update(@RequestBody @Validated FavorDto favorAddDto) {
+        if (favorAddDto.getId() == null) {
+            return R.fail("人情事件ID不能为空");
+        }
+        User currentUser = SessionUtils.currentUser();
+        favorAddDto.setModifyBy(currentUser.getId());
+        return favorService.update(favorAddDto) ? R.ok() : R.fail("保存失败");
+    }
 
     /**
      * 人情事件列表
@@ -64,7 +63,7 @@ public class FavorController {
      */
     @ResponseBody
     @RequestMapping("/listPage")
-    public R listPage(@RequestBody PageQuery<Map<String, Object>> pageQuery) {
+    public R<List<Favor>> listPage(@RequestBody PageQuery<Map<String, Object>> pageQuery) {
         User currentUser = SessionUtils.currentUser();
         Map<String, Object> mapCondition = pageQuery.getTerms();
         //查询和当前登录用户相关的人员
@@ -74,93 +73,13 @@ public class FavorController {
     }
 
     /**
-     * 跳转新增页面
-     *
-     * @param mv
-     * @return
-     */
-    @RequestMapping("/toAdd")
-    public ModelAndView toAdd(ModelAndView mv, @RequestParam(required = false) Long personId, @RequestParam(required = false) String sourcePersonIds) {
-        mv.setViewName("favor/add");
-        //人员列表
-        Map<String, Object> map = new HashMap<>();
-        map.put("relatedId", SessionUtils.currentUserId());
-        List<Person> personList = personService.findByCondition(map);
-        mv.addObject("personList", personList);
-        //送礼人员列表
-        if (!StringUtils.isEmpty(sourcePersonIds)) {
-            map.put("idList", Arrays.asList(sourcePersonIds.split(",")));
-            List<Person> sourcePersonList = personService.findByCondition(map);
-            mv.addObject("sourcePersonList", sourcePersonList);
-        }
-        Person person = personService.findById(personId != null ? personId : 1L);
-        mv.addObject("person", person);
-        return mv;
-    }
-
-    /**
-     * 添加人情
-     *
-     * @param favor
-     * @return
-     */
-    @ResponseBody
-    @RequestMapping("/add")
-    public R add(@RequestBody Favor favor) {
-        User currentUser = SessionUtils.currentUser();
-        favor.setCreateBy(currentUser.getId());
-        favor.setModifyBy(currentUser.getId());
-        return favorService.add(favor) ? R.ok() : R.fail("新增失败");
-    }
-
-    /**
-     * 跳转编辑人情页面
-     *
-     * @return
-     */
-    @RequestMapping("/edit/{id}")
-    public ModelAndView edit(@PathVariable Long id, ModelAndView mv) {
-        mv.setViewName("favor/add");
-        Favor favor = favorService.findById(id);
-        List<FavorItem> favorItemList = favorItemService.findByFavorId(favor.getId());
-        favor.setFavorItemList(favorItemList);
-        mv.addObject("favor", favor);
-        //人员列表
-        List<Person> personList = personService.findAll();
-        mv.addObject("personList", personList);
-        return mv;
-    }
-
-    /**
-     * 更新人情
-     *
-     * @param favor
-     * @return
-     */
-    @ResponseBody
-    @RequestMapping("/update")
-    public R update(@RequestBody Favor favor) {
-        User currentUser = SessionUtils.currentUser();
-        favor.setModifyBy(currentUser.getId());
-        return favorService.update(favor) ? R.ok() : R.fail("保存失败");
-    }
-
-    /**
      * 跳转人情详情页面
      *
      * @return
      */
-    @RequestMapping("/detail/{id}")
-    public ModelAndView detail(@PathVariable Long id, ModelAndView mv) {
-        mv.setViewName("/favor/detail");
-        Favor favor = favorService.findById(id);
-        List<FavorItem> favorItemList = favorItemService.findByFavorId(favor.getId());
-        favor.setFavorItemList(favorItemList);
-        mv.addObject("favor", favor);
-        //人员列表
-        List<Person> personList = personService.findAll();
-        mv.addObject("personList", personList);
-        return mv;
+    @GetMapping("/detail/{id}")
+    public R<FavorDto> detail(@PathVariable Long id) {
+        return R.data(favorService.findDetail(id));
     }
 
     /**
@@ -169,8 +88,7 @@ public class FavorController {
      * @param id
      * @return
      */
-    @RequestMapping("/delete/{id}")
-    @ResponseBody
+    @PostMapping("/delete/{id}")
     public R delete(@PathVariable Long id) {
         boolean b = favorService.deleteById(id);
         return b ? R.ok() : R.fail("删除失败");

+ 0 - 1
src/main/java/com/anyway/favor/controller/PersonController.java

@@ -71,7 +71,6 @@ public class PersonController {
     @RequestMapping("/add")
     public R add(@RequestBody Person person) {
         User currentUser = SessionUtils.currentUser();
-        person.setRelatedId(currentUser.getId());
         person.setCreateBy(currentUser.getId());
         person.setModifyBy(currentUser.getId());
         return personService.add(person) ? R.ok() : R.fail("新增失败");

+ 2 - 2
src/main/java/com/anyway/favor/mapper/FavorMapper.java → src/main/java/com/anyway/favor/dao/FavorDao.java

@@ -1,4 +1,4 @@
-package com.anyway.favor.mapper;
+package com.anyway.favor.dao;
 
 import com.anyway.favor.model.Favor;
 
@@ -11,7 +11,7 @@ import java.util.Map;
  * @author liuchuanwei
  * @date 2024-02-24
  */
-public interface FavorMapper {
+public interface FavorDao {
 
     /**
      * 根据条件查询列表

+ 22 - 3
src/main/java/com/anyway/favor/mapper/FavorItemMapper.java → src/main/java/com/anyway/favor/dao/FavorItemDao.java

@@ -1,7 +1,10 @@
-package com.anyway.favor.mapper;
+package com.anyway.favor.dao;
 
 import com.anyway.favor.model.FavorItem;
+import com.anyway.favor.model.dto.FavorItemDto;
+import org.apache.ibatis.annotations.Param;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -11,7 +14,7 @@ import java.util.Map;
  * @author liuchuanwei
  * @date 2024-02-24
  */
-public interface FavorItemMapper {
+public interface FavorItemDao {
     /**
      * 查询全部
      *
@@ -28,6 +31,14 @@ public interface FavorItemMapper {
     List<FavorItem> findByCondition(Map<String, Object> map);
 
     /**
+     * 根据人情事件查询列表
+     *
+     * @param favorId
+     * @return
+     */
+    List<FavorItemDto> findByFavorId(Long favorId);
+
+    /**
      * 根据主键ID查询
      *
      * @param id
@@ -41,7 +52,7 @@ public interface FavorItemMapper {
      * @param favorItemList
      * @return
      */
-    int batchAdd(List<FavorItem> favorItemList);
+    int batchAdd(@Param("favorItemList") List<FavorItem> favorItemList);
 
     /**
      * 更新
@@ -59,6 +70,14 @@ public interface FavorItemMapper {
      */
     int deleteById(Long id);
 
+
+    /**
+     * 根据ID集合删除
+     *
+     * @param ids
+     * @return
+     */
+    int deleteByIds(@Param("ids") Collection<Long> ids);
     /**
      * 根据人情ID删除
      *

+ 47 - 0
src/main/java/com/anyway/favor/dao/GiftDao.java

@@ -0,0 +1,47 @@
+package com.anyway.favor.dao;
+
+import com.anyway.favor.model.FavorItem;
+import com.anyway.favor.model.Gift;
+
+import java.util.Collection;
+
+/**
+ * 礼物数据层
+ *
+ * @author liuchuanwei
+ * @date 2024-02-24
+ */
+public interface GiftDao {
+
+    /**
+     * 根据主键ID查询
+     *
+     * @param id
+     * @return
+     */
+    FavorItem findById(Long id);
+
+    /**
+     * 插入
+     *
+     * @param gift
+     * @return
+     */
+    int add(Gift gift);
+
+    /**
+     * 更新
+     *
+     * @param gift
+     * @return
+     */
+    int update(Gift gift);
+
+    /**
+     * 根据ID集合删除
+     *
+     * @param ids
+     * @return
+     */
+    int deleteByIds(Collection<Long> ids);
+}

+ 2 - 2
src/main/java/com/anyway/favor/mapper/PersonMapper.java → src/main/java/com/anyway/favor/dao/PersonDao.java

@@ -1,4 +1,4 @@
-package com.anyway.favor.mapper;
+package com.anyway.favor.dao;
 
 import com.anyway.favor.model.Person;
 
@@ -11,7 +11,7 @@ import java.util.Map;
  * @author anyway
  * @date 2024-02-20
  */
-public interface PersonMapper {
+public interface PersonDao {
     /**
      * 查询全部
      *

+ 2 - 2
src/main/java/com/anyway/favor/mapper/UserMapper.java → src/main/java/com/anyway/favor/dao/UserDao.java

@@ -1,4 +1,4 @@
-package com.anyway.favor.mapper;
+package com.anyway.favor.dao;
 
 import com.anyway.favor.model.User;
 
@@ -11,7 +11,7 @@ import java.util.Map;
  * @author liuchuanwei
  * @date 2024-02-24
  */
-public interface UserMapper {
+public interface UserDao {
     /**
      * 查询全部
      *

+ 1 - 1
src/main/java/com/anyway/favor/model/BaseModel.java

@@ -9,7 +9,7 @@ import java.util.Date;
  * 基础实体类
  *
  * @author anyway
- * @date 2023-02-20
+ * @date 2024-02-20
  */
 @Setter
 @Getter

+ 12 - 22
src/main/java/com/anyway/favor/model/Favor.java

@@ -1,14 +1,15 @@
 package com.anyway.favor.model;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Getter;
 import lombok.Setter;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /**
  * 人情实体类
@@ -21,36 +22,25 @@ import java.util.List;
 public class Favor extends BaseModel implements java.io.Serializable {
     /** 版本号 */
     private static final long serialVersionUID = 666680999611094083L;
-
     /** id */
     private Long id;
-
-    /** 发生日期 */
+    /** 举办日期 */
+    @NotNull
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-    private Date occurDate;
-
+    private Date holdDate;
     /** 标题 */
+    @NotBlank
     private String title;
-
-    /** 主题人 */
-    private Long personId;
-    @TableField(exist = false)
-    private String personName;
-
+    /** 举办人 */
+    @NotNull
+    private Long holdPersonId;
     /** 收入金额 */
+    @Min(0)
     private BigDecimal incomeAmount;
-
     /** 支出金额 */
+    @Min(0)
     private BigDecimal payAmount;
-
     /** 备注 */
     private String remark;
-
-    /** 人情明细 */
-    private List<FavorItem> favorItemList;
-    /** 地址 */
-    @TableField(exist = false)
-    private String address;
-
 }

+ 12 - 31
src/main/java/com/anyway/favor/model/FavorItem.java

@@ -3,8 +3,7 @@ package com.anyway.favor.model;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.math.BigDecimal;
-import java.util.Date;
+import javax.validation.constraints.NotNull;
 
 /**
  * 人情明细表(t_favor_item)
@@ -17,39 +16,21 @@ import java.util.Date;
 public class FavorItem extends BaseModel implements java.io.Serializable {
     /** 版本号 */
     private static final long serialVersionUID = 6101318181722924652L;
-
     /** id */
     private Long id;
-
     /** 事件ID */
     private Long favorId;
-
-    /** 对象ID */
-    private Long personId;
-    /** 对象 */
-    private Person person;
-
-    /** 来源对象ID */
-    private Long sourcePersonId;
-    /** 来源对象 */
-    private Person sourcePerson;
-
-    /** 类型,S收入Z支出 */
-    private Integer type;
-
-    /** 金额 */
-    private BigDecimal amount;
-
-    /** 回赠 */
-    private String returnGift;
-
+    /** 收礼人ID */
+    @NotNull
+    private Long receivePersonId;
+    /** 回赠礼物ID */
+    private Long returnGiftId;
+    /** 送礼人ID */
+    @NotNull
+    private Long givePersonId;
+    /** 赠送礼物ID */
+    @NotNull
+    private Long giveGiftId;
     /** 备注 */
     private String remark;
-
-    /** 发生日期 */
-    private Date occurDate;
-
-    /** 人情 */
-    private Favor favor;
-
 }

+ 29 - 0
src/main/java/com/anyway/favor/model/Gift.java

@@ -0,0 +1,29 @@
+package com.anyway.favor.model;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 礼物实体类
+ * 
+ * @author anyway
+ * @date 2024-06-29
+ */
+@Setter
+@Getter
+public class Gift extends BaseModel implements java.io.Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 礼物ID
+     */
+    private Long id;
+    /** 礼物名称 */
+    private String title;
+    /** 类型,M钱,T物,O其他 */
+    private String type;
+    /** 价值 */
+    private BigDecimal amount;
+
+}

+ 4 - 20
src/main/java/com/anyway/favor/model/Person.java

@@ -18,55 +18,39 @@ import java.util.Date;
 public class Person extends BaseModel implements java.io.Serializable {
     /** 版本号 */
     private static final long serialVersionUID = -476789774769490644L;
-
     /** id */
     private Long id;
-
     /** 姓名 */
     private String name;
-
     /** 身份证号 */
     private String cardId;
-
     /** 称呼 */
     private String callName;
-
-    /** 性别,M男F女 */
-    private String gender;
-
+    /** 性别,1男2女 */
+    private Integer gender;
     /** 生日 */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date birthday;
-
     /** 去世日期 */
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date deathDate;
-
     /** 婚姻状况,0未婚1已婚 */
     private Integer maritalStatus;
-
     /** 配偶ID */
     private Long mateId;
-    private String mateName;
-
     /** 母亲ID */
     private Long motherId;
-    private String motherName;
-
     /** 父亲ID */
     private Long fatherId;
-    private String fatherName;
-
     /** 家中排行 */
     private Integer sort;
-
-    /** 关联人 */
-    private Long relatedId;
     /** 详细地址 */
     private String address;
     /** 备注 */
     private String remark;
+    /** 标签 json 字符串 */
+    private String tags;
 
 }

+ 1 - 1
src/main/java/com/anyway/favor/model/User.java

@@ -19,7 +19,7 @@ public class User extends BaseModel implements java.io.Serializable {
     private Long id;
 
     /** 账号 */
-    private String account;
+    private String userName;
 
     /** 密码 */
     private String password;

+ 46 - 0
src/main/java/com/anyway/favor/model/dto/FavorDto.java

@@ -0,0 +1,46 @@
+package com.anyway.favor.model.dto;
+
+import com.anyway.favor.model.Favor;
+import com.anyway.favor.model.FavorItem;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 人情新增对象
+ *
+ * @author liuchuanwei
+ * @date 2024-06-29
+ */
+@NoArgsConstructor
+@Data
+public class FavorDto extends Favor {
+
+    public FavorDto(Favor favor) {
+        BeanUtils.copyProperties(favor, this);
+    }
+
+    /** 人情明细 */
+    List<FavorItemDto> favorItemList;
+
+    public void initFavorItemList(List<FavorItem> favorItemList) {
+        if (this.favorItemList == null) {
+            this.favorItemList = new ArrayList<>();
+        }
+        for (FavorItem favorItem : favorItemList) {
+            this.favorItemList.add(new FavorItemDto(favorItem));
+        }
+    }
+
+    /**
+     * 转换为Favor对象
+     * @return
+     */
+    public Favor toFavor() {
+        return this;
+    }
+
+}

+ 33 - 0
src/main/java/com/anyway/favor/model/dto/FavorItemDto.java

@@ -0,0 +1,33 @@
+package com.anyway.favor.model.dto;
+
+import com.anyway.favor.model.FavorItem;
+import com.anyway.favor.model.Gift;
+import com.anyway.favor.model.Person;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+/**
+ * 人情新增对象
+ *
+ * @author liuchuanwei
+ * @date 2024-06-29
+ */
+@NoArgsConstructor
+@Data
+public class FavorItemDto extends FavorItem{
+    /** 回赠礼物 */
+    private Gift returnGift;
+    /** 赠送礼物 */
+    private Gift giveGift;
+
+    public FavorItemDto(FavorItem favorItem) {
+        BeanUtils.copyProperties(favorItem, this);
+    }
+    /** 转换为FavorItem对象 */
+    public FavorItem toFavorItem() {
+        return this;
+    }
+}
+
+

+ 6 - 5
src/main/java/com/anyway/favor/service/FavorService.java

@@ -1,5 +1,6 @@
 package com.anyway.favor.service;
 
+import com.anyway.favor.model.dto.FavorDto;
 import com.anyway.favor.model.Favor;
 import com.anyway.util.PageQuery;
 
@@ -33,18 +34,18 @@ public interface FavorService {
     /**
      * 添加
      *
-     * @param favor
+     * @param favorAddDto
      * @return
      */
-    boolean add(Favor favor);
+    boolean add(FavorDto favorAddDto);
 
     /**
      * 更新
      *
-     * @param favor
+     * @param favorUpdateDto
      * @return
      */
-    boolean update(Favor favor);
+    boolean update(FavorDto favorUpdateDto);
 
     /**
      * 根据ID查询
@@ -52,7 +53,7 @@ public interface FavorService {
      * @param id
      * @return
      */
-    Favor findById(Long id);
+    FavorDto findDetail(Long id) ;
 
     /**
      * 根据ID移除

+ 2 - 2
src/main/java/com/anyway/favor/service/impl/FavorItemServiceImpl.java

@@ -1,6 +1,6 @@
 package com.anyway.favor.service.impl;
 
-import com.anyway.favor.mapper.FavorItemMapper;
+import com.anyway.favor.dao.FavorItemDao;
 import com.anyway.favor.model.FavorItem;
 import com.anyway.favor.service.FavorItemService;
 import com.anyway.util.PageQuery;
@@ -20,7 +20,7 @@ import java.util.Map;
 @Service
 public class FavorItemServiceImpl implements FavorItemService {
     @Autowired
-    private FavorItemMapper favorItemMapper;
+    private FavorItemDao favorItemMapper;
 
     @Override
     public List<FavorItem> findByCondition(Map<String, Object> map) {

+ 132 - 36
src/main/java/com/anyway/favor/service/impl/FavorServiceImpl.java

@@ -1,88 +1,184 @@
 package com.anyway.favor.service.impl;
 
-import com.anyway.favor.mapper.FavorItemMapper;
-import com.anyway.favor.mapper.FavorMapper;
+import com.anyway.favor.model.dto.FavorDto;
+import com.anyway.favor.model.dto.FavorItemDto;
+import com.anyway.favor.dao.FavorDao;
+import com.anyway.favor.dao.FavorItemDao;
+import com.anyway.favor.dao.GiftDao;
 import com.anyway.favor.model.Favor;
 import com.anyway.favor.model.FavorItem;
+import com.anyway.favor.model.Gift;
 import com.anyway.favor.service.FavorService;
 import com.anyway.util.PageQuery;
 import com.anyway.util.PageUtils;
+import lombok.extern.slf4j.Slf4j;
 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.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
-import java.util.List;
-import java.util.Map;
 /**
  * 人情业务实现类
  *
  * @author liuchuanwei
  * @date 2024-02-24
  */
+@Slf4j
 @Service
 public class FavorServiceImpl implements FavorService {
     @Autowired
-    private FavorMapper favorMapper;
+    private FavorDao favorDao;
+    @Autowired
+    private FavorItemDao favorItemDao;
     @Autowired
-    private FavorItemMapper favorItemMapper;
+    private GiftDao giftDao;
 
     @Override
     public List<Favor> findByCondition(Map<String, Object> map) {
-        return favorMapper.findByCondition(map);
+        return favorDao.findByCondition(map);
     }
 
     @Override
     public List<Favor> findPage(PageQuery<Map<String, Object>> pageQuery) {
         PageUtils.startPage(pageQuery);
-        List<Favor> favorList = favorMapper.findByCondition(pageQuery.getTerms());
+        List<Favor> favorList = favorDao.findByCondition(pageQuery.getTerms());
         PageUtils.setPageTotal(favorList, pageQuery);
         return favorList;
     }
 
+    @Transactional
     @Override
-    public boolean add(Favor favor) {
-        int r = favorMapper.add(favor);
-        if (r > 0) {
-            List<FavorItem> favorItemList = favor.getFavorItemList();
-            for (FavorItem favorItem : favorItemList) {
-                favorItem.setFavorId(favor.getId());
-                favorItem.setOccurDate(favor.getOccurDate());
-                favorItem.setCreateBy(favor.getCreateBy());
-                favorItem.setModifyBy(favor.getModifyBy());
+    public boolean add(FavorDto favorAddDto) {
+        Favor favor = favorAddDto.toFavor();
+        int r = favorDao.add(favor);
+        if (r <= 0) {
+            log.error("新增人情事件失败:{}", favorAddDto);
+            return false;
+        }
+        List<FavorItem> favorItemList = new ArrayList<>();
+        for (FavorItemDto favorItemAddDto : favorAddDto.getFavorItemList()) {
+            FavorItem favorItem = favorItemAddDto.toFavorItem();
+            favorItem.setFavorId(favor.getId());
+            favorItem.setCreateBy(favor.getCreateBy());
+            if (favorItemAddDto.getGiveGift() != null) {
+                Gift giveGift = favorItemAddDto.getGiveGift();
+                giftDao.add(giveGift);
+                favorItem.setGiveGiftId(giveGift.getId());
             }
-            favorItemMapper.batchAdd(favorItemList);
+            if (favorItemAddDto.getReturnGift() != null) {
+                Gift returnGift = favorItemAddDto.getReturnGift();
+                giftDao.add(returnGift);
+                favorItem.setReturnGiftId(returnGift.getId());
+            }
+            favorItemList.add(favorItem);
         }
-        return r > 0;
+        favorItemDao.batchAdd(favorItemList);
+        return true;
     }
 
+    @Transactional
     @Override
-    public boolean update(Favor favor) {
-        int r = favorMapper.update(favor);
-        if (r > 0) {
-            int i = favorItemMapper.deleteByFavorId(favor.getId());
-            if (i > 0) {
-                List<FavorItem> favorItemList = favor.getFavorItemList();
-                for (FavorItem favorItem : favorItemList) {
-                    favorItem.setFavorId(favor.getId());
-                    favorItem.setOccurDate(favor.getOccurDate());
-                    favorItem.setCreateBy(favor.getCreateBy());
-                    favorItem.setModifyBy(favor.getModifyBy());
+    public boolean update(FavorDto favorAddDto) {
+        Favor favor = favorAddDto.toFavor();
+        int r = favorDao.update(favor);
+        if (r <= 0) {
+            log.error("更新人情事件失败:{}", favorAddDto);
+            return false;
+        }
+
+        //查询人情事件的所有明细,筛选出删除的
+        List<FavorItemDto> allFavorItemList = favorItemDao.findByFavorId(favor.getId());
+        Map<Long, FavorItem> favorItemMap = allFavorItemList.stream().collect(Collectors.toMap(FavorItem::getId, Function.identity(), (v1, v2) -> v1));
+        //需要新增的人情明细
+        List<FavorItem> newFavorItemList = new ArrayList<>();
+        List<FavorItemDto> favorItemDtoList = favorAddDto.getFavorItemList();
+        for (FavorItemDto favorItemAddDto : favorItemDtoList) {
+            FavorItem favorItem = favorItemAddDto.toFavorItem();
+            if (favorItemAddDto.getGiveGift() != null) {
+                Gift giveGift = favorItemAddDto.getGiveGift();
+                this.saveGift(giveGift);
+                favorItem.setGiveGiftId(giveGift.getId());
+            }
+            if (favorItemAddDto.getReturnGift() != null) {
+                Gift returnGift = favorItemAddDto.getReturnGift();
+                this.saveGift(returnGift);
+                favorItem.setReturnGiftId(returnGift.getId());
+            }
+            //更新
+            if(favorItem.getId() != null) {
+                favorItemMap.remove(favorItem.getId());
+                favorItem.setModifyBy(favor.getModifyBy());
+                favorItemDao.update(favorItem);
+            } else { // 新增
+                favorItem.setFavorId(favor.getId());
+                favorItem.setCreateBy(favor.getModifyBy());
+                newFavorItemList.add(favorItem);
+            }
+        }
+        //新增人情明细
+        if (!CollectionUtils.isEmpty(newFavorItemList)) {
+            favorItemDao.batchAdd(newFavorItemList);
+        }
+        //删除人情明细以及礼物
+        if (!CollectionUtils.isEmpty(favorItemMap)) {
+            Set<Long> deleteFavorItemIdSet = favorItemMap.keySet();
+            Set<Long> deleteGiftIdSet = new HashSet<>();
+            for (Long deleteKey : deleteFavorItemIdSet) {
+                FavorItem favorItem = favorItemMap.get(deleteKey);
+                deleteGiftIdSet.add(favorItem.getGiveGiftId());
+                if (favorItem.getReturnGiftId() != null) {
+                    deleteGiftIdSet.add(favorItem.getReturnGiftId());
                 }
-                favorItemMapper.batchAdd(favorItemList);
             }
+            //删除
+            favorItemDao.deleteByIds(deleteFavorItemIdSet);
+            giftDao.deleteByIds(deleteGiftIdSet);
+        }
+        return true;
+    }
+
+    /**
+     * 保存礼物(新增或更新)
+     * @param gift
+     * @return
+     */
+    private int saveGift(Gift gift) {
+        if (gift.getId() != null) {
+            return giftDao.update(gift);
+        } else {
+            return giftDao.add(gift);
         }
-        return r > 0;
     }
 
     @Override
-    public Favor findById(Long id) {
-        return favorMapper.findById(id);
+    public FavorDto findDetail(Long id) {
+        Favor favor = favorDao.findById(id);
+        List<FavorItemDto> favorItemList = favorItemDao.findByFavorId(favor.getId());
+
+        FavorDto favorDto = new FavorDto(favor);
+        favorDto.setFavorItemList(favorItemList);
+
+        return favorDto;
     }
 
     @Override
     public boolean deleteById(Long id) {
-        int i = favorMapper.deleteById(id);
+        int i = favorDao.deleteById(id);
         if (i>0) {
-            favorItemMapper.deleteByFavorId(id);
+            List<FavorItemDto> favorItemList = favorItemDao.findByFavorId(id);
+            Set<Long> giftIdSet = new HashSet<>();
+            for (FavorItem favorItem : favorItemList) {
+                giftIdSet.add(favorItem.getGiveGiftId());
+                if (favorItem.getReturnGiftId() != null) {
+                    giftIdSet.add(favorItem.getReturnGiftId());
+                }
+            }
+            giftDao.deleteByIds(giftIdSet);
+            favorItemDao.deleteByFavorId(id);
         }
         return i>0;
     }

+ 2 - 2
src/main/java/com/anyway/favor/service/impl/PersonServiceImpl.java

@@ -1,6 +1,6 @@
 package com.anyway.favor.service.impl;
 
-import com.anyway.favor.mapper.PersonMapper;
+import com.anyway.favor.dao.PersonDao;
 import com.anyway.favor.model.Person;
 import com.anyway.favor.service.PersonService;
 import com.anyway.util.PageQuery;
@@ -24,7 +24,7 @@ import java.util.Map;
 public class PersonServiceImpl implements PersonService {
 
     @Autowired
-    private PersonMapper personMapper;
+    private PersonDao personMapper;
 
     @Override
     public List<Person> findAll() {

+ 2 - 2
src/main/java/com/anyway/favor/service/impl/UserServiceImpl.java

@@ -1,6 +1,6 @@
 package com.anyway.favor.service.impl;
 
-import com.anyway.favor.mapper.UserMapper;
+import com.anyway.favor.dao.UserDao;
 import com.anyway.favor.model.User;
 import com.anyway.favor.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,7 +18,7 @@ import java.util.Map;
 @Service
 public class UserServiceImpl implements UserService {
     @Autowired
-    private UserMapper userMapper;
+    private UserDao userMapper;
 
     @Override
     public List<User> findAll() {

+ 12 - 12
src/main/java/com/anyway/util/R.java

@@ -11,7 +11,7 @@ import lombok.Setter;
  */
 @Setter
 @Getter
-public class R {
+public class R<T> {
     /**
      * 消息码
      */
@@ -23,7 +23,7 @@ public class R {
     /**
      * 数据
      */
-    private Object data;
+    private T data;
 
     /**
      * 分页
@@ -39,8 +39,8 @@ public class R {
      *
      * @return
      */
-    public static R ok() {
-        R r = new R();
+    public static <T> R<T> ok() {
+        R<T> r = new R<T>();
         r.setCode(0);
         r.setMsg("成功");
         return r;
@@ -51,8 +51,8 @@ public class R {
      * @param msg
      * @return
      */
-    public static R fail(String msg) {
-        R r = new R();
+    public static <T> R<T>fail(String msg) {
+        R<T> r = new R<T>();
         r.setCode(1);
         r.setMsg(msg);
         return r;
@@ -65,8 +65,8 @@ public class R {
      * @param msg
      * @return
      */
-    public static R fail(int code, String msg) {
-        R r = new R();
+    public static <T> R<T> fail(int code, String msg) {
+        R<T> r = new R<T>();
         r.setCode(code);
         r.setMsg(msg);
         return r;
@@ -77,8 +77,8 @@ public class R {
      * @param data
      * @return
      */
-    public static R data(Object data) {
-        R r = new R();
+    public static <T> R<T> data(T data) {
+        R<T> r = new R<T>();
         r.setCode(0);
         r.setMsg("成功");
         r.setData(data);
@@ -92,8 +92,8 @@ public class R {
      * @param page
      * @return
      */
-    public static R page(Object data, Page page) {
-        R r = new R();
+    public static <T> R<T> page(T data, Page page) {
+        R<T> r = new R<T>();
         r.setCode(0);
         r.setMsg("成功");
         r.setData(data);

+ 15 - 18
src/main/resources/applicationContext.xml

@@ -1,20 +1,30 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
+       xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
 				http://www.springframework.org/schema/beans/spring-beans.xsd
 				http://www.springframework.org/schema/context
-				http://www.springframework.org/schema/context/spring-context.xsd">
+				http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
     <context:component-scan base-package="com.anyway" />
     <!--数据源-->
     <bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
         <property name="driver" value="com.mysql.jdbc.Driver" />
-        <property name="url" value="jdbc:mysql://81.70.105.158:3306/favorbill" />
+        <property name="url" value="jdbc:mysql://81.70.105.158:3306/favorbill2" />
         <property name="username" value="root" />
         <property name="password" value="dx3906" />
     </bean>
-    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
+
+    <!-- 配置事务管理器 -->
+    <bean id="transactionManager"
+          class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
+          p:dataSource-ref="dataSource" />
+    <!-- 指明使用注解的方式来管理事务 -->
+    <tx:annotation-driven transaction-manager="transactionManager" />
+
+
+    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
         <property name="configLocation" value="classpath:mybatis-config.xml" />
         <property name="dataSource" ref="dataSource" />
         <property name="mapperLocations" >
@@ -23,23 +33,10 @@
             </array>
         </property>
         <property name="typeAliasesPackage" value="com.anyway.favor.model" />
-        <!-- 配置PageHelper分页插件 -->
-        <property name="plugins">
-            <array>
-                <bean class="com.github.pagehelper.PageInterceptor">
-                    <property name="properties">
-                        <props>
-                            <prop key="helperDialect">mysql</prop>
-                            <prop key="reasonable">true</prop>
-                        </props>
-                    </property>
-                </bean>
-            </array>
-        </property>
     </bean>
     <!-- 自动扫描所有的mapper -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
-        <property name="basePackage" value="com.anyway.favor.**.mapper" />
+        <property name="basePackage" value="com.anyway.favor.**.dao" />
     </bean>
 
 </beans>

+ 36 - 23
src/main/resources/init.sql

@@ -1,15 +1,15 @@
 -- 创建数据库favor
-create database favorBill default character set utf8mb4 collate utf8mb4_general_ci;
-use favorBill;
+create database favorBill2 default character set utf8mb4 collate utf8mb4_general_ci;
+use favorBill2;
 
 drop table if exists t_user;
 create table t_user(
     id int(11) primary key auto_increment,
-    account varchar(50) not null comment '账号',
+    userName varchar(50) not null comment '账号',
     password varchar(100) not null comment '密码',
-    create_time timestamp default current_timestamp comment '创建时间',
+    create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
     create_by int(11) comment '创建者',
-    modify_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
+    modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
     modify_by int(11) comment '修改者'
 ) comment '用户表';
 
@@ -17,9 +17,10 @@ drop table if exists t_person;
 create table t_person(
     id int(11) primary key auto_increment,
     name varchar(20) comment '姓名',
+    phone varchar(20) comment '手机号',
     card_id varchar(20) comment '身份证号',
     call_name varchar(50) comment '称呼',
-    gender char(1) comment '性别,M男F女',
+    gender tinyint(1) comment '性别,1男2女',
     birthday date comment '生日',
     death_date date comment '去世日期',
     marital_status tinyint default 0 comment '婚姻状况,0未婚1已婚',
@@ -27,46 +28,58 @@ create table t_person(
     mother_id int(11) comment '母亲ID',
     father_id int(11) comment '父亲ID',
     sort tinyint comment '家中排行',
-    related_id int(11) comment '关联人',
+    tags varchar(255) comment '标签,json格式',
     address varchar(100) comment '详细地址',
     remark varchar(255) comment '备注',
-    create_time timestamp default current_timestamp comment '创建时间',
+    create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
     create_by int(11) comment '创建者',
-    modify_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
+    modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
     modify_by int(11) comment '修改者'
 ) comment '人员表';
 drop table if exists t_favor;
 create table t_favor(
     id int(11) primary key auto_increment,
-    occur_date date comment '发生日期',
+    hold_date date comment '发生日期',
     title varchar(50) comment '标题',
-    person_id int(11) comment '主题人',
+    hold_person_id int(11) comment '举办人ID',
     income_amount decimal(10,2) comment '收入金额',
     pay_amount decimal(10,2) comment '支出金额',
     remark varchar(255) comment '备注',
-    create_time timestamp default current_timestamp comment '创建时间',
+    create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
     create_by int(11) comment '创建者',
-    modify_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
+    modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
     modify_by int(11) comment '修改者'
 ) comment '事件表';
 drop table if exists t_favor_item;
 create table t_favor_item(
     id int(11) primary key auto_increment,
     favor_id int(11) comment '事件ID',
-    person_id int(11) comment '对象ID',
-    source_person_id int(11) comment '来源对象ID',
-    type char(1) comment '类型,S收入Z支出',
-    amount decimal(10,2) comment '金额',
-    return_gift varchar(255) comment '回赠',
+    receive_person_id int(11) comment '收礼人ID',
+    return_gift_id int(11) comment '回赠礼物ID',
+    give_person_id int(11) comment '送礼人ID',
+    give_gift_id int(11) comment '赠送礼物ID',
     remark varchar(255) comment '备注',
-    occur_date date comment '发生日期',
-    create_time timestamp default current_timestamp comment '创建时间',
+    create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
     create_by int(11) comment '创建者',
-    modify_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
+    modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
     modify_by int(11) comment '修改者'
 ) comment '人情明细表';
+
+drop table if exists t_gift;
+create table t_gift(
+    id int(11) primary key auto_increment,
+    title varchar(255) comment '礼物名称',
+    type char(1) comment '类型,M钱,T物,O其他',
+    amount decimal(10,2) comment '价值',
+    remark varchar(255) comment '备注',
+    create_time datetime default CURRENT_TIMESTAMP comment '创建时间',
+    create_by int(11) comment '创建者',
+    modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间',
+    modify_by int(11) comment '修改者'
+) comment '礼物表';
+
+
 -- 插入一条原始数据
-insert into t_user(account, password, create_by) values ('liuchuanwei', '123456', 'system');
+insert into t_user(user_name, password) values ('liuchuanwei', '123456');
 INSERT INTO t_person (name, card_id, call_name, gender, marital_status, birthday, sort, address)
 values ('刘传伟', '371321199301303114', '自己', 'M', 1, '1992-12-29', 1, '刘家河疃');
-

+ 87 - 95
src/main/resources/mapper/FavorItemMapper.xml

@@ -2,81 +2,84 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <!-- 人情明细表(t_favor_item) -->
-<mapper namespace="com.anyway.favor.mapper.FavorItemMapper">
+<mapper namespace="com.anyway.favor.dao.FavorItemDao">
     <!-- 字段映射 -->
-    <resultMap id="favorItemMap" type="com.anyway.favor.model.FavorItem"></resultMap>
+    <resultMap id="favorItemMap" type="com.anyway.favor.model.FavorItem" />
+    <resultMap id="favorItemDtoMap" type="com.anyway.favor.model.dto.FavorItemDto">
+        <id property="id" column="id" />
+        <result property="favorId" column="favor_id" />
+        <result property="receivePersonId" column="receive_person_id" />
+        <result property="returnGiftId" column="return_gift_id" />
+        <result property="giveGiftId" column="give_gift_id" />
+        <result property="givePersonId" column="give_person_id" />
+        <result property="remark" column="remark" />
+        <result property="createBy" column="create_by" />
+        <result property="createTime" column="create_time" />
+        <result property="modifyTime" column="modify_time" />
+        <result property="modifyBy" column="modify_by" />
+        <association property="returnGift" column="return_gift_id">
+            <result property="id" column="return_gift_id"/>
+            <result property="title" column="return_gift_title"/>
+            <result property="type" column="return_gift_type"/>
+            <result property="amount" column="return_gift_amount"/>
+        </association>
+        <association property="giveGift" column="give_gift_id">
+            <result property="id" column="give_gift_id"/>
+            <result property="title" column="give_gift_title"/>
+            <result property="type" column="give_gift_type"/>
+            <result property="amount" column="give_gift_amount"/>
+        </association>
+    </resultMap>
 
-    <!-- This code was generated by TableGo tools, mark 1 begin. -->
     <!-- 表查询字段 -->
     <sql id="allColumns">
-        fi.id, fi.favor_id, fi.person_id, fi.source_person_id, fi.type, fi.amount, fi.return_gift, fi.remark, 
-        fi.occur_date, fi.create_time, fi.create_by, fi.modify_time, fi.modify_by
+        fi.id, fi.favor_id, fi.receive_person_id, fi.return_gift_id, fi.give_person_id, fi.give_gift_id, fi.remark,
+        fi.create_time, fi.create_by, fi.modify_time, fi.modify_by
     </sql>
-    <!-- This code was generated by TableGo tools, mark 1 end. -->
 
     <!-- 查询所有人情明细表 -->
     <select id="findAll" resultMap="favorItemMap">
-        SELECT
-            <include refid="allColumns" />
+        SELECT <include refid="allColumns" />
+        FROM t_favor_item fi
+        WHERE fi.create_by=#{createBy}
+    </select>
+    <!-- 查询所有人情明细表 -->
+    <select id="findByFavorId" resultMap="favorItemDtoMap">
+        SELECT <include refid="allColumns" />,
+            gr.title as return_gift_title, gr.type as return_gift_type, gr.amount as return_gift_amount,
+            gg.title as give_gift_title, gg.type as give_gift_type, gg.amount as give_gift_amount
         FROM t_favor_item fi
+        join t_gift gr on gr.id=fi.return_gift_id
+        join t_gift gg on gg.id=fi.give_gift_id
+        WHERE fi.favor_id=#{favorId}
     </select>
 
     <!-- 根据条件参数查询人情明细表列表 -->
     <select id="findByCondition" resultMap="favorItemMap" parameterType="map">
-        SELECT
-            <include refid="allColumns" />,
-            f.title as "favor.title",
-            f.occur_date as "favor.occurDate",
-            p.name as "person.name",
-            p.call_name as "person.callName",
-            p.address as "person.address",
-            ps.name as "sourcePerson.name",
-            ps.call_name as "sourcePerson.callName",
-            ps.address as "sourcePerson.address"
+        SELECT <include refid="allColumns" />
         FROM t_favor_item fi
-        JOIN t_favor f ON f.id=fi.favor_id
-        LEFT JOIN t_person p ON p.id=fi.person_id
-        LEFT JOIN t_person ps ON ps.id=fi.source_person_id
-        WHERE 1 = 1
-        <if test="favorId != null">
-            AND fi.favor_id = #{favorId}
-        </if>
-        <if test="personId != null">
-            AND fi.person_id = #{personId}
-        </if>
-        <if test="sourcePersonId != null">
-            AND fi.source_person_id = #{sourcePersonId}
-        </if>
-        <if test="type != null">
-            AND fi.type = #{type}
-        </if>
-        <if test="amount != null">
-            AND fi.amount = #{amount}
-        </if>
-        <if test="returnGift != null and returnGift != ''">
-            AND fi.return_gift LIKE CONCAT('%', #{returnGift}, '%')
-        </if>
-        <if test="remark != null and remark != ''">
-            AND fi.remark LIKE CONCAT('%', #{remark}, '%')
-        </if>
-        <if test="occurDate != null">
-            AND fi.occur_date = #{occurDate}
-        </if>
-        <if test="createTime != null">
-            AND fi.create_time = #{createTime}
-        </if>
-        <if test="createBy != null">
-            AND fi.create_by = #{createBy}
-        </if>
-        <if test="modifyTime != null">
-            AND fi.modify_time = #{modifyTime}
-        </if>
-        <if test="modifyBy != null">
-            AND fi.modify_by = #{modifyBy}
-        </if>
-        <if test="sortName != null">
-            ORDER BY fi.${sortName} ${sortOrder}
-        </if>
+        join t_favor f on f.id=fi.favor_id
+        join t_person pr on pr.id=fi.receive_person_id
+        join t_gift gr on gr.id=fi.return_gift_id
+        join t_person pg on pg.id=fi.give_person_id
+        join t_gift gg on gg.id=fi.give_gift_id
+        <where>
+            <if test="favorId != null">
+                AND fi.favor_id = #{favorId}
+            </if>
+            <if test="receivePersonId != null">
+                AND fi.receive_person_id = #{receivePersonId}
+            </if>
+            <if test="givePersonId != null">
+                AND fi.give_person_id = #{givePersonId}
+            </if>
+            <if test="holdDate != null">
+                AND f.holdDate = #{holdDate}
+            </if>
+            <if test="sortName != null">
+                ORDER BY fi.${sortName} ${sortOrder}
+            </if>
+        </where>
     </select>
 
     <!-- 根据主键查询人情明细表信息 -->
@@ -89,20 +92,17 @@
     <!-- 批量新增人情明细表信息 -->
     <insert id="batchAdd" parameterType="list">
         INSERT INTO t_favor_item (
-            favor_id, person_id, source_person_id, type, amount, return_gift, remark, occur_date, create_by, modify_by
+            favor_id, receive_person_id, return_gift_id, give_person_id, give_gift_id, remark, create_by
         ) VALUES
-        <foreach collection="list" index="index" item="item" separator=",">
+        <foreach collection="favorItemList" item="item" separator=",">
             (
                 #{item.favorId},
-                #{item.personId},
-                #{item.sourcePersonId},
-                #{item.type},
-                #{item.amount},
-                #{item.returnGift},
+                #{item.receivePersonId},
+                #{item.returnGiftId},
+                #{item.givePersonId},
+                #{item.giveGiftId},
                 #{item.remark},
-                #{item.occurDate},
-                #{item.createBy},
-                #{item.modifyBy}
+                #{item.createBy}
             )
         </foreach>
     </insert>
@@ -114,36 +114,21 @@
             <if test="favorId != null">
                 favor_id = #{favorId},
             </if>
-            <if test="personId != null">
-                person_id = #{personId},
-            </if>
-            <if test="sourcePersonId != null">
-                source_person_id = #{sourcePersonId},
+            <if test="receivePersonId != null">
+                receive_person_id = #{receivePersonId},
             </if>
-            <if test="type != null">
-                type = #{type},
+            <if test="returnGiftId != null">
+                return_gift_id = #{returnGiftId},
             </if>
-            <if test="amount != null">
-                amount = #{amount},
+            <if test="givePersonId != null">
+                give_person_id = #{givePersonId},
             </if>
-            <if test="returnGift != null">
-                return_gift = #{returnGift},
+            <if test="giveGiftId != null">
+                give_gift_id = #{giveGiftId},
             </if>
-            <if test="remark != null">
+            <if test="@Ognl@isNotBlank(remark)">
                 remark = #{remark},
             </if>
-            <if test="occurDate != null">
-                occur_date = #{occurDate},
-            </if>
-            <if test="createTime != null">
-                create_time = #{createTime},
-            </if>
-            <if test="createBy != null">
-                create_by = #{createBy},
-            </if>
-            <if test="modifyTime != null">
-                modify_time = #{modifyTime},
-            </if>
             <if test="modifyBy != null">
                 modify_by = #{modifyBy}
             </if>
@@ -152,6 +137,13 @@
     </update>
 
     <!-- 根据主键删除人情明细表 -->
+    <delete id="deleteByIds" parameterType="Collection">
+        DELETE FROM t_favor_item WHERE id in
+        <foreach collection="ids" item="id" separator="," open="(" close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <!-- 根据主键删除人情明细表 -->
     <delete id="deleteById">
         DELETE FROM t_favor_item WHERE id = #{id}
     </delete>

+ 14 - 23
src/main/resources/mapper/FavorMapper.xml

@@ -2,15 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <!-- 事件表(t_favor) -->
-<mapper namespace="com.anyway.favor.mapper.FavorMapper">
+<mapper namespace="com.anyway.favor.dao.FavorDao">
     <!-- 字段映射 -->
-    <resultMap id="favorMap" type="com.anyway.favor.model.Favor"></resultMap>
+    <resultMap id="favorMap" type="com.anyway.favor.model.Favor" />
 
-    <!-- This code was generated by TableGo tools, mark 1 begin. -->
     <!-- 表查询字段 -->
     <sql id="allColumns">
-        f.id, f.occur_date, f.title, f.person_id, f.income_amount, f.pay_amount, f.remark, f.create_time, f.create_by, f.modify_time,
-        f.modify_by
+        f.id, f.hold_date, f.title, f.hold_person_id, f.income_amount, f.pay_amount, f.remark, f.create_time, f.create_by, f.modify_time, f.modify_by
     </sql>
 
     <!-- 根据条件参数查询事件表列表 -->
@@ -21,14 +19,14 @@
         FROM t_favor f
         LEFT JOIN t_person p ON p.id=f.person_id
         WHERE 1 = 1
-        <if test="occurDate != null">
-            AND f.occur_date = #{occurDate}
+        <if test="holdDate != null">
+            AND f.hold_date = #{holdDate}
         </if>
         <if test="@Ognl@isNotEmpty(startOccurDate)">
-            AND f.occur_date >= DATE_FORMAT(#{startOccurDate},'%Y-%m-%d')
+            AND f.hold_date >= DATE_FORMAT(#{startOccurDate},'%Y-%m-%d')
         </if>
         <if test="@Ognl@isNotEmpty(endOccurDate)">
-            <![CDATA[ AND f.occur_date <= DATE_FORMAT(#{endOccurDate},'%Y-%m-%d') ]]>
+            <![CDATA[ AND f.hold_date <= DATE_FORMAT(#{endOccurDate},'%Y-%m-%d') ]]>
         </if>
         <if test="title != null and title != ''">
             AND f.title LIKE CONCAT('%', #{title}, '%')
@@ -36,12 +34,6 @@
         <if test="@Ognl@isNotEmpty(personId)">
             AND f.person_id = #{personId}
         </if>
-        <if test="remark != null and remark != ''">
-            AND f.remark LIKE CONCAT('%', #{remark}, '%')
-        </if>
-        <if test="createBy != null">
-            AND f.create_by = #{createBy}
-        </if>
         <if test="sortName != null">
             ORDER BY f.${sortName} ${sortOrder}
         </if>
@@ -49,29 +41,28 @@
 
     <!-- 根据主键查询事件表信息 -->
     <select id="findById" resultMap="favorMap">
-        SELECT
-            <include refid="allColumns" />
+        SELECT <include refid="allColumns" />
         FROM t_favor f WHERE f.id = #{id}
     </select>
 
     <!-- 新增事件表信息 -->
     <insert id="add" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
-        INSERT INTO t_favor (occur_date, title, person_id, income_amount, pay_amount, remark, create_by, modify_by)
-        VALUES (#{occurDate}, #{title}, #{personId}, #{incomeAmount}, #{payAmount}, #{remark}, #{createBy}, #{modifyBy})
+        INSERT INTO t_favor (hold_date, title, hold_person_id, income_amount, pay_amount, remark, create_by)
+        VALUES (#{holdDate}, #{title}, #{holdPersonId}, #{incomeAmount}, #{payAmount}, #{remark}, #{createBy})
     </insert>
 
     <!-- 修改事件表信息 -->
     <update id="update">
         UPDATE t_favor
         <set>
-            <if test="occurDate != null">
-                occur_date = #{occurDate},
+            <if test="holdDate != null">
+                hold_date = #{holdDate},
             </if>
             <if test="title != null">
                 title = #{title},
             </if>
-            <if test="personId != null">
-                person_id = #{personId},
+            <if test="holdPersonId != null">
+                hold_person_id = #{holdPersonId},
             </if>
             <if test="incomeAmount != null">
                 income_amount = #{incomeAmount},

+ 52 - 0
src/main/resources/mapper/GiftMapper.xml

@@ -0,0 +1,52 @@
+<?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">
+
+<!-- 礼物表(t_gift) -->
+<mapper namespace="com.anyway.favor.dao.GiftDao">
+    <!-- 字段映射 -->
+    <resultMap id="giftMap" type="com.anyway.favor.model.Gift" />
+    <!-- 表查询字段 -->
+    <sql id="allColumns">
+        g.id, g.title, g.type, g.amount, g.create_by, g.create_time, g.modify_by, g.modify_time,
+    </sql>
+    <!-- 根据主键查询礼物 -->
+    <select id="findById" resultMap="giftMap">
+        SELECT
+            <include refid="allColumns" />
+        FROM t_gift fi WHERE fi.id = #{id}
+    </select>
+
+    <!-- 新增礼物表信息 -->
+    <insert id="add" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
+        INSERT INTO t_gift (title, type, amount, create_by)
+        VALUES (#{title}, #{type}, #{amount}, #{createBy})
+    </insert>
+
+    <!-- 修改礼物表信息 -->
+    <update id="update">
+        UPDATE t_gift
+        <set>
+            <if test="@Ognl@isNotBlank(title)">
+                title = #{title},
+            </if>
+            <if test="type != null">
+                type = #{type},
+            </if>
+            <if test="amount != null">
+                amount = #{amount},
+            </if>
+            <if test="modifyBy != null">
+                modify_by = #{modifyBy}
+            </if>
+        </set>
+        WHERE id = #{id}
+    </update>
+
+    <!-- 根据主键删除礼物表 -->
+    <delete id="deleteByIds">
+        DELETE FROM t_gift WHERE id in
+        <foreach collection="collection" item="id" separator="," open="(" close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 1 - 1
src/main/resources/mapper/PersonMapper.xml → src/main/resources/mapper/PersonDao.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <!-- 人员表(t_person) -->
-<mapper namespace="com.anyway.favor.mapper.PersonMapper">
+<mapper namespace="com.anyway.favor.dao.PersonDao">
     <!-- 字段映射 -->
     <resultMap id="personMap" type="com.anyway.favor.model.Person"></resultMap>
 

+ 9 - 12
src/main/resources/mapper/UserMapper.xml

@@ -2,17 +2,14 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
 <!-- 用户表(t_user) -->
-<mapper namespace="com.anyway.favor.mapper.UserMapper">
+<mapper namespace="com.anyway.favor.dao.UserDao">
     <!-- 字段映射 -->
-    <resultMap id="userMap" type="com.anyway.favor.model.User"></resultMap>
+    <resultMap id="userMap" type="com.anyway.favor.model.User" />
 
-    <!-- This code was generated by TableGo tools, mark 1 begin. -->
     <!-- 表查询字段 -->
     <sql id="allColumns">
-        u.id, u.account, u.password, u.create_time, u.create_by, u.modify_time, u.modify_by
+        u.id, u.user_name, u.password, u.create_time, u.create_by, u.modify_time, u.modify_by
     </sql>
-    <!-- This code was generated by TableGo tools, mark 1 end. -->
-
     <!-- 查询所有用户表 -->
     <select id="findAll" resultMap="userMap">
         SELECT
@@ -25,8 +22,8 @@
         SELECT
             <include refid="allColumns" />
         FROM t_user u WHERE 1 = 1
-        <if test="account != null and account != ''">
-            AND u.account LIKE CONCAT('%', #{account}, '%')
+        <if test="user_name != null and user_name != ''">
+            AND u.user_name LIKE CONCAT('%', #{userName}, '%')
         </if>
         <if test="password != null and password != ''">
             AND u.password LIKE CONCAT('%', #{password}, '%')
@@ -54,16 +51,16 @@
 
     <!-- 新增用户表信息 -->
     <insert id="add">
-        INSERT INTO t_user (account, password, create_by)
-        VALUES (#{account}, #{password}, #{createBy})
+        INSERT INTO t_user (user_name, password, create_by)
+        VALUES (#{userName}, #{password}, #{createBy})
     </insert>
 
     <!-- 修改用户表信息 -->
     <update id="update">
         UPDATE t_user
         <set>
-            <if test="account != null">
-                account = #{account},
+            <if test="userName != null">
+                user_name = #{userName},
             </if>
             <if test="password != null">
                 password = #{password},