张延森 2 年之前
父節點
當前提交
420a3c4d50
共有 25 個檔案被更改,包括 911 行新增106 行删除
  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. 二進制
      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 查看文件

@@ -15,8 +15,6 @@
15 15
 	<description>发票填报</description>
16 16
 	<properties>
17 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 18
 	</properties>
21 19
 	<dependencies>
22 20
 		<dependency>
@@ -134,14 +132,19 @@
134 132
 						<directory>src/main/resources</directory>
135 133
 						<filtering>true</filtering>
136 134
 						<includes>
137
-							<include>**/*.xlsx</include>
138 135
 							<include>**/*.xml</include>
139
-							<include>**/*.p12</include>
140
-							<include>**/*.pem</include>
141 136
 							<include>application.yml</include>
142 137
 							<include>application-${profileActive}.yml</include>
143 138
 						</includes>
144 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 148
 				</resources>
146 149
 			</build>
147 150
 		</profile>
@@ -192,23 +195,19 @@
192 195
 					<resource>
193 196
 						<directory>src/main/resources</directory>
194 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 203
 					</resource>
200 204
 					<resource>
201 205
 						<directory>src/main/resources</directory>
202
-						<filtering>true</filtering>
203 206
 						<includes>
204 207
 							<include>**/*.xlsx</include>
205
-							<include>**/*.xml</include>
206 208
 							<include>**/*.p12</include>
207 209
 							<include>**/*.pem</include>
208
-							<include>application.yml</include>
209
-							<include>application-${profileActive}.yml</include>
210 210
 						</includes>
211
-						<targetPath>${project.build.directory}/config</targetPath>
212 211
 					</resource>
213 212
 				</resources>
214 213
 			</build>

+ 15
- 0
src/main/java/com/njyunzhi/invoice/common/FileUtil.java 查看文件

@@ -0,0 +1,15 @@
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 查看文件

@@ -0,0 +1,76 @@
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 查看文件

@@ -3,12 +3,8 @@ package com.njyunzhi.invoice.controller;
3 3
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 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 8
 import com.njyunzhi.invoice.service.ITaInvoiceFillService;
13 9
 import io.swagger.annotations.Api;
14 10
 import io.swagger.annotations.ApiOperation;
@@ -22,9 +18,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
22 18
 import org.springframework.web.bind.annotation.RequestMethod;
23 19
 import org.springframework.web.bind.annotation.RequestParam;
24 20
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
25
-import com.njyunzhi.invoice.entity.TaInvoiceDetail;
26 21
 import org.springframework.web.bind.annotation.RestController;
27 22
 
23
+import java.util.HashMap;
24
+import java.util.Map;
25
+
28 26
 /**
29 27
  * <p>
30 28
     * 报销明细 前端控制器
@@ -54,22 +52,18 @@ public class TaInvoiceDetailController extends BaseController {
54 52
      * @param pageSize
55 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 57
     public ResponseBean taInvoiceDetailList(@ApiParam("页码") @RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
60 58
 									 @ApiParam("单页数据量") @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize,
61 59
                                      @ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
62 60
 
63 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 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 67
     @ApiOperation(value="一键生成", notes = "一键生成", httpMethod = "POST", response = ResponseBean.class)
74 68
     public ResponseBean taInvoiceDetailAdd(@ApiParam("班级ID") @PathVariable(value ="invoiceId") String invoiceId) throws Exception{
75 69
 
@@ -80,55 +74,67 @@ public class TaInvoiceDetailController extends BaseController {
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 111
     @ApiOperation(value="H5确认报销单", notes = "H5确认报销单", httpMethod = "PUT", response = ResponseBean.class)
120 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 133
         taInvoiceDetail.setPersonId(taPerson.getPersonId());
128 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 138
             return ResponseBean.error("修改失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
133 139
         }
134 140
     }
@@ -138,43 +144,58 @@ public class TaInvoiceDetailController extends BaseController {
138 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 164
         TaInvoiceFill taInvoiceFill = iTaInvoiceFillService.getById(invoiceId);
147 165
         if (null == taInvoiceFill || taInvoiceFill.getStatus() != Constants.STATUS_NORMAL) {
148 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 查看文件

@@ -1,15 +1,24 @@
1 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 10
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 11
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 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 17
 import io.swagger.annotations.Api;
11 18
 import io.swagger.annotations.ApiOperation;
12 19
 import io.swagger.annotations.ApiParam;
20
+import org.apache.poi.ss.usermodel.Cell;
21
+import org.apache.poi.ss.usermodel.Sheet;
13 22
 import org.slf4j.Logger;
14 23
 import org.slf4j.LoggerFactory;
15 24
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,7 +31,11 @@ import com.njyunzhi.invoice.service.ITaInvoiceFillService;
22 31
 import com.njyunzhi.invoice.entity.TaInvoiceFill;
23 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 37
 import java.util.List;
38
+import java.util.stream.Collectors;
26 39
 
27 40
 /**
28 41
  * <p>
@@ -43,6 +56,11 @@ public class TaInvoiceFillController extends BaseController {
43 56
     @Autowired
44 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,6 +89,39 @@ public class TaInvoiceFillController extends BaseController {
71 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 127
      * @param taInvoiceFill 实体对象
@@ -133,4 +184,16 @@ public class TaInvoiceFillController extends BaseController {
133 184
     public ResponseBean taInvoiceFillGet(@ApiParam("对象ID") @PathVariable String id) throws Exception{
134 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 查看文件

@@ -8,6 +8,7 @@ import com.njyunzhi.invoice.common.Constants;
8 8
 import com.njyunzhi.invoice.common.ResponseBean;
9 9
 import com.njyunzhi.invoice.common.StringUtils;
10 10
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
11
+import com.njyunzhi.invoice.entity.TaPerson;
11 12
 import com.njyunzhi.invoice.service.ITaInvoiceOrgService;
12 13
 import io.swagger.annotations.Api;
13 14
 import io.swagger.annotations.ApiOperation;
@@ -92,6 +93,7 @@ public class TaInvoicePersonController extends BaseController {
92 93
             return ResponseBean.error("保存失败, 请重试", ResponseBean.ERROR_UNAVAILABLE);
93 94
         }
94 95
     }
96
+
95 97
     /**
96 98
      * 批量导入
97 99
      * @return
@@ -111,11 +113,30 @@ public class TaInvoicePersonController extends BaseController {
111 113
     @RequestMapping(value="/admin/invoice/{invoiceId}/person/{id}", method= RequestMethod.DELETE)
112 114
     @ApiOperation(value="删除", notes = "删除", httpMethod = "DELETE", response = ResponseBean.class)
113 115
     public ResponseBean taInvoicePersonDelete(@ApiParam("对象ID") @PathVariable String id) throws Exception{
114
-        if(iTaInvoicePersonService.removeLogicById(id)){
116
+        if (iTaInvoicePersonService.removeLogicById(id)) {
115 117
             return ResponseBean.success("success");
116
-        }else {
118
+        } else {
117 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 查看文件

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

@@ -0,0 +1,113 @@
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 查看文件

@@ -0,0 +1,58 @@
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 查看文件

@@ -30,6 +30,9 @@ public class TaInvoiceOrg implements Serializable {
30 30
     @TableId(value = "invoice_org_id", type = IdType.ASSIGN_UUID)
31 31
     private String invoiceOrgId;
32 32
 
33
+    @ApiModelProperty(value = "班级ID")
34
+    private String invoiceId;
35
+
33 36
     @ApiModelProperty(value = "映射ID")
34 37
     private String orgId;
35 38
 

+ 17
- 1
src/main/java/com/njyunzhi/invoice/mapper/TaInvoiceDetailMapper.java 查看文件

@@ -1,10 +1,14 @@
1 1
 package com.njyunzhi.invoice.mapper;
2 2
 
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
3 4
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4 5
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6
+import com.njyunzhi.invoice.entity.TaInvoiceDetailTpl;
5 7
 import org.apache.ibatis.annotations.Mapper;
6 8
 import org.apache.ibatis.annotations.Param;
7 9
 
10
+import java.util.List;
11
+
8 12
 /**
9 13
  * <p>
10 14
  * 报销明细 Mapper 接口
@@ -18,5 +22,17 @@ public interface TaInvoiceDetailMapper extends BaseMapper<TaInvoiceDetail> {
18 22
 
19 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 查看文件

@@ -0,0 +1,19 @@
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 查看文件

@@ -0,0 +1,24 @@
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 查看文件

@@ -3,6 +3,7 @@ package com.njyunzhi.invoice.mapper;
3 3
 import com.njyunzhi.invoice.entity.TaInvoiceItemTpl;
4 4
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 5
 import org.apache.ibatis.annotations.Mapper;
6
+import org.apache.ibatis.annotations.Param;
6 7
 
7 8
 /**
8 9
  * <p>
@@ -15,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
15 16
 @Mapper
16 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 查看文件

@@ -1,7 +1,12 @@
1 1
 package com.njyunzhi.invoice.service;
2 2
 
3
+import com.baomidou.mybatisplus.core.metadata.IPage;
3 4
 import com.njyunzhi.invoice.entity.TaInvoiceDetail;
4 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 12
  * <p>
@@ -16,4 +21,18 @@ public interface ITaInvoiceDetailService extends IService<TaInvoiceDetail> {
16 21
     boolean createBatch(String invoiceId) throws Exception;
17 22
 
18 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 查看文件

@@ -0,0 +1,16 @@
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 查看文件

@@ -1,6 +1,7 @@
1 1
 package com.njyunzhi.invoice.service;
2 2
 
3 3
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
4
+import com.njyunzhi.invoice.entity.TaPerson;
4 5
 import org.springframework.web.multipart.MultipartFile;
5 6
 
6 7
 import java.util.List;
@@ -20,4 +21,8 @@ public interface ITaInvoicePersonService extends IBaseService<TaInvoicePerson> {
20 21
     boolean createNew(TaInvoicePerson taInvoicePerson) throws Exception;
21 22
 
22 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 查看文件

@@ -1,12 +1,24 @@
1 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 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 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 14
 import com.njyunzhi.invoice.service.ITaInvoiceDetailService;
6 15
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
16
+import org.springframework.beans.factory.annotation.Autowired;
7 17
 import org.springframework.stereotype.Service;
8 18
 
9 19
 import java.util.HashMap;
20
+import java.util.List;
21
+import java.util.Map;
10 22
 
11 23
 /**
12 24
  * <p>
@@ -19,18 +31,98 @@ import java.util.HashMap;
19 31
 @Service
20 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 43
     @Override
23 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 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 54
     @Override
33 55
     public TaInvoiceDetail getByPerson(String invoiceId, String personId) {
34 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 查看文件

@@ -0,0 +1,20 @@
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 查看文件

@@ -5,8 +5,12 @@ import com.alibaba.excel.read.listener.PageReadListener;
5 5
 import com.alibaba.excel.support.ExcelTypeEnum;
6 6
 import com.njyunzhi.invoice.common.Constants;
7 7
 import com.njyunzhi.invoice.common.DateUtils;
8
+import com.njyunzhi.invoice.common.StringUtils;
9
+import com.njyunzhi.invoice.entity.TaInvoiceDetail;
8 10
 import com.njyunzhi.invoice.entity.TaInvoiceOrg;
9 11
 import com.njyunzhi.invoice.entity.TaInvoicePerson;
12
+import com.njyunzhi.invoice.entity.TaPerson;
13
+import com.njyunzhi.invoice.mapper.TaInvoiceDetailMapper;
10 14
 import com.njyunzhi.invoice.mapper.TaInvoiceOrgMapper;
11 15
 import com.njyunzhi.invoice.mapper.TaInvoicePersonMapper;
12 16
 import com.njyunzhi.invoice.service.ITaInvoicePersonService;
@@ -31,6 +35,9 @@ public class TaInvoicePersonServiceImpl extends BaseServiceImpl<TaInvoicePersonM
31 35
     @Autowired
32 36
     TaInvoiceOrgMapper taInvoiceOrgMapper;
33 37
 
38
+    @Autowired
39
+    TaInvoiceDetailMapper taInvoiceDetailMapper;
40
+
34 41
     @Override
35 42
     public List<TaInvoicePerson> getByName(String invoiceId, String invoiceOrgId, String name) {
36 43
         return baseMapper.getByName(invoiceId, invoiceOrgId, name);
@@ -60,6 +67,9 @@ public class TaInvoicePersonServiceImpl extends BaseServiceImpl<TaInvoicePersonM
60 67
         LocalDateTime now = DateUtils.now();
61 68
         EasyExcel.read(file.getInputStream(), TaInvoicePerson.class, new PageReadListener<TaInvoicePerson>(list -> {
62 69
             for(TaInvoicePerson person : list) {
70
+                if (StringUtils.isEmpty(person.getOrgName()) || StringUtils.isEmpty(person.getName())) continue;
71
+
72
+                person.setInvoiceId(invoiceId);
63 73
                 TaInvoiceOrg taInvoiceOrg = taInvoiceOrgMapper.getByInvoiceAndOrgName(invoiceId, person.getOrgName());
64 74
                 if (null == taInvoiceOrg) {
65 75
                     taInvoiceOrg = createByPerson(person);
@@ -78,8 +88,39 @@ public class TaInvoicePersonServiceImpl extends BaseServiceImpl<TaInvoicePersonM
78 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 121
     private TaInvoiceOrg createByPerson(TaInvoicePerson taInvoicePerson) {
82 122
         TaInvoiceOrg taInvoiceOrg = new TaInvoiceOrg();
123
+        taInvoiceOrg.setInvoiceId(taInvoicePerson.getInvoiceId());
83 124
         taInvoiceOrg.setName(taInvoicePerson.getOrgName());
84 125
         taInvoiceOrg.setStatus(Constants.STATUS_NORMAL);
85 126
         taInvoiceOrg.setCreateDate(DateUtils.now());

二進制
src/main/resources/excel/invoice_tpl.xlsx 查看文件


+ 112
- 6
src/main/resources/mapper/TaInvoiceDetailMapper.xml 查看文件

@@ -4,7 +4,7 @@
4 4
 
5 5
     <insert id="createBatch">
6 6
 
7
-        INSERT INTO ta_invoice_detail (
7
+        INSERT INTO ta_invoice_detail_tpl (
8 8
             `detail_id`,
9 9
             `invoice_id`,
10 10
             `invoice_person_id`,
@@ -43,21 +43,30 @@
43 43
               NULL,
44 44
               NULL,
45 45
               NULL,
46
-              s.invoice_item_tpl_id,
47
-              s.`name`,
48
-              s.charge,
46
+              NULL,
47
+              NULL,
48
+              NULL,
49 49
               NULL,
50 50
               NULL,
51 51
               1,
52 52
               now( )
53 53
         FROM
54 54
             ta_invoice_person t
55
-                INNER JOIN ta_invoice_item_tpl s ON t.invoice_id = s.invoice_id
56 55
         WHERE
57 56
             t.invoice_id = #{invoiceId}
58 57
           AND t.`status` &gt; -1
59
-          AND s.`status` &gt; -1
60 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 70
     <select id="getByPerson" resultType="com.njyunzhi.invoice.entity.TaInvoiceDetail">
62 71
         SELECT
63 72
             *
@@ -68,4 +77,101 @@
68 77
           AND t.person_id = #{personId}
69 78
           AND t.`status` &gt; -1
70 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 177
 </mapper>

+ 14
- 0
src/main/resources/mapper/TaInvoiceDetailTplMapper.xml 查看文件

@@ -0,0 +1,14 @@
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 查看文件

@@ -0,0 +1,33 @@
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 查看文件

@@ -2,4 +2,14 @@
2 2
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 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 15
 </mapper>