张延森 2 years ago
parent
commit
420a3c4d50
25 changed files with 911 additions and 106 deletions
  1. 13
    14
      pom.xml
  2. 15
    0
      src/main/java/com/njyunzhi/invoice/common/FileUtil.java
  3. 76
    0
      src/main/java/com/njyunzhi/invoice/common/excel/MergeRowStrategy.java
  4. 96
    75
      src/main/java/com/njyunzhi/invoice/controller/TaInvoiceDetailController.java
  5. 67
    4
      src/main/java/com/njyunzhi/invoice/controller/TaInvoiceFillController.java
  6. 23
    2
      src/main/java/com/njyunzhi/invoice/controller/TaInvoicePersonController.java
  7. 20
    1
      src/main/java/com/njyunzhi/invoice/entity/TaInvoiceDetail.java
  8. 113
    0
      src/main/java/com/njyunzhi/invoice/entity/TaInvoiceDetailTpl.java
  9. 58
    0
      src/main/java/com/njyunzhi/invoice/entity/TaInvoiceItem.java
  10. 3
    0
      src/main/java/com/njyunzhi/invoice/entity/TaInvoiceOrg.java
  11. 17
    1
      src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceDetailMapper.java
  12. 19
    0
      src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceDetailTplMapper.java
  13. 24
    0
      src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceItemMapper.java
  14. 2
    0
      src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceItemTplMapper.java
  15. 19
    0
      src/main/java/com/njyunzhi/invoice/service/ITaInvoiceDetailService.java
  16. 16
    0
      src/main/java/com/njyunzhi/invoice/service/ITaInvoiceItemService.java
  17. 5
    0
      src/main/java/com/njyunzhi/invoice/service/ITaInvoicePersonService.java
  18. 95
    3
      src/main/java/com/njyunzhi/invoice/service/impl/TaInvoiceDetailServiceImpl.java
  19. 20
    0
      src/main/java/com/njyunzhi/invoice/service/impl/TaInvoiceItemServiceImpl.java
  20. 41
    0
      src/main/java/com/njyunzhi/invoice/service/impl/TaInvoicePersonServiceImpl.java
  21. BIN
      src/main/resources/excel/invoice_tpl.xlsx
  22. 112
    6
      src/main/resources/mapper/TaInvoiceDetailMapper.xml
  23. 14
    0
      src/main/resources/mapper/TaInvoiceDetailTplMapper.xml
  24. 33
    0
      src/main/resources/mapper/TaInvoiceItemMapper.xml
  25. 10
    0
      src/main/resources/mapper/TaInvoiceItemTplMapper.xml

+ 13
- 14
pom.xml View File

15
 	<description>发票填报</description>
15
 	<description>发票填报</description>
16
 	<properties>
16
 	<properties>
17
 		<java.version>1.8</java.version>
17
 		<java.version>1.8</java.version>
18
-		<maven.compiler.source>1.8</maven.compiler.source>
19
-		<maven.compiler.target>1.8</maven.compiler.target>
20
 	</properties>
18
 	</properties>
21
 	<dependencies>
19
 	<dependencies>
22
 		<dependency>
20
 		<dependency>
134
 						<directory>src/main/resources</directory>
132
 						<directory>src/main/resources</directory>
135
 						<filtering>true</filtering>
133
 						<filtering>true</filtering>
136
 						<includes>
134
 						<includes>
137
-							<include>**/*.xlsx</include>
138
 							<include>**/*.xml</include>
135
 							<include>**/*.xml</include>
139
-							<include>**/*.p12</include>
140
-							<include>**/*.pem</include>
141
 							<include>application.yml</include>
136
 							<include>application.yml</include>
142
 							<include>application-${profileActive}.yml</include>
137
 							<include>application-${profileActive}.yml</include>
143
 						</includes>
138
 						</includes>
144
 					</resource>
139
 					</resource>
140
+					<resource>
141
+						<directory>src/main/resources</directory>
142
+						<includes>
143
+							<include>**/*.xlsx</include>
144
+							<include>**/*.p12</include>
145
+							<include>**/*.pem</include>
146
+						</includes>
147
+					</resource>
145
 				</resources>
148
 				</resources>
146
 			</build>
149
 			</build>
147
 		</profile>
150
 		</profile>
192
 					<resource>
195
 					<resource>
193
 						<directory>src/main/resources</directory>
196
 						<directory>src/main/resources</directory>
194
 						<filtering>true</filtering>
197
 						<filtering>true</filtering>
195
-						<excludes>
196
-							<exclude>application.yml</exclude>
197
-							<exclude>application-*.yml</exclude>
198
-						</excludes>
198
+						<includes>
199
+							<include>**/*.xml</include>
200
+							<include>application.yml</include>
201
+							<include>application-${profileActive}.yml</include>
202
+						</includes>
199
 					</resource>
203
 					</resource>
200
 					<resource>
204
 					<resource>
201
 						<directory>src/main/resources</directory>
205
 						<directory>src/main/resources</directory>
202
-						<filtering>true</filtering>
203
 						<includes>
206
 						<includes>
204
 							<include>**/*.xlsx</include>
207
 							<include>**/*.xlsx</include>
205
-							<include>**/*.xml</include>
206
 							<include>**/*.p12</include>
208
 							<include>**/*.p12</include>
207
 							<include>**/*.pem</include>
209
 							<include>**/*.pem</include>
208
-							<include>application.yml</include>
209
-							<include>application-${profileActive}.yml</include>
210
 						</includes>
210
 						</includes>
211
-						<targetPath>${project.build.directory}/config</targetPath>
212
 					</resource>
211
 					</resource>
213
 				</resources>
212
 				</resources>
214
 			</build>
213
 			</build>

+ 15
- 0
src/main/java/com/njyunzhi/invoice/common/FileUtil.java View File

1
+package com.njyunzhi.invoice.common;
2
+
3
+import org.springframework.core.io.ClassPathResource;
4
+import org.springframework.stereotype.Component;
5
+
6
+import java.io.IOException;
7
+import java.io.InputStream;
8
+
9
+@Component
10
+public class FileUtil {
11
+    public InputStream getResourceFile(String path) throws IOException {
12
+        ClassPathResource classPathResource = new ClassPathResource(path);
13
+        return classPathResource.getInputStream();
14
+    }
15
+}

+ 76
- 0
src/main/java/com/njyunzhi/invoice/common/excel/MergeRowStrategy.java View File

1
+package com.njyunzhi.invoice.common.excel;
2
+
3
+import com.alibaba.excel.metadata.Head;
4
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
5
+import org.apache.poi.ss.usermodel.Cell;
6
+import org.apache.poi.ss.usermodel.Sheet;
7
+import org.apache.poi.ss.util.CellRangeAddress;
8
+
9
+import java.util.ArrayList;
10
+import java.util.List;
11
+
12
+public class MergeRowStrategy extends AbstractMergeStrategy {
13
+
14
+    // 对比数据源
15
+    List<Object> dataList;
16
+
17
+    // 从第几行开始合并
18
+    Integer rowStart;
19
+
20
+    // 第几列 从 0 开始
21
+    Integer column;
22
+
23
+    // 已经处理到第几行
24
+    int processedRow;
25
+
26
+    public MergeRowStrategy(List<Object> dataList, Integer rowStart, Integer column) {
27
+        this.dataList = dataList;
28
+        this.rowStart = null == rowStart || rowStart < 0 ? 0 : rowStart;
29
+        this.column = null == column || column < 0 ? 0 : column;
30
+    }
31
+
32
+    @Override
33
+    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
34
+        CellRangeAddress cellRange = getCellRange(sheet, cell);
35
+        if (null != cellRange) {
36
+            sheet.addMergedRegionUnsafe(cellRange);
37
+        }
38
+    }
39
+
40
+    private CellRangeAddress getCellRange(Sheet sheet, Cell cell) {
41
+        int rowIndex = cell.getRowIndex();
42
+        int columnIndex = cell.getColumnIndex();
43
+
44
+        // 如果不是需要处理的列, 不处理
45
+        if (column != columnIndex) return null;
46
+        // 如果当前行小于起始数据合并行, 不处理
47
+        if (rowStart > rowIndex) return null;
48
+        // 如果当前行已经处理过, 不处理
49
+        if (processedRow >= rowIndex) return null;
50
+
51
+        // 从当前行查询数据, 一直查询相同内容行
52
+        // excel 数据行与 datalist 数据行, index 差值就是 rowStart
53
+        int dataIndex = rowIndex - rowStart;
54
+        int sameRow = 0;
55
+        Object val = dataList.get(dataIndex); // 当前行数据
56
+        for (int i = dataIndex; i < dataList.size(); i += 1) {
57
+            if (i + 1 >= dataList.size()) break;
58
+
59
+            Object nextVal = dataList.get(i + 1);
60
+            boolean found = null == val && nextVal == null || (val != null && val.equals(nextVal));
61
+            if (found) {
62
+                sameRow ++;
63
+//                continue;
64
+            } else {
65
+                break;
66
+            }
67
+        }
68
+
69
+        if (sameRow > 0) {
70
+            processedRow = rowIndex + processedRow;
71
+            return new CellRangeAddress(rowIndex, processedRow, column, column);
72
+        }
73
+
74
+        return null;
75
+    }
76
+}

+ 96
- 75
src/main/java/com/njyunzhi/invoice/controller/TaInvoiceDetailController.java View File

3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
 import com.baomidou.mybatisplus.core.metadata.IPage;
4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
-import com.njyunzhi.invoice.common.BaseController;
7
-import com.njyunzhi.invoice.common.Constants;
8
-import com.njyunzhi.invoice.common.DateUtils;
9
-import com.njyunzhi.invoice.common.ResponseBean;
10
-import com.njyunzhi.invoice.entity.TaInvoiceFill;
11
-import com.njyunzhi.invoice.entity.TaPerson;
6
+import com.njyunzhi.invoice.common.*;
7
+import com.njyunzhi.invoice.entity.*;
12
 import com.njyunzhi.invoice.service.ITaInvoiceFillService;
8
 import com.njyunzhi.invoice.service.ITaInvoiceFillService;
13
 import io.swagger.annotations.Api;
9
 import io.swagger.annotations.Api;
14
 import io.swagger.annotations.ApiOperation;
10
 import io.swagger.annotations.ApiOperation;
22
 import org.springframework.web.bind.annotation.RequestMethod;
18
 import org.springframework.web.bind.annotation.RequestMethod;
23
 import org.springframework.web.bind.annotation.RequestParam;
19
 import org.springframework.web.bind.annotation.RequestParam;
24
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
20
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
25
-import com.njyunzhi.invoice.entity.TaInvoiceDetail;
26
 import org.springframework.web.bind.annotation.RestController;
21
 import org.springframework.web.bind.annotation.RestController;
27
 
22
 
23
+import java.util.HashMap;
24
+import java.util.Map;
25
+
28
 /**
26
 /**
29
  * <p>
27
  * <p>
30
     * 报销明细 前端控制器
28
     * 报销明细 前端控制器
54
      * @param pageSize
52
      * @param pageSize
55
      * @return
53
      * @return
56
      */
54
      */
57
-    @RequestMapping(value="/admin/invoice/{invoiceId}/detail",method= RequestMethod.GET)
58
-    @ApiOperation(value="列表", notes = "列表", httpMethod = "GET", response = ResponseBean.class)
55
+    @RequestMapping(value="/admin/invoice/{invoiceId}/detail-tpl",method= RequestMethod.GET)
56
+    @ApiOperation(value="模板列表", notes = "模板列表", httpMethod = "GET", response = ResponseBean.class)
59
     public ResponseBean taInvoiceDetailList(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
57
     public ResponseBean taInvoiceDetailList(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
60
 									 @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
58
 									 @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
61
                                      @ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
59
                                      @ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
62
 
60
 
63
         IPage<TaInvoiceDetail> pg = new Page<>(pageNum, pageSize);
61
         IPage<TaInvoiceDetail> pg = new Page<>(pageNum, pageSize);
64
-        QueryWrapper<TaInvoiceDetail> queryWrapper = new QueryWrapper<>();
65
-        queryWrapper.gt("status", Constants.STATUS_DELETE);
66
-        queryWrapper.eq("invoice_id",invoiceId);
67
-        queryWrapper.orderByDesc("create_date");
68
-        IPage<TaInvoiceDetail> result = iTaInvoiceDetailService.page(pg, queryWrapper);
62
+        IPage<TaInvoiceDetail> result = iTaInvoiceDetailService.getTplPageBy(pg, invoiceId);
69
         return ResponseBean.success(result);
63
         return ResponseBean.success(result);
70
     }
64
     }
71
 
65
 
72
-    @RequestMapping(value="/admin/invoice/{invoiceId}/detail",method= RequestMethod.POST)
66
+    @RequestMapping(value="/admin/invoice/{invoiceId}/detail-tpl",method= RequestMethod.POST)
73
     @ApiOperation(value="一键生成", notes = "一键生成", httpMethod = "POST", response = ResponseBean.class)
67
     @ApiOperation(value="一键生成", notes = "一键生成", httpMethod = "POST", response = ResponseBean.class)
74
     public ResponseBean taInvoiceDetailAdd(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
68
     public ResponseBean taInvoiceDetailAdd(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
75
 
69
 
80
         }
74
         }
81
     }
75
     }
82
 
76
 
83
-    /**
84
-     * 根据id删除对象
85
-     * @param id  实体ID
86
-     */
87
-    @RequestMapping(value="/admin/invoice/detail/{id}", method= RequestMethod.DELETE)
88
-    @ApiOperation(value="删除", notes = "删除", httpMethod = "DELETE", response = ResponseBean.class)
89
-    public ResponseBean taInvoiceDetailDelete(@ApiParam("对象ID") @PathVariable String id) throws Exception{
90
-        if(iTaInvoiceDetailService.removeById(id)){
91
-            return ResponseBean.success("success");
92
-        }else {
93
-            return ResponseBean.error("删除失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
77
+
78
+    @RequestMapping(value="/admin/invoice/{invoiceId}/detail-tpl/item",method= RequestMethod.POST)
79
+    @ApiOperation(value="添加或者修改项目", notes = "添加或者修改项目", httpMethod = "POST", response = ResponseBean.class)
80
+    public ResponseBean createNew(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
81
+                                  @ApiParam("报销项目") @RequestBody TaInvoiceItem taInvoiceItem) throws Exception {
82
+
83
+        if (StringUtils.isEmpty(taInvoiceItem.getInvoicePersonId())) {
84
+            return ResponseBean.error("未设置绑定人员");
94
         }
85
         }
95
-    }
96
 
86
 
97
-    /**
98
-     * 修改对象
99
-     * @param id  实体ID
100
-     * @param taInvoiceDetail 实体对象
101
-     * @return
102
-     */
103
-    @RequestMapping(value="/admin/invoice/{invoiceId}/detail/{id}",method= RequestMethod.PUT)
104
-    @ApiOperation(value="更新", notes = "更新", httpMethod = "PUT", response = ResponseBean.class)
105
-    public ResponseBean taInvoiceDetailUpdate(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
106
-                                              @ApiParam("对象ID") @PathVariable String id,
107
-                                              @ApiParam("更新内容") @RequestBody TaInvoiceDetail taInvoiceDetail) throws Exception{
87
+        if (StringUtils.isEmpty(taInvoiceItem.getName()) || null == taInvoiceItem.getCharge()) {
88
+            return ResponseBean.error("报销项目名称或者金额不能为空");
89
+        }
108
 
90
 
109
-        taInvoiceDetail.setDetailId(id);
110
-        taInvoiceDetail.setInvoiceId(invoiceId);
111
-        if (iTaInvoiceDetailService.updateById(taInvoiceDetail)){
112
-            return ResponseBean.success(iTaInvoiceDetailService.getById(id));
113
-        }else {
114
-            return ResponseBean.error("修改失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
91
+        taInvoiceItem.setInvoiceId(invoiceId);
92
+        if (iTaInvoiceDetailService.createOrUpdateItem(taInvoiceItem)){
93
+            return ResponseBean.success("ok");
94
+        } else {
95
+            return ResponseBean.error("保存失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
115
         }
96
         }
116
     }
97
     }
117
 
98
 
118
-    @RequestMapping(value="/h5/invoice/{invoiceId}/detail/{id}",method= RequestMethod.PUT)
99
+    @RequestMapping(value="/admin/invoice/{invoiceId}/detail-tpl/item/{itemId}",method= RequestMethod.POST)
100
+    @ApiOperation(value="添加或者修改项目", notes = "添加或者修改项目", httpMethod = "POST", response = ResponseBean.class)
101
+    public ResponseBean createNew(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
102
+                                  @ApiParam("报销项目ITEM") @PathVariable(value ="itemId") Integer itemId) throws Exception {
103
+        if (iTaInvoiceDetailService.deleteItem(invoiceId, itemId)){
104
+            return ResponseBean.success("ok");
105
+        } else {
106
+            return ResponseBean.error("保存失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
107
+        }
108
+    }
109
+
110
+    @RequestMapping(value="/h5/invoice/{invoiceId}/detail",method= RequestMethod.PUT)
119
     @ApiOperation(value="H5确认报销单", notes = "H5确认报销单", httpMethod = "PUT", response = ResponseBean.class)
111
     @ApiOperation(value="H5确认报销单", notes = "H5确认报销单", httpMethod = "PUT", response = ResponseBean.class)
120
     public ResponseBean invoiceConfirm(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
112
     public ResponseBean invoiceConfirm(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
121
-                                       @ApiParam("对象ID") @PathVariable String id,
122
-                                       @ApiParam("更新内容") @RequestBody TaInvoiceDetail taInvoiceDetail) throws Exception{
113
+                                       @ApiParam("更新内容") @RequestBody TaInvoiceDetail taInvoiceDetail) throws Exception {
123
 
114
 
124
-        TaPerson taPerson = currentPerson();
115
+        if (StringUtils.isEmpty(taInvoiceDetail.getInvoicePersonId())) {
116
+            return ResponseBean.error("未选择报销人员");
117
+        }
118
+
119
+        if (null == taInvoiceDetail.getItemList() || taInvoiceDetail.getItemList().size() < 1) {
120
+            return ResponseBean.error("未找到报销明细");
121
+        }
125
 
122
 
126
-        taInvoiceDetail.setDetailId(id);
123
+        TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
124
+        if (null == taInvoiceFill || taInvoiceFill.getStatus() == Constants.STATUS_DELETE) {
125
+            return ResponseBean.error("报销单不存在");
126
+        }
127
+
128
+        if (getIsFinished(taInvoiceFill)) {
129
+            return ResponseBean.error("报销单确认已结束");
130
+        }
131
+
132
+        TaPerson taPerson = currentPerson();
127
         taInvoiceDetail.setPersonId(taPerson.getPersonId());
133
         taInvoiceDetail.setPersonId(taPerson.getPersonId());
128
         taInvoiceDetail.setInvoiceId(invoiceId);
134
         taInvoiceDetail.setInvoiceId(invoiceId);
129
-        if (iTaInvoiceDetailService.updateById(taInvoiceDetail)){
130
-            return ResponseBean.success(iTaInvoiceDetailService.getById(id));
131
-        }else {
135
+        if (iTaInvoiceDetailService.createOrMergeInvoiceDetail(taInvoiceDetail)){
136
+            return ResponseBean.success(taInvoiceDetail);
137
+        } else {
132
             return ResponseBean.error("修改失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
138
             return ResponseBean.error("修改失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
133
         }
139
         }
134
     }
140
     }
138
                 DateUtils.now().isAfter(taInvoiceFill.getEndDate());
144
                 DateUtils.now().isAfter(taInvoiceFill.getEndDate());
139
     }
145
     }
140
 
146
 
147
+    @RequestMapping(value="/h5/invoice/{invoiceId}/detail",method= RequestMethod.GET)
148
+    @ApiOperation(value="获取报销单信息", notes = "获取报销单信息", httpMethod = "GET", response = ResponseBean.class)
149
+    public ResponseBean getDetailByPerson(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
150
+                                          @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
151
+                                          @ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
152
+                                          @ApiParam("人员名称") @RequestParam(value ="personName", required = false) String personName) throws Exception{
141
 
153
 
142
-    @RequestMapping(value="/h5/invoice/{invoiceId}",method= RequestMethod.GET)
143
-    @ApiOperation(value="获取报销单", notes = "获取报销单", httpMethod = "GET", response = ResponseBean.class)
144
-    public ResponseBean getInvoice(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
154
+        IPage<TaInvoiceDetail> page = new Page<>(pageNum, pageSize);
155
+        return ResponseBean.success(iTaInvoiceDetailService.getPersonPage(page, invoiceId, personName));
156
+    }
157
+
158
+    @RequestMapping(value="/h5/invoice/{invoiceId}/detail/info",method= RequestMethod.GET)
159
+    @ApiOperation(value="获取报销单信息", notes = "获取报销单信息", httpMethod = "GET", response = ResponseBean.class)
160
+    public ResponseBean getDetailByPerson(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
161
+                                          @ApiParam("人员ID") @RequestParam(value ="personId", required = false) String personId,
162
+                                          @ApiParam("报销人员ID") @RequestParam(value ="invoicePersonId", required = false) String invoicePersonId) throws Exception{
145
 
163
 
146
         TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
164
         TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
147
         if (null == taInvoiceFill || taInvoiceFill.getStatus() != Constants.STATUS_NORMAL) {
165
         if (null == taInvoiceFill || taInvoiceFill.getStatus() != Constants.STATUS_NORMAL) {
148
             return ResponseBean.error("报销单不存在");
166
             return ResponseBean.error("报销单不存在");
149
         }
167
         }
150
 
168
 
151
-        TaPerson taPerson = currentPerson();
152
-        TaInvoiceDetail taInvoiceDetail = iTaInvoiceDetailService.getByPerson(invoiceId, taPerson.getPersonId());
153
-        if (null == taInvoiceDetail) {
154
-            return ResponseBean.error("找不到报销数据或者您不在此次名单中");
169
+        if (StringUtils.isEmpty(personId) && StringUtils.isEmpty(invoicePersonId)) {
170
+            return ResponseBean.error("人员ID不存在");
155
         }
171
         }
156
 
172
 
157
-        taInvoiceDetail.setIsFinished(getIsFinished(taInvoiceFill));
158
-        return ResponseBean.success(taInvoiceDetail);
159
-    }
173
+        boolean isFinished = getIsFinished(taInvoiceFill);
160
 
174
 
161
-    @RequestMapping(value="/h5/invoice/{invoiceId}/detail/{id}",method= RequestMethod.GET)
162
-    @ApiOperation(value="获取报销单详情", notes = "获取报销单详情", httpMethod = "GET", response = ResponseBean.class)
163
-    public ResponseBean getDetail(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId,
164
-                                       @ApiParam("对象ID") @PathVariable String id) throws Exception{
175
+        TaInvoiceDetail taInvoiceDetailTPl = null;
176
+        if (!StringUtils.isEmpty(invoicePersonId)) {
177
+            taInvoiceDetailTPl = iTaInvoiceDetailService.getTplByPerson(invoiceId, invoicePersonId);
178
+            if (null != taInvoiceDetailTPl) {
179
+                taInvoiceDetailTPl.setIsFinished(isFinished);
180
+            }
181
+        }
165
 
182
 
166
-        TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
167
-        if (null == taInvoiceFill || taInvoiceFill.getStatus() != Constants.STATUS_NORMAL) {
168
-            return ResponseBean.error("报销单不存在");
183
+        TaInvoiceDetail taInvoiceDetail = null;
184
+        if (!StringUtils.isEmpty(personId)) {
185
+            taInvoiceDetail = iTaInvoiceDetailService.getByPerson(invoiceId, personId);
186
+            if (null != taInvoiceDetail) {
187
+                taInvoiceDetail.setIsFinished(isFinished);
188
+            }
169
         }
189
         }
170
 
190
 
171
-        TaPerson taPerson = currentPerson();
172
-        TaInvoiceDetail taInvoiceDetail = iTaInvoiceDetailService.getById(id);
173
-        if (null == taInvoiceDetail || taInvoiceDetail.getStatus() == Constants.STATUS_DELETE || !taPerson.getPersonId().equals(taInvoiceDetail.getPersonId())) {
174
-            return ResponseBean.error("找不到报销数据详情");
191
+        if (null == taInvoiceDetail && null == taInvoiceDetailTPl) {
192
+            return ResponseBean.error("找不到报销数据信息");
175
         }
193
         }
176
 
194
 
177
-        taInvoiceDetail.setIsFinished(getIsFinished(taInvoiceFill));
178
-        return ResponseBean.success(taInvoiceDetail);
195
+        Map<String, Object> resp = new HashMap<>();
196
+        resp.put("detail", taInvoiceDetail);
197
+        resp.put("tpl", taInvoiceDetailTPl);
198
+
199
+        return ResponseBean.success(resp);
179
     }
200
     }
180
 }
201
 }

+ 67
- 4
src/main/java/com/njyunzhi/invoice/controller/TaInvoiceFillController.java View File

1
 package com.njyunzhi.invoice.controller;
1
 package com.njyunzhi.invoice.controller;
2
 
2
 
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.ExcelWriter;
5
+import com.alibaba.excel.metadata.Head;
6
+import com.alibaba.excel.support.ExcelTypeEnum;
7
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
8
+import com.alibaba.excel.write.metadata.WriteSheet;
9
+import com.alibaba.excel.write.metadata.fill.FillConfig;
3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
10
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4
 import com.baomidou.mybatisplus.core.metadata.IPage;
11
 import com.baomidou.mybatisplus.core.metadata.IPage;
5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
12
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6
-import com.njyunzhi.invoice.common.BaseController;
7
-import com.njyunzhi.invoice.common.Constants;
8
-import com.njyunzhi.invoice.common.ResponseBean;
9
-import com.njyunzhi.invoice.common.StringUtils;
13
+import com.njyunzhi.invoice.common.*;
14
+import com.njyunzhi.invoice.common.excel.MergeRowStrategy;
15
+import com.njyunzhi.invoice.entity.TaInvoiceDetail;
16
+import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
10
 import io.swagger.annotations.Api;
17
 import io.swagger.annotations.Api;
11
 import io.swagger.annotations.ApiOperation;
18
 import io.swagger.annotations.ApiOperation;
12
 import io.swagger.annotations.ApiParam;
19
 import io.swagger.annotations.ApiParam;
20
+import org.apache.poi.ss.usermodel.Cell;
21
+import org.apache.poi.ss.usermodel.Sheet;
13
 import org.slf4j.Logger;
22
 import org.slf4j.Logger;
14
 import org.slf4j.LoggerFactory;
23
 import org.slf4j.LoggerFactory;
15
 import org.springframework.beans.factory.annotation.Autowired;
24
 import org.springframework.beans.factory.annotation.Autowired;
22
 import com.njyunzhi.invoice.entity.TaInvoiceFill;
31
 import com.njyunzhi.invoice.entity.TaInvoiceFill;
23
 import org.springframework.web.bind.annotation.RestController;
32
 import org.springframework.web.bind.annotation.RestController;
24
 
33
 
34
+import javax.servlet.http.HttpServletResponse;
35
+import java.io.File;
36
+import java.io.InputStream;
25
 import java.util.List;
37
 import java.util.List;
38
+import java.util.stream.Collectors;
26
 
39
 
27
 /**
40
 /**
28
  * <p>
41
  * <p>
43
     @Autowired
56
     @Autowired
44
     public ITaInvoiceFillService iTaInvoiceFillService;
57
     public ITaInvoiceFillService iTaInvoiceFillService;
45
 
58
 
59
+    @Autowired
60
+    public ITaInvoiceDetailService iTaInvoiceDetailService;
61
+
62
+    @Autowired
63
+    FileUtil fileUtil;
46
 
64
 
47
     /**
65
     /**
48
      * 分页查询列表
66
      * 分页查询列表
71
         return ResponseBean.success(result);
89
         return ResponseBean.success(result);
72
     }
90
     }
73
 
91
 
92
+    @RequestMapping(value="/admin/invoice/{id}/export",method= RequestMethod.POST)
93
+    @ApiOperation(value="导出", notes = "导出", httpMethod = "POST", response = ResponseBean.class)
94
+    public void export(@ApiParam("班级ID") @PathVariable String id,
95
+                               HttpServletResponse response) throws Exception {
96
+        TaInvoiceFill invoiceFill = iTaInvoiceFillService.getById(id);
97
+        if (null == invoiceFill) {
98
+            throw new Exception("为找到班级信息");
99
+        }
100
+
101
+        // 获取填报信息
102
+        List<TaInvoiceDetail> list = iTaInvoiceDetailService.getListByMainId(id);
103
+
104
+        String tplPath = "excel/invoice_tpl.xlsx";  // 相对 resource 目录位置
105
+        InputStream inputStream = fileUtil.getResourceFile(tplPath);
106
+        String expFile = String.format("%s开票信息表.xlsx", invoiceFill.getName());
107
+
108
+        response.setContentType("application/vnd.ms-excel");
109
+        response.setCharacterEncoding("utf-8");
110
+        response.setHeader("Content-disposition", "attachment;filename="+expFile);
111
+//        EasyExcel.write(response.getOutputStream(), TaInvoiceDetail.class)
112
+//                .withTemplate(inputStream)
113
+//                .excelType(ExcelTypeEnum.XLSX)
114
+//                .sheet()
115
+//                .doFill(list);
116
+
117
+        List<Object> mergeDataList = list.stream().map(x -> x.getPersonName()).collect(Collectors.toList());
118
+        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), TaInvoiceDetail.class).build();
119
+        WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new MergeRowStrategy(mergeDataList, 2, 0)).build();
120
+        FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
121
+
122
+        excelWriter.fill(list, fillConfig, writeSheet);
123
+    }
124
+
74
     /**
125
     /**
75
      * 保存对象
126
      * 保存对象
76
      * @param taInvoiceFill 实体对象
127
      * @param taInvoiceFill 实体对象
133
     public ResponseBean taInvoiceFillGet(@ApiParam("对象ID") @PathVariable String id) throws Exception{
184
     public ResponseBean taInvoiceFillGet(@ApiParam("对象ID") @PathVariable String id) throws Exception{
134
         return ResponseBean.success(iTaInvoiceFillService.getById(id));
185
         return ResponseBean.success(iTaInvoiceFillService.getById(id));
135
     }
186
     }
187
+
188
+
189
+    @RequestMapping(value="/h5/invoice/{invoiceId}",method= RequestMethod.GET)
190
+    @ApiOperation(value="获取报销单", notes = "获取报销单", httpMethod = "GET", response = ResponseBean.class)
191
+    public ResponseBean getInvoice(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
192
+        TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
193
+        if (null == taInvoiceFill || taInvoiceFill.getStatus() != Constants.STATUS_NORMAL) {
194
+            return ResponseBean.error("报销单不存在");
195
+        }
196
+
197
+        return ResponseBean.success(taInvoiceFill);
198
+    }
136
 }
199
 }

+ 23
- 2
src/main/java/com/njyunzhi/invoice/controller/TaInvoicePersonController.java View File

8
 import com.njyunzhi.invoice.common.ResponseBean;
8
 import com.njyunzhi.invoice.common.ResponseBean;
9
 import com.njyunzhi.invoice.common.StringUtils;
9
 import com.njyunzhi.invoice.common.StringUtils;
10
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
10
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
11
+import com.njyunzhi.invoice.entity.TaPerson;
11
 import com.njyunzhi.invoice.service.ITaInvoiceOrgService;
12
 import com.njyunzhi.invoice.service.ITaInvoiceOrgService;
12
 import io.swagger.annotations.Api;
13
 import io.swagger.annotations.Api;
13
 import io.swagger.annotations.ApiOperation;
14
 import io.swagger.annotations.ApiOperation;
92
             return ResponseBean.error("保存失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
93
             return ResponseBean.error("保存失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
93
         }
94
         }
94
     }
95
     }
96
+
95
     /**
97
     /**
96
      * 批量导入
98
      * 批量导入
97
      * @return
99
      * @return
111
     @RequestMapping(value="/admin/invoice/{invoiceId}/person/{id}", method= RequestMethod.DELETE)
113
     @RequestMapping(value="/admin/invoice/{invoiceId}/person/{id}", method= RequestMethod.DELETE)
112
     @ApiOperation(value="删除", notes = "删除", httpMethod = "DELETE", response = ResponseBean.class)
114
     @ApiOperation(value="删除", notes = "删除", httpMethod = "DELETE", response = ResponseBean.class)
113
     public ResponseBean taInvoicePersonDelete(@ApiParam("对象ID") @PathVariable String id) throws Exception{
115
     public ResponseBean taInvoicePersonDelete(@ApiParam("对象ID") @PathVariable String id) throws Exception{
114
-        if(iTaInvoicePersonService.removeLogicById(id)){
116
+        if (iTaInvoicePersonService.removeLogicById(id)) {
115
             return ResponseBean.success("success");
117
             return ResponseBean.success("success");
116
-        }else {
118
+        } else {
117
             return ResponseBean.error("删除失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
119
             return ResponseBean.error("删除失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
118
         }
120
         }
119
     }
121
     }
120
 
122
 
123
+
124
+//    /**
125
+//     * 根据id删除对象
126
+//     * @param id  实体ID
127
+//     */
128
+//    @RequestMapping(value="/h5/invoice/{invoiceId}/person/{id}/bind", method= RequestMethod.DELETE)
129
+//    @ApiOperation(value="绑定人员", notes = "绑定人员", httpMethod = "DELETE", response = ResponseBean.class)
130
+//    public ResponseBean bind(@ApiParam("班级ID") @PathVariable String invoiceId,
131
+//                             @ApiParam("人员ID") @PathVariable String id) throws Exception {
132
+//
133
+//        TaInvoicePerson taInvoicePerson = iTaInvoicePersonService.getByPerson(invoiceId, id);
134
+//        TaPerson taPerson = currentPerson();
135
+//
136
+//        if(iTaInvoicePersonService.bind(taInvoicePerson, taPerson)){
137
+//            return ResponseBean.success("success");
138
+//        }else {
139
+//            return ResponseBean.error("删除失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
140
+//        }
141
+//    }
121
 }
142
 }

+ 20
- 1
src/main/java/com/njyunzhi/invoice/entity/TaInvoiceDetail.java View File

1
 package com.njyunzhi.invoice.entity;
1
 package com.njyunzhi.invoice.entity;
2
 
2
 
3
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
4
+import com.alibaba.excel.annotation.ExcelProperty;
3
 import com.baomidou.mybatisplus.annotation.IdType;
5
 import com.baomidou.mybatisplus.annotation.IdType;
4
 import java.time.LocalDateTime;
6
 import java.time.LocalDateTime;
5
 
7
 
6
 import com.baomidou.mybatisplus.annotation.TableField;
8
 import com.baomidou.mybatisplus.annotation.TableField;
7
 import com.baomidou.mybatisplus.annotation.TableId;
9
 import com.baomidou.mybatisplus.annotation.TableId;
8
 import java.io.Serializable;
10
 import java.io.Serializable;
11
+import java.util.List;
12
+
9
 import io.swagger.annotations.ApiModel;
13
 import io.swagger.annotations.ApiModel;
10
 import io.swagger.annotations.ApiModelProperty;
14
 import io.swagger.annotations.ApiModelProperty;
11
 import lombok.Data;
15
 import lombok.Data;
22
  */
26
  */
23
 @Data
27
 @Data
24
 @EqualsAndHashCode(callSuper = false)
28
 @EqualsAndHashCode(callSuper = false)
25
-@Accessors(chain = true)
29
+@ExcelIgnoreUnannotated
26
 @ApiModel(value="TaInvoiceDetail对象", description="报销明细")
30
 @ApiModel(value="TaInvoiceDetail对象", description="报销明细")
27
 public class TaInvoiceDetail implements Serializable {
31
 public class TaInvoiceDetail implements Serializable {
28
 
32
 
41
     @ApiModelProperty(value = "映射人员ID")
45
     @ApiModelProperty(value = "映射人员ID")
42
     private String personId;
46
     private String personId;
43
 
47
 
48
+    @ExcelProperty(index = 1)
44
     @ApiModelProperty(value = "人员名称")
49
     @ApiModelProperty(value = "人员名称")
45
     private String personName;
50
     private String personName;
46
 
51
 
53
     @ApiModelProperty(value = "所属单位ID")
58
     @ApiModelProperty(value = "所属单位ID")
54
     private String orgId;
59
     private String orgId;
55
 
60
 
61
+    @ExcelProperty(index = 2)
56
     @ApiModelProperty(value = "单位名称")
62
     @ApiModelProperty(value = "单位名称")
57
     private String orgName;
63
     private String orgName;
58
 
64
 
65
+    @ExcelProperty(index = 3)
59
     @ApiModelProperty(value = "税号")
66
     @ApiModelProperty(value = "税号")
60
     private String taxNo;
67
     private String taxNo;
61
 
68
 
69
+    @ExcelProperty(index = 4)
62
     @ApiModelProperty(value = "地址")
70
     @ApiModelProperty(value = "地址")
63
     private String address;
71
     private String address;
64
 
72
 
73
+    @ExcelProperty(index = 5)
65
     @ApiModelProperty(value = "电话")
74
     @ApiModelProperty(value = "电话")
66
     private String phone;
75
     private String phone;
67
 
76
 
68
     @ApiModelProperty(value = "银行ID")
77
     @ApiModelProperty(value = "银行ID")
69
     private String bankId;
78
     private String bankId;
70
 
79
 
80
+    @ExcelProperty(index = 6)
71
     @ApiModelProperty(value = "银行名称")
81
     @ApiModelProperty(value = "银行名称")
72
     private String bankName;
82
     private String bankName;
73
 
83
 
84
+    @ExcelProperty(index = 7)
74
     @ApiModelProperty(value = "开户行账号")
85
     @ApiModelProperty(value = "开户行账号")
75
     private String cardNo;
86
     private String cardNo;
76
 
87
 
77
     @ApiModelProperty(value = "报销项目ID")
88
     @ApiModelProperty(value = "报销项目ID")
78
     private Integer invoiceItemTplId;
89
     private Integer invoiceItemTplId;
79
 
90
 
91
+    @ExcelProperty(index = 8)
80
     @ApiModelProperty(value = "报销项目")
92
     @ApiModelProperty(value = "报销项目")
81
     private String itemName;
93
     private String itemName;
82
 
94
 
95
+    @ExcelProperty(index = 9)
83
     @ApiModelProperty(value = "开票金额")
96
     @ApiModelProperty(value = "开票金额")
84
     private String charge;
97
     private String charge;
85
 
98
 
99
+    @ExcelProperty(index = 10)
86
     @ApiModelProperty(value = "合开备注")
100
     @ApiModelProperty(value = "合开备注")
87
     private String mergeRemark;
101
     private String mergeRemark;
88
 
102
 
103
+    @ExcelProperty(index = 11)
89
     @ApiModelProperty(value = "住宿清单")
104
     @ApiModelProperty(value = "住宿清单")
90
     private String stayRemark;
105
     private String stayRemark;
91
 
106
 
98
     @ApiModelProperty("是否结束")
113
     @ApiModelProperty("是否结束")
99
     @TableField(exist = false)
114
     @TableField(exist = false)
100
     private Boolean isFinished;
115
     private Boolean isFinished;
116
+
117
+    @ApiModelProperty("报销明细")
118
+    @TableField(exist = false)
119
+    private List<TaInvoiceItem> itemList;
101
 }
120
 }

+ 113
- 0
src/main/java/com/njyunzhi/invoice/entity/TaInvoiceDetailTpl.java View File

1
+package com.njyunzhi.invoice.entity;
2
+
3
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
4
+import com.alibaba.excel.annotation.ExcelProperty;
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableField;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import io.swagger.annotations.ApiModel;
9
+import io.swagger.annotations.ApiModelProperty;
10
+import lombok.Data;
11
+import lombok.EqualsAndHashCode;
12
+
13
+import java.io.Serializable;
14
+import java.time.LocalDateTime;
15
+
16
+/**
17
+ * <p>
18
+ * 报销明细模板
19
+ * </p>
20
+ *
21
+ * @author yansen
22
+ * @since 2022-07-04
23
+ */
24
+@Data
25
+@EqualsAndHashCode(callSuper = false)
26
+@ExcelIgnoreUnannotated
27
+@ApiModel(value="TaInvoiceDetailTpl对象", description="报销明细模板")
28
+public class TaInvoiceDetailTpl implements Serializable {
29
+
30
+    private static final long serialVersionUID = 1L;
31
+
32
+    @ApiModelProperty(value = "明细ID")
33
+    @TableId(value = "detail_id", type = IdType.INPUT)
34
+    private String detailId;
35
+
36
+    @ApiModelProperty(value = "报销ID")
37
+    private String invoiceId;
38
+
39
+    @ApiModelProperty(value = "人员ID")
40
+    private String invoicePersonId;
41
+
42
+    @ApiModelProperty(value = "映射人员ID")
43
+    private String personId;
44
+
45
+    @ExcelProperty(index = 1)
46
+    @ApiModelProperty(value = "人员名称")
47
+    private String personName;
48
+
49
+    @ApiModelProperty(value = "开票单位ID")
50
+    private String invoiceOrgId;
51
+
52
+    @ApiModelProperty(value = "开票单位名称")
53
+    private String invoiceOrgName;
54
+
55
+    @ApiModelProperty(value = "所属单位ID")
56
+    private String orgId;
57
+
58
+    @ExcelProperty(index = 2)
59
+    @ApiModelProperty(value = "单位名称")
60
+    private String orgName;
61
+
62
+    @ExcelProperty(index = 3)
63
+    @ApiModelProperty(value = "税号")
64
+    private String taxNo;
65
+
66
+    @ExcelProperty(index = 4)
67
+    @ApiModelProperty(value = "地址")
68
+    private String address;
69
+
70
+    @ExcelProperty(index = 5)
71
+    @ApiModelProperty(value = "电话")
72
+    private String phone;
73
+
74
+    @ApiModelProperty(value = "银行ID")
75
+    private String bankId;
76
+
77
+    @ExcelProperty(index = 6)
78
+    @ApiModelProperty(value = "银行名称")
79
+    private String bankName;
80
+
81
+    @ExcelProperty(index = 7)
82
+    @ApiModelProperty(value = "开户行账号")
83
+    private String cardNo;
84
+
85
+    @ApiModelProperty(value = "报销项目ID")
86
+    private Integer invoiceItemTplId;
87
+
88
+    @ExcelProperty(index = 8)
89
+    @ApiModelProperty(value = "报销项目")
90
+    private String itemName;
91
+
92
+    @ExcelProperty(index = 9)
93
+    @ApiModelProperty(value = "开票金额")
94
+    private String charge;
95
+
96
+    @ExcelProperty(index = 10)
97
+    @ApiModelProperty(value = "合开备注")
98
+    private String mergeRemark;
99
+
100
+    @ExcelProperty(index = 11)
101
+    @ApiModelProperty(value = "住宿清单")
102
+    private String stayRemark;
103
+
104
+    @ApiModelProperty(value = "状态")
105
+    private Integer status;
106
+
107
+    @ApiModelProperty(value = "创建日期")
108
+    private LocalDateTime createDate;
109
+
110
+    @ApiModelProperty("是否结束")
111
+    @TableField(exist = false)
112
+    private Boolean isFinished;
113
+}

+ 58
- 0
src/main/java/com/njyunzhi/invoice/entity/TaInvoiceItem.java View File

1
+package com.njyunzhi.invoice.entity;
2
+
3
+import com.alibaba.excel.annotation.ExcelProperty;
4
+import com.baomidou.mybatisplus.annotation.IdType;
5
+import com.baomidou.mybatisplus.annotation.TableId;
6
+import io.swagger.annotations.ApiModel;
7
+import io.swagger.annotations.ApiModelProperty;
8
+import lombok.Data;
9
+import lombok.EqualsAndHashCode;
10
+import lombok.experimental.Accessors;
11
+
12
+import java.io.Serializable;
13
+import java.time.LocalDateTime;
14
+
15
+/**
16
+ * <p>
17
+ * 报销项目
18
+ * </p>
19
+ *
20
+ * @author yansen
21
+ * @since 2022-07-04
22
+ */
23
+@Data
24
+@EqualsAndHashCode(callSuper = false)
25
+@Accessors(chain = true)
26
+@ApiModel(value="TaInvoiceItem对象", description="报销项目")
27
+public class TaInvoiceItem implements Serializable {
28
+
29
+    private static final long serialVersionUID = 1L;
30
+
31
+    @ApiModelProperty(value = "项目ID")
32
+    @TableId(value = "invoice_item_id", type = IdType.AUTO)
33
+    private Integer invoiceItemId;
34
+
35
+    @ApiModelProperty(value = "报销人员ID")
36
+    private String invoicePersonId;
37
+
38
+    @ApiModelProperty(value = "报销ID")
39
+    private String invoiceId;
40
+
41
+    @ApiModelProperty(value = "项目名称")
42
+    private String name;
43
+
44
+    @ApiModelProperty(value = "开票额")
45
+    private Integer charge;
46
+
47
+    @ApiModelProperty(value = "合开备注")
48
+    private String mergeRemark;
49
+
50
+    @ApiModelProperty(value = "住宿清单")
51
+    private String stayRemark;
52
+
53
+    @ApiModelProperty(value = "状态")
54
+    private Integer status;
55
+
56
+    @ApiModelProperty(value = "创建日期")
57
+    private LocalDateTime createDate;
58
+}

+ 3
- 0
src/main/java/com/njyunzhi/invoice/entity/TaInvoiceOrg.java View File

30
     @TableId(value = "invoice_org_id", type = IdType.ASSIGN_UUID)
30
     @TableId(value = "invoice_org_id", type = IdType.ASSIGN_UUID)
31
     private String invoiceOrgId;
31
     private String invoiceOrgId;
32
 
32
 
33
+    @ApiModelProperty(value = "班级ID")
34
+    private String invoiceId;
35
+
33
     @ApiModelProperty(value = "映射ID")
36
     @ApiModelProperty(value = "映射ID")
34
     private String orgId;
37
     private String orgId;
35
 
38
 

+ 17
- 1
src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceDetailMapper.java View File

1
 package com.njyunzhi.invoice.mapper;
1
 package com.njyunzhi.invoice.mapper;
2
 
2
 
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
3
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6
+import com.njyunzhi.invoice.entity.TaInvoiceDetailTpl;
5
 import org.apache.ibatis.annotations.Mapper;
7
 import org.apache.ibatis.annotations.Mapper;
6
 import org.apache.ibatis.annotations.Param;
8
 import org.apache.ibatis.annotations.Param;
7
 
9
 
10
+import java.util.List;
11
+
8
 /**
12
 /**
9
  * <p>
13
  * <p>
10
  * 报销明细 Mapper 接口
14
  * 报销明细 Mapper 接口
18
 
22
 
19
     int createBatch(@Param("invoiceId") String invoiceId);
23
     int createBatch(@Param("invoiceId") String invoiceId);
20
 
24
 
21
-    TaInvoiceDetail getByPerson(@Param("invoiceId") String invoiceId,@Param("personId") String personId);
25
+    TaInvoiceDetail getByPerson(@Param("invoiceId") String invoiceId, @Param("personId") String personId);
26
+
27
+    List<TaInvoiceDetail> getListByMainId(@Param("invoiceId") String invoiceId);
28
+
29
+    int updatePerson(@Param("invoiceId") String invoiceId, @Param("invoicePersonId") String invoicePersonId, @Param("personId") String personId);
30
+
31
+    IPage<TaInvoiceDetail> getTplPageBy(IPage<TaInvoiceDetail> pg, @Param("invoiceId") String invoiceId);
32
+
33
+    int removeTplById(@Param("id") String id);
34
+
35
+    IPage<TaInvoiceDetail> getPersonPage(IPage<TaInvoiceDetail> page, @Param("invoiceId") String invoiceId, @Param("personName") String personName);
36
+
37
+    TaInvoiceDetail getTplByPerson(@Param("invoiceId") String invoiceId, @Param("invoicePersonId") String invoicePersonId);
22
 }
38
 }

+ 19
- 0
src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceDetailTplMapper.java View File

1
+package com.njyunzhi.invoice.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.njyunzhi.invoice.entity.TaInvoiceDetailTpl;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+/**
9
+ * <p>
10
+ * 报销明细模板 Mapper 接口
11
+ * </p>
12
+ *
13
+ * @author yansen
14
+ * @since 2022-07-04
15
+ */
16
+@Mapper
17
+public interface TaInvoiceDetailTplMapper extends BaseMapper<TaInvoiceDetailTpl> {
18
+    TaInvoiceDetailTpl getByPerson(@Param("invoiceId") String invoiceId, @Param("invoicePersonId") String invoicePersonId);
19
+}

+ 24
- 0
src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceItemMapper.java View File

1
+package com.njyunzhi.invoice.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.njyunzhi.invoice.entity.TaInvoiceItem;
5
+import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
7
+
8
+/**
9
+ * <p>
10
+ * 报销项目模板 Mapper 接口
11
+ * </p>
12
+ *
13
+ * @author yansen
14
+ * @since 2022-07-04
15
+ */
16
+@Mapper
17
+public interface TaInvoiceItemMapper extends BaseMapper<TaInvoiceItem> {
18
+
19
+    int createBatch(@Param("invoiceId") String invoiceId);
20
+
21
+    TaInvoiceItem getByPersonAndName(@Param("invoiceId") String invoiceId,
22
+                                     @Param("invoicePersonId") String invoicePersonId,
23
+                                     @Param("name") String name);
24
+}

+ 2
- 0
src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceItemTplMapper.java View File

3
 import com.njyunzhi.invoice.entity.TaInvoiceItemTpl;
3
 import com.njyunzhi.invoice.entity.TaInvoiceItemTpl;
4
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
 import org.apache.ibatis.annotations.Mapper;
5
 import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
6
 
7
 
7
 /**
8
 /**
8
  * <p>
9
  * <p>
15
 @Mapper
16
 @Mapper
16
 public interface TaInvoiceItemTplMapper extends BaseMapper<TaInvoiceItemTpl> {
17
 public interface TaInvoiceItemTplMapper extends BaseMapper<TaInvoiceItemTpl> {
17
 
18
 
19
+    TaInvoiceItemTpl getByName(@Param("invoiceId") String invoiceId, @Param("name") String name);
18
 }
20
 }

+ 19
- 0
src/main/java/com/njyunzhi/invoice/service/ITaInvoiceDetailService.java View File

1
 package com.njyunzhi.invoice.service;
1
 package com.njyunzhi.invoice.service;
2
 
2
 
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
3
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4
 import com.baomidou.mybatisplus.extension.service.IService;
5
 import com.baomidou.mybatisplus.extension.service.IService;
6
+import com.njyunzhi.invoice.entity.TaInvoiceDetailTpl;
7
+import com.njyunzhi.invoice.entity.TaInvoiceItem;
8
+
9
+import java.util.List;
5
 
10
 
6
 /**
11
 /**
7
  * <p>
12
  * <p>
16
     boolean createBatch(String invoiceId) throws Exception;
21
     boolean createBatch(String invoiceId) throws Exception;
17
 
22
 
18
     TaInvoiceDetail getByPerson(String invoiceId, String personId);
23
     TaInvoiceDetail getByPerson(String invoiceId, String personId);
24
+
25
+    List<TaInvoiceDetail> getListByMainId(String invoiceId);
26
+
27
+    IPage<TaInvoiceDetail> getTplPageBy(IPage<TaInvoiceDetail> pg, String invoiceId);
28
+
29
+    TaInvoiceDetail getTplByPerson(String invoiceId, String invoicePersonId);
30
+
31
+    IPage<TaInvoiceDetail> getPersonPage(IPage<TaInvoiceDetail> page, String invoiceId, String personName);
32
+
33
+    boolean createOrMergeInvoiceDetail(TaInvoiceDetail taInvoiceDetail);
34
+
35
+    boolean createOrUpdateItem(TaInvoiceItem taInvoiceItem) throws Exception;
36
+
37
+    boolean deleteItem(String invoiceId, Integer itemId);
19
 }
38
 }

+ 16
- 0
src/main/java/com/njyunzhi/invoice/service/ITaInvoiceItemService.java View File

1
+package com.njyunzhi.invoice.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.njyunzhi.invoice.entity.TaInvoiceItem;
5
+
6
+/**
7
+ * <p>
8
+ * 报销项目模板 服务类
9
+ * </p>
10
+ *
11
+ * @author yansen
12
+ * @since 2022-07-04
13
+ */
14
+public interface ITaInvoiceItemService extends IService<TaInvoiceItem> {
15
+
16
+}

+ 5
- 0
src/main/java/com/njyunzhi/invoice/service/ITaInvoicePersonService.java View File

1
 package com.njyunzhi.invoice.service;
1
 package com.njyunzhi.invoice.service;
2
 
2
 
3
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
3
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
4
+import com.njyunzhi.invoice.entity.TaPerson;
4
 import org.springframework.web.multipart.MultipartFile;
5
 import org.springframework.web.multipart.MultipartFile;
5
 
6
 
6
 import java.util.List;
7
 import java.util.List;
20
     boolean createNew(TaInvoicePerson taInvoicePerson) throws Exception;
21
     boolean createNew(TaInvoicePerson taInvoicePerson) throws Exception;
21
 
22
 
22
     void batchUpload(String invoiceId, MultipartFile file) throws Exception;
23
     void batchUpload(String invoiceId, MultipartFile file) throws Exception;
24
+
25
+    TaInvoicePerson getByPerson(String invoiceId, String invoicePerson) throws Exception;
26
+
27
+    boolean bind(TaInvoicePerson taInvoicePerson, TaPerson taPerson) throws Exception;
23
 }
28
 }

+ 95
- 3
src/main/java/com/njyunzhi/invoice/service/impl/TaInvoiceDetailServiceImpl.java View File

1
 package com.njyunzhi.invoice.service.impl;
1
 package com.njyunzhi.invoice.service.impl;
2
 
2
 
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
4
+import com.njyunzhi.invoice.common.Constants;
5
+import com.njyunzhi.invoice.common.DateUtils;
3
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
6
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
7
+import com.njyunzhi.invoice.entity.TaInvoiceDetailTpl;
8
+import com.njyunzhi.invoice.entity.TaInvoiceItem;
9
+import com.njyunzhi.invoice.entity.TaInvoiceItemTpl;
4
 import com.njyunzhi.invoice.mapper.TaInvoiceDetailMapper;
10
 import com.njyunzhi.invoice.mapper.TaInvoiceDetailMapper;
11
+import com.njyunzhi.invoice.mapper.TaInvoiceDetailTplMapper;
12
+import com.njyunzhi.invoice.mapper.TaInvoiceItemMapper;
13
+import com.njyunzhi.invoice.mapper.TaInvoiceItemTplMapper;
5
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
14
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
6
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
15
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
16
+import org.springframework.beans.factory.annotation.Autowired;
7
 import org.springframework.stereotype.Service;
17
 import org.springframework.stereotype.Service;
8
 
18
 
9
 import java.util.HashMap;
19
 import java.util.HashMap;
20
+import java.util.List;
21
+import java.util.Map;
10
 
22
 
11
 /**
23
 /**
12
  * <p>
24
  * <p>
19
 @Service
31
 @Service
20
 public class TaInvoiceDetailServiceImpl extends ServiceImpl<TaInvoiceDetailMapper, TaInvoiceDetail> implements ITaInvoiceDetailService {
32
 public class TaInvoiceDetailServiceImpl extends ServiceImpl<TaInvoiceDetailMapper, TaInvoiceDetail> implements ITaInvoiceDetailService {
21
 
33
 
34
+    @Autowired
35
+    TaInvoiceDetailTplMapper taInvoiceDetailTplMapper;
36
+
37
+    @Autowired
38
+    TaInvoiceItemMapper taInvoiceItemMapper;
39
+
40
+    @Autowired
41
+    TaInvoiceItemTplMapper taInvoiceItemTplMapper;
42
+
22
     @Override
43
     @Override
23
     public boolean createBatch(String invoiceId) throws Exception {
44
     public boolean createBatch(String invoiceId) throws Exception {
24
         // 先删除原有数据
45
         // 先删除原有数据
25
-        removeByMap(new HashMap<String, Object>(){{
46
+        Map<String, Object> con = new HashMap<String, Object>(){{
26
             put("invoice_id", invoiceId);
47
             put("invoice_id", invoiceId);
27
-        }});
48
+        }};
49
+        taInvoiceItemMapper.deleteByMap(con);
28
 
50
 
29
-        return baseMapper.createBatch(invoiceId) > 0;
51
+        return taInvoiceItemMapper.createBatch(invoiceId) > 0;
30
     }
52
     }
31
 
53
 
32
     @Override
54
     @Override
33
     public TaInvoiceDetail getByPerson(String invoiceId, String personId) {
55
     public TaInvoiceDetail getByPerson(String invoiceId, String personId) {
34
         return baseMapper.getByPerson(invoiceId, personId);
56
         return baseMapper.getByPerson(invoiceId, personId);
35
     }
57
     }
58
+
59
+    @Override
60
+    public List<TaInvoiceDetail> getListByMainId(String invoiceId) {
61
+        return baseMapper.getListByMainId(invoiceId);
62
+    }
63
+
64
+    @Override
65
+    public IPage<TaInvoiceDetail> getTplPageBy(IPage<TaInvoiceDetail> pg, String invoiceId) {
66
+        return baseMapper.getTplPageBy(pg, invoiceId);
67
+    }
68
+
69
+    @Override
70
+    public TaInvoiceDetail getTplByPerson(String invoiceId, String invoicePersonId) {
71
+        return baseMapper.getTplByPerson(invoiceId, invoicePersonId);
72
+    }
73
+
74
+    @Override
75
+    public IPage<TaInvoiceDetail> getPersonPage(IPage<TaInvoiceDetail> page, String invoiceId, String personName) {
76
+        return baseMapper.getPersonPage(page, invoiceId, personName);
77
+    }
78
+
79
+    @Override
80
+    public boolean createOrMergeInvoiceDetail(TaInvoiceDetail taInvoiceDetail) {
81
+        // 更新报销项目
82
+        for (TaInvoiceItem item : taInvoiceDetail.getItemList()) {
83
+            taInvoiceItemMapper.updateById(item);
84
+        }
85
+
86
+        // 查询原始记录
87
+        TaInvoiceDetail origin = baseMapper.getByPerson(taInvoiceDetail.getInvoiceId(), taInvoiceDetail.getPersonId());
88
+
89
+        // 如果不是新生成, 二次编辑
90
+        if (null != origin) {
91
+            origin.setInvoiceOrgId(taInvoiceDetail.getInvoiceOrgId());
92
+            origin.setInvoiceOrgName(taInvoiceDetail.getInvoiceOrgName());
93
+            origin.setOrgId(taInvoiceDetail.getOrgId());
94
+            origin.setOrgName(taInvoiceDetail.getOrgName());
95
+            origin.setTaxNo(taInvoiceDetail.getTaxNo());
96
+            origin.setAddress(taInvoiceDetail.getAddress());
97
+            origin.setPhone(taInvoiceDetail.getPhone());
98
+            origin.setBankId(taInvoiceDetail.getBankId());
99
+            origin.setBankName(taInvoiceDetail.getBankName());
100
+            origin.setCardNo(taInvoiceDetail.getCardNo());
101
+            origin.setPersonId(taInvoiceDetail.getPersonId());
102
+
103
+            return updateById(origin);
104
+        }
105
+
106
+        // 否则就是全新生成
107
+        return save(taInvoiceDetail);
108
+    }
109
+
110
+    @Override
111
+    public boolean createOrUpdateItem(TaInvoiceItem taInvoiceItem) throws Exception {
112
+        TaInvoiceItem origin = taInvoiceItemMapper.getByPersonAndName(taInvoiceItem.getInvoiceId(), taInvoiceItem.getInvoicePersonId(), taInvoiceItem.getName());
113
+        if (origin != null) {
114
+            origin.setCharge(taInvoiceItem.getCharge());
115
+            return taInvoiceItemMapper.updateById(origin) > 0;
116
+        }
117
+
118
+        taInvoiceItem.setStatus(Constants.STATUS_NORMAL);
119
+        taInvoiceItem.setCreateDate(DateUtils.now());
120
+
121
+        return taInvoiceItemMapper.insert(taInvoiceItem) > 0;
122
+    }
123
+
124
+    @Override
125
+    public boolean deleteItem(String invoiceId, Integer itemId) {
126
+        return taInvoiceItemMapper.deleteById(itemId) > 0;
127
+    }
36
 }
128
 }

+ 20
- 0
src/main/java/com/njyunzhi/invoice/service/impl/TaInvoiceItemServiceImpl.java View File

1
+package com.njyunzhi.invoice.service.impl;
2
+
3
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4
+import com.njyunzhi.invoice.entity.TaInvoiceItem;
5
+import com.njyunzhi.invoice.mapper.TaInvoiceItemMapper;
6
+import com.njyunzhi.invoice.service.ITaInvoiceItemService;
7
+import org.springframework.stereotype.Service;
8
+
9
+/**
10
+ * <p>
11
+ * 报销项目模板 服务实现类
12
+ * </p>
13
+ *
14
+ * @author yansen
15
+ * @since 2022-07-04
16
+ */
17
+@Service
18
+public class TaInvoiceItemServiceImpl extends ServiceImpl<TaInvoiceItemMapper, TaInvoiceItem> implements ITaInvoiceItemService {
19
+
20
+}

+ 41
- 0
src/main/java/com/njyunzhi/invoice/service/impl/TaInvoicePersonServiceImpl.java View File

5
 import com.alibaba.excel.support.ExcelTypeEnum;
5
 import com.alibaba.excel.support.ExcelTypeEnum;
6
 import com.njyunzhi.invoice.common.Constants;
6
 import com.njyunzhi.invoice.common.Constants;
7
 import com.njyunzhi.invoice.common.DateUtils;
7
 import com.njyunzhi.invoice.common.DateUtils;
8
+import com.njyunzhi.invoice.common.StringUtils;
9
+import com.njyunzhi.invoice.entity.TaInvoiceDetail;
8
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
10
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
9
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
11
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
12
+import com.njyunzhi.invoice.entity.TaPerson;
13
+import com.njyunzhi.invoice.mapper.TaInvoiceDetailMapper;
10
 import com.njyunzhi.invoice.mapper.TaInvoiceOrgMapper;
14
 import com.njyunzhi.invoice.mapper.TaInvoiceOrgMapper;
11
 import com.njyunzhi.invoice.mapper.TaInvoicePersonMapper;
15
 import com.njyunzhi.invoice.mapper.TaInvoicePersonMapper;
12
 import com.njyunzhi.invoice.service.ITaInvoicePersonService;
16
 import com.njyunzhi.invoice.service.ITaInvoicePersonService;
31
     @Autowired
35
     @Autowired
32
     TaInvoiceOrgMapper taInvoiceOrgMapper;
36
     TaInvoiceOrgMapper taInvoiceOrgMapper;
33
 
37
 
38
+    @Autowired
39
+    TaInvoiceDetailMapper taInvoiceDetailMapper;
40
+
34
     @Override
41
     @Override
35
     public List<TaInvoicePerson> getByName(String invoiceId, String invoiceOrgId, String name) {
42
     public List<TaInvoicePerson> getByName(String invoiceId, String invoiceOrgId, String name) {
36
         return baseMapper.getByName(invoiceId, invoiceOrgId, name);
43
         return baseMapper.getByName(invoiceId, invoiceOrgId, name);
60
         LocalDateTime now = DateUtils.now();
67
         LocalDateTime now = DateUtils.now();
61
         EasyExcel.read(file.getInputStream(), TaInvoicePerson.class, new PageReadListener<TaInvoicePerson>(list -> {
68
         EasyExcel.read(file.getInputStream(), TaInvoicePerson.class, new PageReadListener<TaInvoicePerson>(list -> {
62
             for(TaInvoicePerson person : list) {
69
             for(TaInvoicePerson person : list) {
70
+                if (StringUtils.isEmpty(person.getOrgName()) || StringUtils.isEmpty(person.getName())) continue;
71
+
72
+                person.setInvoiceId(invoiceId);
63
                 TaInvoiceOrg taInvoiceOrg = taInvoiceOrgMapper.getByInvoiceAndOrgName(invoiceId, person.getOrgName());
73
                 TaInvoiceOrg taInvoiceOrg = taInvoiceOrgMapper.getByInvoiceAndOrgName(invoiceId, person.getOrgName());
64
                 if (null == taInvoiceOrg) {
74
                 if (null == taInvoiceOrg) {
65
                     taInvoiceOrg = createByPerson(person);
75
                     taInvoiceOrg = createByPerson(person);
78
         })).excelType(ExcelTypeEnum.XLSX).sheet().headRowNumber(1).doRead();
88
         })).excelType(ExcelTypeEnum.XLSX).sheet().headRowNumber(1).doRead();
79
     }
89
     }
80
 
90
 
91
+    @Override
92
+    public TaInvoicePerson getByPerson(String invoiceId, String invoicePerson) throws Exception {
93
+        TaInvoicePerson taInvoicePerson = getById(invoicePerson);
94
+        if (null == taInvoicePerson || !taInvoicePerson.getInvoiceId().equals(invoiceId)) {
95
+            return null;
96
+        }
97
+
98
+        return taInvoicePerson;
99
+    }
100
+
101
+    @Override
102
+    public boolean bind(TaInvoicePerson taInvoicePerson, TaPerson taPerson) throws Exception {
103
+        if (null == taInvoicePerson || null == taPerson) return false;
104
+
105
+        boolean bound = taPerson.getPersonId().equals(taInvoicePerson.getPersonId());
106
+        if (bound) return true;
107
+
108
+        if (!StringUtils.isEmpty(taInvoicePerson.getPersonId())) {
109
+            throw new Exception("选择人员已绑定其他人");
110
+        }
111
+
112
+        taInvoicePerson.setPersonId(taPerson.getPersonId());
113
+        updateById(taInvoicePerson);
114
+
115
+        // 如果已经生成明细, 则同步更新明细信息
116
+        taInvoiceDetailMapper.updatePerson(taInvoicePerson.getInvoiceId(), taInvoicePerson.getInvoicePersonId(), taPerson.getPersonId());
117
+
118
+        return true;
119
+    }
120
+
81
     private TaInvoiceOrg createByPerson(TaInvoicePerson taInvoicePerson) {
121
     private TaInvoiceOrg createByPerson(TaInvoicePerson taInvoicePerson) {
82
         TaInvoiceOrg taInvoiceOrg = new TaInvoiceOrg();
122
         TaInvoiceOrg taInvoiceOrg = new TaInvoiceOrg();
123
+        taInvoiceOrg.setInvoiceId(taInvoicePerson.getInvoiceId());
83
         taInvoiceOrg.setName(taInvoicePerson.getOrgName());
124
         taInvoiceOrg.setName(taInvoicePerson.getOrgName());
84
         taInvoiceOrg.setStatus(Constants.STATUS_NORMAL);
125
         taInvoiceOrg.setStatus(Constants.STATUS_NORMAL);
85
         taInvoiceOrg.setCreateDate(DateUtils.now());
126
         taInvoiceOrg.setCreateDate(DateUtils.now());

BIN
src/main/resources/excel/invoice_tpl.xlsx View File


+ 112
- 6
src/main/resources/mapper/TaInvoiceDetailMapper.xml View File

4
 
4
 
5
     <insert id="createBatch">
5
     <insert id="createBatch">
6
 
6
 
7
-        INSERT INTO ta_invoice_detail (
7
+        INSERT INTO ta_invoice_detail_tpl (
8
             `detail_id`,
8
             `detail_id`,
9
             `invoice_id`,
9
             `invoice_id`,
10
             `invoice_person_id`,
10
             `invoice_person_id`,
43
               NULL,
43
               NULL,
44
               NULL,
44
               NULL,
45
               NULL,
45
               NULL,
46
-              s.invoice_item_tpl_id,
47
-              s.`name`,
48
-              s.charge,
46
+              NULL,
47
+              NULL,
48
+              NULL,
49
               NULL,
49
               NULL,
50
               NULL,
50
               NULL,
51
               1,
51
               1,
52
               now( )
52
               now( )
53
         FROM
53
         FROM
54
             ta_invoice_person t
54
             ta_invoice_person t
55
-                INNER JOIN ta_invoice_item_tpl s ON t.invoice_id = s.invoice_id
56
         WHERE
55
         WHERE
57
             t.invoice_id = #{invoiceId}
56
             t.invoice_id = #{invoiceId}
58
           AND t.`status` &gt; -1
57
           AND t.`status` &gt; -1
59
-          AND s.`status` &gt; -1
60
     </insert>
58
     </insert>
59
+    <update id="updatePerson">
60
+        UPDATE ta_invoice_detail t
61
+        SET t.person_id = #{personId}
62
+        WHERE
63
+            t.invoice_id = #{invoiceId}
64
+          AND t.invoice_person_id = #{invoicePersonId}
65
+    </update>
66
+    <delete id="removeTplById">
67
+        DELETE FROM ta_invoice_detail_tpl
68
+        WHERE detail_id = #{id}
69
+    </delete>
61
     <select id="getByPerson" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
70
     <select id="getByPerson" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
62
         SELECT
71
         SELECT
63
             *
72
             *
68
           AND t.person_id = #{personId}
77
           AND t.person_id = #{personId}
69
           AND t.`status` &gt; -1
78
           AND t.`status` &gt; -1
70
     </select>
79
     </select>
80
+    <select id="getListByMainId" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
81
+        SELECT
82
+            t.`detail_id`,
83
+            t.`invoice_id`,
84
+            t.`invoice_person_id`,
85
+            t.`person_id`,
86
+            t.`person_name`,
87
+            t.`invoice_org_id`,
88
+            t.`invoice_org_name`,
89
+            t.`org_id`,
90
+            t.`org_name`,
91
+            t.`tax_no`,
92
+            t.`address`,
93
+            t.`phone`,
94
+            t.`bank_id`,
95
+            t.`bank_name`,
96
+            t.`card_no`,
97
+            s.`invoice_item_id`,
98
+            s.`name` AS item_name,
99
+            s.`charge`,
100
+            s.`merge_remark`,
101
+            s.`stay_remark`,
102
+            t.`status`,
103
+            t.`create_date`
104
+        FROM
105
+            ta_invoice_detail t
106
+                INNER JOIN ta_invoice_item s ON t.invoice_id = s.invoice_id
107
+        WHERE
108
+            t.invoice_id = #{invoiceId}
109
+        ORDER BY
110
+            t.org_name ASC,
111
+            t.person_name ASC,
112
+            s.`name` ASC
113
+    </select>
114
+    <select id="getTplPageBy" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
115
+        SELECT
116
+            t.`invoice_person_id`,
117
+            t.`person_id`,
118
+            t.`invoice_org_id`,
119
+            t.`name` AS `person_name`,
120
+            t.`phone`,
121
+            t.`status`,
122
+            t.`create_date`,
123
+            t.`invoice_id`,
124
+            t.`org_name` AS invoice_org_name,
125
+            s.`invoice_item_id`,
126
+            s.`name` AS item_name,
127
+            s.`charge`
128
+        FROM
129
+            ta_invoice_person t
130
+                INNER JOIN ta_invoice_item s ON t.invoice_person_id = s.invoice_person_id
131
+        WHERE
132
+            t.invoice_id = #{invoiceId}
133
+          AND t.`status` &gt; -1
134
+          AND s.`status` &gt; 1
135
+        ORDER BY
136
+            t.org_name ASC,
137
+            t.`name` ASC,
138
+            s.`name` ASC
139
+    </select>
140
+    <select id="getPersonPage" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
141
+        SELECT
142
+            t.*
143
+        FROM
144
+            ta_invoice_detail t
145
+        WHERE
146
+            t.invoice_id = #{invoiceId}
147
+          <if test="personName != null and personName != ''">
148
+              AND t.person_name LIKE CONCAT( '%', #{personName}, '%' )
149
+          </if>
150
+        GROUP BY
151
+            t.person_id
152
+        ORDER BY
153
+            t.org_name ASC,
154
+            t.person_name ASC
155
+    </select>
156
+    <select id="getTplByPerson" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
157
+        SELECT
158
+            t.`invoice_person_id`,
159
+            t.`person_id`,
160
+            t.`invoice_org_id`,
161
+            t.`name` AS `person_name`,
162
+            t.`phone`,
163
+            t.`status`,
164
+            t.`create_date`,
165
+            t.`invoice_id`,
166
+            t.`org_name` AS invoice_org_name
167
+        FROM
168
+            ta_invoice_person t
169
+        WHERE
170
+            t.invoice_id = #{invoiceId}
171
+          AND t.`invoice_person_id` = #{invoicePersonId}
172
+          AND t.`status` &gt; -1
173
+        ORDER BY
174
+            t.org_name ASC,
175
+            t.`name` ASC
176
+    </select>
71
 </mapper>
177
 </mapper>

+ 14
- 0
src/main/resources/mapper/TaInvoiceDetailTplMapper.xml View File

1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.njyunzhi.invoice.mapper.TaInvoiceDetailTplMapper">
4
+
5
+    <select id="getByPerson" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetailTpl">
6
+        SELECT
7
+            *
8
+        FROM
9
+            ta_invoice_detail_tpl t
10
+        WHERE
11
+            t.invoice_id = #{invoiceId}
12
+          AND t.invoice_person_id = #{invoicePersonId}
13
+    </select>
14
+</mapper>

+ 33
- 0
src/main/resources/mapper/TaInvoiceItemMapper.xml View File

1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.njyunzhi.invoice.mapper.TaInvoiceItemMapper">
4
+
5
+    <insert id="createBatch">
6
+        INSERT INTO ta_invoice_item ( `invoice_person_id`, `invoice_id`, `charge`, `name`, `status`, `create_date` )
7
+        SELECT
8
+            s.`invoice_person_id`,
9
+            t.`invoice_id`,
10
+            t.`charge`,
11
+            t.`name`,
12
+            1,
13
+            now( )
14
+        FROM
15
+            ta_invoice_item_tpl t
16
+            INNER JOIN ta_invoice_person s ON t.invoice_id = s.invoice_id
17
+        WHERE
18
+            t.invoice_id = #{invoiceId}
19
+          AND t.`status` = 1
20
+          AND s.`status` &gt; -1
21
+    </insert>
22
+    <select id="getByPersonAndName" resultType="com.njyunzhi.invoice.entity.TaInvoiceItem">
23
+        SELECT
24
+            *
25
+        FROM
26
+            ta_invoice_item t
27
+        WHERE
28
+            t.invoice_id = #{invoiceId}
29
+          AND t.`invoice_person_id` = #{invoicePersonId}
30
+          AND t.`name` = #{name}
31
+          AND t.`status` = 1
32
+    </select>
33
+</mapper>

+ 10
- 0
src/main/resources/mapper/TaInvoiceItemTplMapper.xml View File

2
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
 <mapper namespace="com.njyunzhi.invoice.mapper.TaInvoiceItemTplMapper">
3
 <mapper namespace="com.njyunzhi.invoice.mapper.TaInvoiceItemTplMapper">
4
 
4
 
5
+    <select id="getByName" resultType="com.njyunzhi.invoice.entity.TaInvoiceItemTpl">
6
+        SELECT
7
+            *
8
+        FROM
9
+            ta_invoice_item_tpl t
10
+        WHERE
11
+            t.invoice_id = #{invoiceId}
12
+          AND t.`name` = #{name}
13
+          AND t.`status` = 1
14
+    </select>
5
 </mapper>
15
 </mapper>