Commit 4ca0078a9eb5a91b7e6272bc4be77fe35d09e2fd
1 parent
d6ea7c29
入库预约与入库到货
Showing
14 changed files
with
340 additions
and
44 deletions
.idea/compiler.xml
... | ... | @@ -6,8 +6,8 @@ |
6 | 6 | <sourceOutputDir name="target/generated-sources/annotations" /> |
7 | 7 | <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
8 | 8 | <outputRelativeToContentRoot value="true" /> |
9 | - <module name="wms2" /> | |
10 | 9 | <module name="huaheng" /> |
10 | + <module name="wms2" /> | |
11 | 11 | </profile> |
12 | 12 | </annotationProcessing> |
13 | 13 | </component> |
... | ... |
.idea/workspace.xml
... | ... | @@ -2,15 +2,20 @@ |
2 | 2 | <project version="4"> |
3 | 3 | <component name="ChangeListManager"> |
4 | 4 | <list default="true" id="908d8a6f-e3e4-4fdc-b674-e523a3e2b520" name="Default Changelist" comment=""> |
5 | - <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/cycleCountPreference/domain/CycleCountPreference.java" afterDir="false" /> | |
6 | - <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/cycleCountPreference/mapper/CycleCountPreferenceMapper.java" afterDir="false" /> | |
7 | - <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/cycleCountPreference/service/CycleCountPreferenceService.java" afterDir="false" /> | |
8 | - <change afterPath="$PROJECT_DIR$/src/main/resources/mybatis/config/CycleCountPreferenceMapper.xml" afterDir="false" /> | |
5 | + <change afterPath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/reservation.html" afterDir="false" /> | |
6 | + <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" /> | |
9 | 7 | <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> |
10 | - <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowDetailController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowDetailController.java" afterDir="false" /> | |
8 | + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java" afterDir="false" /> | |
11 | 9 | <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/controller/ReceiptDetailController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/controller/ReceiptDetailController.java" afterDir="false" /> |
10 | + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/domain/ReceiptDetail.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/domain/ReceiptDetail.java" afterDir="false" /> | |
12 | 11 | <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java" afterDir="false" /> |
13 | 12 | <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java" afterDir="false" /> |
13 | + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java" afterDir="false" /> | |
14 | + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/domain/ReceiptHeader.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/domain/ReceiptHeader.java" afterDir="false" /> | |
15 | + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java" afterDir="false" /> | |
16 | + <change beforePath="$PROJECT_DIR$/src/main/resources/application-druid.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-druid.properties" afterDir="false" /> | |
17 | + <change beforePath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptDetail/receiptDetail.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptDetail/receiptDetail.html" afterDir="false" /> | |
18 | + <change beforePath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html" afterDir="false" /> | |
14 | 19 | </list> |
15 | 20 | <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> |
16 | 21 | <option name="SHOW_DIALOG" value="false" /> |
... | ... | @@ -108,7 +113,23 @@ |
108 | 113 | </list> |
109 | 114 | </option> |
110 | 115 | </component> |
111 | - <component name="RunManager"> | |
116 | + <component name="RunManager" selected="Spring Boot.HuaHengApplication"> | |
117 | + <configuration name="test.test" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> | |
118 | + <module name="huaheng" /> | |
119 | + <extension name="coverage"> | |
120 | + <pattern> | |
121 | + <option name="PATTERN" value="com.huaheng.test.*" /> | |
122 | + <option name="ENABLED" value="true" /> | |
123 | + </pattern> | |
124 | + </extension> | |
125 | + <option name="PACKAGE_NAME" value="com.huaheng.test" /> | |
126 | + <option name="MAIN_CLASS_NAME" value="com.huaheng.test.test" /> | |
127 | + <option name="METHOD_NAME" value="test" /> | |
128 | + <option name="TEST_OBJECT" value="method" /> | |
129 | + <method v="2"> | |
130 | + <option name="Make" enabled="true" /> | |
131 | + </method> | |
132 | + </configuration> | |
112 | 133 | <configuration name="HuaHengApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot"> |
113 | 134 | <module name="huaheng" /> |
114 | 135 | <option name="SPRING_BOOT_MAIN_CLASS" value="com.huaheng.HuaHengApplication" /> |
... | ... | @@ -119,6 +140,11 @@ |
119 | 140 | <option name="Make" enabled="true" /> |
120 | 141 | </method> |
121 | 142 | </configuration> |
143 | + <recent_temporary> | |
144 | + <list> | |
145 | + <item itemvalue="JUnit.test.test" /> | |
146 | + </list> | |
147 | + </recent_temporary> | |
122 | 148 | </component> |
123 | 149 | <component name="ServiceViewManager"> |
124 | 150 | <option name="allServicesViewState"> |
... | ... | @@ -128,12 +154,12 @@ |
128 | 154 | <expand> |
129 | 155 | <path> |
130 | 156 | <item name="services root" type="e789fda9:ObjectUtils$Sentinel" /> |
131 | - <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@38017b80" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
157 | + <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@b9e1b2d7" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
132 | 158 | </path> |
133 | 159 | <path> |
134 | 160 | <item name="services root" type="e789fda9:ObjectUtils$Sentinel" /> |
135 | - <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@38017b80" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
136 | - <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@84e6ec8e" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
161 | + <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@b9e1b2d7" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
162 | + <item name="com.intellij.execution.services.ServiceModel$ServiceGroupNode@67b24c63" type="7427dc5b:ServiceModel$ServiceGroupNode" /> | |
137 | 163 | </path> |
138 | 164 | </expand> |
139 | 165 | <select /> |
... | ... | @@ -154,7 +180,8 @@ |
154 | 180 | <workItem from="1566977678336" duration="306000" /> |
155 | 181 | <workItem from="1566978429560" duration="9246000" /> |
156 | 182 | <workItem from="1567038752582" duration="12361000" /> |
157 | - <workItem from="1567057373550" duration="9107000" /> | |
183 | + <workItem from="1567057373550" duration="15293000" /> | |
184 | + <workItem from="1567125196953" duration="16752000" /> | |
158 | 185 | </task> |
159 | 186 | <task id="LOCAL-00001" summary="入库单添加时添加流程标记,审核入库单"> |
160 | 187 | <created>1566983055587</created> |
... | ... | @@ -198,7 +225,21 @@ |
198 | 225 | <option name="project" value="LOCAL" /> |
199 | 226 | <updated>1567065196899</updated> |
200 | 227 | </task> |
201 | - <option name="localTasksCounter" value="7" /> | |
228 | + <task id="LOCAL-00007" summary="自动生成盘点首选项表"> | |
229 | + <created>1567068662565</created> | |
230 | + <option name="number" value="00007" /> | |
231 | + <option name="presentableId" value="LOCAL-00007" /> | |
232 | + <option name="project" value="LOCAL" /> | |
233 | + <updated>1567068662565</updated> | |
234 | + </task> | |
235 | + <task id="LOCAL-00008" summary="添加逻辑删除配置"> | |
236 | + <created>1567069834248</created> | |
237 | + <option name="number" value="00008" /> | |
238 | + <option name="presentableId" value="LOCAL-00008" /> | |
239 | + <option name="project" value="LOCAL" /> | |
240 | + <updated>1567069834248</updated> | |
241 | + </task> | |
242 | + <option name="localTasksCounter" value="9" /> | |
202 | 243 | <servers /> |
203 | 244 | </component> |
204 | 245 | <component name="TypeScriptGeneratedFilesManager"> |
... | ... | @@ -240,7 +281,9 @@ |
240 | 281 | <MESSAGE value="添加物料类别" /> |
241 | 282 | <MESSAGE value="添加系统参数配置" /> |
242 | 283 | <MESSAGE value="删除入库单" /> |
243 | - <option name="LAST_COMMIT_MESSAGE" value="删除入库单" /> | |
284 | + <MESSAGE value="自动生成盘点首选项表" /> | |
285 | + <MESSAGE value="添加逻辑删除配置" /> | |
286 | + <option name="LAST_COMMIT_MESSAGE" value="添加逻辑删除配置" /> | |
244 | 287 | </component> |
245 | 288 | <component name="XDebuggerManager"> |
246 | 289 | <breakpoint-manager> |
... | ... | @@ -250,30 +293,40 @@ |
250 | 293 | <line>5</line> |
251 | 294 | <option name="timeStamp" value="1" /> |
252 | 295 | </line-breakpoint> |
253 | - <line-breakpoint enabled="true" type="java-line"> | |
296 | + <line-breakpoint type="java-line"> | |
254 | 297 | <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/statusFlow/controller/StatusFlowDetailController.java</url> |
255 | 298 | <line>60</line> |
256 | 299 | <option name="timeStamp" value="4" /> |
257 | 300 | </line-breakpoint> |
258 | 301 | <line-breakpoint enabled="true" type="java-line"> |
259 | 302 | <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/service/ReceiptHeaderHistoryService.java</url> |
260 | - <line>80</line> | |
261 | - <option name="timeStamp" value="7" /> | |
303 | + <line>49</line> | |
304 | + <option name="timeStamp" value="16" /> | |
262 | 305 | </line-breakpoint> |
263 | 306 | <line-breakpoint enabled="true" type="java-line"> |
264 | - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/controller/ReceiptDetailController.java</url> | |
265 | - <line>171</line> | |
266 | - <option name="timeStamp" value="8" /> | |
307 | + <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java</url> | |
308 | + <line>216</line> | |
309 | + <option name="timeStamp" value="19" /> | |
267 | 310 | </line-breakpoint> |
268 | 311 | <line-breakpoint enabled="true" type="java-line"> |
269 | 312 | <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java</url> |
270 | - <line>84</line> | |
271 | - <option name="timeStamp" value="10" /> | |
313 | + <line>241</line> | |
314 | + <option name="timeStamp" value="20" /> | |
272 | 315 | </line-breakpoint> |
273 | 316 | <line-breakpoint enabled="true" type="java-line"> |
274 | 317 | <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java</url> |
275 | - <line>150</line> | |
276 | - <option name="timeStamp" value="11" /> | |
318 | + <line>163</line> | |
319 | + <option name="timeStamp" value="22" /> | |
320 | + </line-breakpoint> | |
321 | + <line-breakpoint enabled="true" type="java-line"> | |
322 | + <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java</url> | |
323 | + <line>181</line> | |
324 | + <option name="timeStamp" value="23" /> | |
325 | + </line-breakpoint> | |
326 | + <line-breakpoint enabled="true" type="java-line"> | |
327 | + <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java</url> | |
328 | + <line>92</line> | |
329 | + <option name="timeStamp" value="24" /> | |
277 | 330 | </line-breakpoint> |
278 | 331 | </breakpoints> |
279 | 332 | </breakpoint-manager> |
... | ... |
src/main/java/com/huaheng/pc/config/receiptPreference/controller/ReceiptPreferenceController.java
... | ... | @@ -43,7 +43,7 @@ public class ReceiptPreferenceController extends BaseController { |
43 | 43 | return prefix + "/receiptPreference"; |
44 | 44 | } |
45 | 45 | |
46 | - @ApiOperation(value="查看入库首选项", notes="根据首选项编码、名称、入库流程、 入库类型、创建时间查询入库首选项", httpMethod = "POST") | |
46 | + //@ApiOperation(value="查看入库首选项", notes="根据首选项编码、名称、入库流程、 入库类型、创建时间查询入库首选项", httpMethod = "POST") | |
47 | 47 | @RequiresPermissions("config:receiptPreference:list") |
48 | 48 | @Log(title = "通用-入库首选项", operating = "查看入库首选项列表", action = BusinessType.GRANT) |
49 | 49 | @PostMapping("/list") |
... | ... |
src/main/java/com/huaheng/pc/receipt/receiptDetail/controller/ReceiptDetailController.java
... | ... | @@ -179,11 +179,15 @@ public class ReceiptDetailController extends BaseController { |
179 | 179 | receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); |
180 | 180 | if (receiptDetailService.updateById(receiptDetail)){ |
181 | 181 | ReceiptDetail newReceiptDetail = receiptDetailService.getById(id); |
182 | + | |
183 | + //更新入库明细状态 | |
182 | 184 | receiptDetailService.updateById(receiptDetailService.queryflow(newReceiptDetail)); |
183 | 185 | ReceiptHeader receiptHeader = new ReceiptHeader(); |
184 | 186 | receiptHeader.setFirstStatus(approval); |
185 | 187 | receiptHeader.setId(newReceiptDetail.getReceiptId()); |
186 | 188 | receiptHeaderService.updateById(receiptHeader); |
189 | + //更新头表尾状态 | |
190 | + receiptDetailService.updateReceiptHeaderLastStatus(newReceiptDetail.getReceiptId()); | |
187 | 191 | } else { |
188 | 192 | throw new ServiceException("审核失败"); |
189 | 193 | } |
... | ... | @@ -191,4 +195,22 @@ public class ReceiptDetailController extends BaseController { |
191 | 195 | |
192 | 196 | return AjaxResult.success("审核成功"); |
193 | 197 | } |
198 | + | |
199 | + /** | |
200 | + * 到货入库单 | |
201 | + */ | |
202 | + @ApiOperation(value="入库单到货", notes="入库单到货", httpMethod = "POST") | |
203 | + @RequiresPermissions("receipt:receiptDetail:arrival") | |
204 | + @Log(title = "入库-入库单 ",operating = "入库单到货", action = BusinessType.UPDATE) | |
205 | + @PostMapping("/arrival") | |
206 | + @ResponseBody | |
207 | + public AjaxResult arrival(@ApiParam(name = "id", value = "id字符串")String ids){ | |
208 | + if (StringUtils.isEmpty(ids)){ | |
209 | + return AjaxResult.error("id为空"); | |
210 | + } | |
211 | + for (Integer id : Convert.toIntArray(ids)){ | |
212 | + receiptHeaderService.arrival(id); | |
213 | + } | |
214 | + return AjaxResult.success("已到货"); | |
215 | + } | |
194 | 216 | } |
... | ... |
src/main/java/com/huaheng/pc/receipt/receiptDetail/domain/ReceiptDetail.java
src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java
src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java
... | ... | @@ -17,6 +17,8 @@ import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail; |
17 | 17 | import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService; |
18 | 18 | import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; |
19 | 19 | import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; |
20 | +import com.huaheng.pc.system.dict.domain.DictData; | |
21 | +import com.huaheng.pc.system.dict.service.IDictDataService; | |
20 | 22 | import org.aspectj.weaver.loadtime.Aj; |
21 | 23 | import org.springframework.stereotype.Service; |
22 | 24 | import javax.annotation.Resource; |
... | ... | @@ -42,6 +44,8 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
42 | 44 | private MaterialTypeService materialTypeService; |
43 | 45 | @Resource |
44 | 46 | private ReceiptPreferenceService receiptPreferenceService; |
47 | + @Resource | |
48 | + private IDictDataService dictDataService; | |
45 | 49 | |
46 | 50 | /** |
47 | 51 | * 新增入库明细 |
... | ... | @@ -120,7 +124,7 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
120 | 124 | receiptDetail.setMaterialName(material.getName()); |
121 | 125 | receiptDetail.setMaterialSpec(material.getSpec()); |
122 | 126 | receiptDetail.setMaterialUnit(material.getUnit()); |
123 | - | |
127 | + receiptDetail.setProcessStamp("0"); | |
124 | 128 | receiptHeader.setTotalQty(receiptHeader.getTotalQty()-originalReceiptDetail.getTotalQty()); |
125 | 129 | receiptHeader.setTotalLines(receiptHeader.getTotalLines()-1); |
126 | 130 | if ( !receiptHeaderService.updateById(receiptHeader)){ |
... | ... | @@ -129,10 +133,15 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
129 | 133 | } |
130 | 134 | } |
131 | 135 | |
136 | + //如果单据状态为驳回则设置状态为提交审核 | |
137 | + if ("10".equals(receiptDetail.getProcessStamp())){ | |
138 | + receiptDetail.setProcessStamp("5"); | |
139 | + } | |
132 | 140 | receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); |
133 | 141 | if ( !this.updateById(receiptDetail) ){ |
134 | 142 | return AjaxResult.error("入库明细更新失败"); |
135 | 143 | } else { |
144 | + | |
136 | 145 | receiptHeader.setTotalQty(receiptHeader.getTotalQty()+receiptDetail.getTotalQty()); |
137 | 146 | receiptHeader.setTotalLines(receiptHeader.getTotalLines()+1); |
138 | 147 | receiptHeaderService.updateById(receiptHeader); |
... | ... | @@ -147,6 +156,10 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
147 | 156 | */ |
148 | 157 | public ReceiptDetail queryflow(ReceiptDetail receiptDetail){ |
149 | 158 | |
159 | + if ("10".equals(receiptDetail.getProcessStamp()) || "20".equals(receiptDetail.getProcessStamp())){ | |
160 | + return receiptDetail; | |
161 | + } | |
162 | + | |
150 | 163 | //查询头表信息 |
151 | 164 | LambdaQueryWrapper<ReceiptHeader> lambdaReceiptHeader = Wrappers.lambdaQuery(); |
152 | 165 | lambdaReceiptHeader.eq(ReceiptHeader::getCode, receiptDetail.getReceiptCode()); |
... | ... | @@ -161,6 +174,8 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
161 | 174 | LambdaQueryWrapper<ReceiptType> lambdaReceiptType = Wrappers.lambdaQuery(); |
162 | 175 | lambdaReceiptType.eq(ReceiptType::getCode, receiptHeader.getReceiptType()); |
163 | 176 | ReceiptType receiptType = receiptTypeService.getOne(lambdaReceiptType); |
177 | + | |
178 | + | |
164 | 179 | if (receiptType.getReceiptFlow() != null){ |
165 | 180 | //物料是否有入库流程 |
166 | 181 | List<StatusFlowDetail> statusFlowDetails = statusFlowDetailService.queryStatusFlowDetail(receiptType.getReceiptFlow()); |
... | ... | @@ -196,7 +211,9 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
196 | 211 | } |
197 | 212 | } |
198 | 213 | |
214 | + //获取配置流程中下一状态 | |
199 | 215 | public String nextStatusFlow(List<StatusFlowDetail> statusFlowDetails, String status){ |
216 | + //判断当前状态是否为最后状态,若为最后状态返回当前状态 | |
200 | 217 | if (status.equals(statusFlowDetails.get(statusFlowDetails.size()-1).getFlowCode())){ |
201 | 218 | return status; |
202 | 219 | } else { |
... | ... | @@ -208,4 +225,44 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R |
208 | 225 | return status; |
209 | 226 | } |
210 | 227 | } |
228 | + | |
229 | + /** | |
230 | + * @description 更新头表尾状态 | |
231 | + * 每次明细表更新后调用该方法 | |
232 | + * 当所有明细表到达该状态时,更新头表状态 | |
233 | + * @param id 头表id | |
234 | + */ | |
235 | + public void updateReceiptHeaderLastStatus(Integer id){ | |
236 | + LambdaQueryWrapper<ReceiptDetail> lambdaDetails = Wrappers.lambdaQuery(); | |
237 | + lambdaDetails.eq(ReceiptDetail::getReceiptId, id); | |
238 | + List<ReceiptDetail> receiptDetails = this.list(lambdaDetails); | |
239 | + | |
240 | + //查询出头表信息 | |
241 | + ReceiptHeader receiptHeader = receiptHeaderService.getById(id); | |
242 | + Integer minStatus = Integer.parseInt(receiptDetails.get(0).getProcessStamp()); | |
243 | + //遍历明细状态得出最小状态值 | |
244 | + for (int i = 1; i<receiptDetails.size(); i++){ | |
245 | + if ( minStatus > Integer.parseInt(receiptDetails.get(1).getProcessStamp())) { | |
246 | + minStatus = Integer.parseInt(receiptDetails.get(1).getProcessStamp()); | |
247 | + } | |
248 | + } | |
249 | + | |
250 | + //从数据子典中获取单据当前状态 | |
251 | + List<DictData> dictData = dictDataService.selectDictDataByType("receiptHeaderStatus"); | |
252 | + for (int i = 0; i<dictData.size(); i++){ | |
253 | + if (dictData.get(i).getDictValue().equals(minStatus)){ | |
254 | + minStatus = Integer.valueOf(dictData.get(i-1).getDictValue()); | |
255 | + } | |
256 | + } | |
257 | + | |
258 | + //若更新状态值小于头状态,更新尾状态否则更新头尾状态 | |
259 | + if (minStatus < receiptHeader.getFirstStatus()){ | |
260 | + receiptHeader.setLastStatus(minStatus); | |
261 | + } else { | |
262 | + receiptHeader.setFirstStatus(minStatus); | |
263 | + receiptHeader.setLastStatus(minStatus); | |
264 | + receiptHeaderService.updateById(receiptHeader); | |
265 | + } | |
266 | + | |
267 | + } | |
211 | 268 | } |
... | ... |
src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java
... | ... | @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | 4 | import com.baomidou.mybatisplus.core.metadata.IPage; |
5 | 5 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
6 | 6 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
7 | +import com.huaheng.common.exception.service.ServiceException; | |
7 | 8 | import com.huaheng.common.support.Convert; |
8 | 9 | import com.huaheng.common.utils.StringUtils; |
9 | 10 | import com.huaheng.common.utils.security.ShiroUtils; |
... | ... | @@ -14,6 +15,8 @@ import com.huaheng.framework.web.domain.AjaxResult; |
14 | 15 | import com.huaheng.framework.web.page.PageDomain; |
15 | 16 | import com.huaheng.framework.web.page.TableDataInfo; |
16 | 17 | import com.huaheng.framework.web.page.TableSupport; |
18 | +import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; | |
19 | +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; | |
17 | 20 | import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; |
18 | 21 | import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; |
19 | 22 | import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory; |
... | ... | @@ -22,6 +25,7 @@ import io.swagger.annotations.Api; |
22 | 25 | import io.swagger.annotations.ApiModel; |
23 | 26 | import io.swagger.annotations.ApiOperation; |
24 | 27 | import io.swagger.annotations.ApiParam; |
28 | +import org.apache.ibatis.javassist.compiler.ast.ASTree; | |
25 | 29 | import org.apache.shiro.authz.annotation.RequiresPermissions; |
26 | 30 | import org.springframework.stereotype.Controller; |
27 | 31 | import org.springframework.ui.ModelMap; |
... | ... | @@ -42,6 +46,8 @@ public class ReceiptHeaderController extends BaseController { |
42 | 46 | private ReceiptHeaderService receiptHeaderService; |
43 | 47 | @Resource |
44 | 48 | private ReceiptHeaderHistoryService receiptHeaderHistoryService; |
49 | + @Resource | |
50 | + private ReceiptDetailService receiptDetailService; | |
45 | 51 | |
46 | 52 | @RequiresPermissions("receipt:receiptHeader:view") |
47 | 53 | @GetMapping() |
... | ... | @@ -173,9 +179,9 @@ public class ReceiptHeaderController extends BaseController { |
173 | 179 | /** |
174 | 180 | * 删除入库单 |
175 | 181 | */ |
176 | - @ApiOperation(value="提交审核入库单", notes="提交审核入库单", httpMethod = "POST") | |
182 | + @ApiOperation(value="删除入库单", notes="删除入库单", httpMethod = "POST") | |
177 | 183 | @RequiresPermissions("receipt:receiptHeader:remove") |
178 | - @Log(title = "入库-入库单 ",operating = "提交审核入库单 ", action = BusinessType.UPDATE) | |
184 | + @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE) | |
179 | 185 | @PostMapping("/remove") |
180 | 186 | @ResponseBody |
181 | 187 | public AjaxResult remove(@ApiParam(name = "id", value = "入库头表id字符串")Integer ids){ |
... | ... | @@ -184,4 +190,33 @@ public class ReceiptHeaderController extends BaseController { |
184 | 190 | } |
185 | 191 | return receiptHeaderHistoryService.add(ids); |
186 | 192 | } |
193 | + | |
194 | + /** | |
195 | + * 入库预约 | |
196 | + */ | |
197 | + @GetMapping("/arrival/{id}") | |
198 | + public String reservation(@PathVariable("id")Integer id, ModelMap map) { | |
199 | + LambdaQueryWrapper<ReceiptDetail> receiptDetailLambda = Wrappers.lambdaQuery(); | |
200 | + receiptDetailLambda.eq(ReceiptDetail::getReceiptId, id) | |
201 | + .eq(ReceiptDetail::getProcessStamp, "120"); | |
202 | + List<ReceiptDetail> list = receiptDetailService.list(receiptDetailLambda); | |
203 | + if (list == null){ | |
204 | + throw new ServiceException("没有需要预约入库的单据"); | |
205 | + } | |
206 | + ReceiptHeader receiptHeader = receiptHeaderService.getById(id); | |
207 | + map.put("receiptHeader", receiptHeader); | |
208 | + return prefix + "/reservation"; | |
209 | + } | |
210 | + | |
211 | + /** | |
212 | + * 保存入库预约 | |
213 | + */ | |
214 | + @ApiOperation(value="保存入库预约", notes="保存入库预约", httpMethod = "POST") | |
215 | + @RequiresPermissions("receipt:receiptHeader:reservation") | |
216 | + @Log(title = "入库-入库单 ",operating = "入库单到货", action = BusinessType.UPDATE) | |
217 | + @PostMapping("/arrival") | |
218 | + @ResponseBody | |
219 | + public AjaxResult reservation(ReceiptHeader receiptHeader) { | |
220 | + return receiptHeaderService.reservation(receiptHeader); | |
221 | + } | |
187 | 222 | } |
... | ... |
src/main/java/com/huaheng/pc/receipt/receiptHeader/domain/ReceiptHeader.java
src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
... | ... | @@ -10,11 +10,15 @@ import com.huaheng.pc.config.receiptType.domain.ReceiptType; |
10 | 10 | import com.huaheng.pc.config.receiptType.service.ReceiptTypeService; |
11 | 11 | import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail; |
12 | 12 | import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService; |
13 | +import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; | |
14 | +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; | |
15 | +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailServiceImpl; | |
13 | 16 | import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; |
14 | 17 | import com.huaheng.pc.receipt.receiptHeader.mapper.ReceiptHeaderMapper; |
15 | 18 | import org.springframework.stereotype.Service; |
16 | 19 | |
17 | 20 | import javax.annotation.Resource; |
21 | +import java.lang.ref.WeakReference; | |
18 | 22 | import java.text.SimpleDateFormat; |
19 | 23 | import java.util.Date; |
20 | 24 | import java.util.List; |
... | ... | @@ -26,6 +30,8 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei |
26 | 30 | private ReceiptTypeService receiptTypeService; |
27 | 31 | @Resource |
28 | 32 | private StatusFlowDetailService statusFlowDetailService; |
33 | + @Resource | |
34 | + private ReceiptDetailService receiptDetailService; | |
29 | 35 | |
30 | 36 | public AjaxResult saveReceiptHeader(ReceiptHeader receiptHeader){ |
31 | 37 | LambdaQueryWrapper<ReceiptType> lambdaQueryWrapper = Wrappers.lambdaQuery(); |
... | ... | @@ -71,4 +77,47 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei |
71 | 77 | } |
72 | 78 | return code; |
73 | 79 | } |
80 | + | |
81 | + /** | |
82 | + * 入库预约 | |
83 | + * @param receiptHeader | |
84 | + * @return | |
85 | + */ | |
86 | + public AjaxResult reservation(ReceiptHeader receiptHeader) { | |
87 | + LambdaQueryWrapper<ReceiptDetail> receiptDetailLambda = Wrappers.lambdaQuery(); | |
88 | + receiptDetailLambda.eq(ReceiptDetail::getReceiptId, receiptHeader.getId()) | |
89 | + .eq(ReceiptDetail::getProcessStamp, "120"); | |
90 | + List<ReceiptDetail> receiptDetails = receiptDetailService.list(receiptDetailLambda); | |
91 | + //更新入库明细流程 | |
92 | + for (ReceiptDetail receiptDetail : receiptDetails) { | |
93 | + receiptDetail = receiptDetailService.queryflow(receiptDetail); | |
94 | + receiptDetailService.updateById(receiptDetail); | |
95 | + } | |
96 | + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | |
97 | + //更新入库单预约时间 | |
98 | + if (!this.updateById(receiptHeader)){ | |
99 | + throw new ServiceException("更新入库单预约时间失败"); | |
100 | + } | |
101 | + receiptDetailService.updateReceiptHeaderLastStatus(receiptHeader.getId()); | |
102 | + return AjaxResult.success("预约成功"); | |
103 | + } | |
104 | + | |
105 | + /** | |
106 | + * 入库到货 | |
107 | + * @param id | |
108 | + * @return | |
109 | + */ | |
110 | + public AjaxResult arrival(Integer id) { | |
111 | + LambdaQueryWrapper<ReceiptDetail> receiptDetailLambda = Wrappers.lambdaQuery(); | |
112 | + receiptDetailLambda.eq(ReceiptDetail::getReceiptId, id) | |
113 | + .eq(ReceiptDetail::getProcessStamp, "150"); | |
114 | + List<ReceiptDetail> receiptDetails = receiptDetailService.list(receiptDetailLambda); | |
115 | + //更新入库明细流程 | |
116 | + for (ReceiptDetail receiptDetail : receiptDetails) { | |
117 | + receiptDetailService.queryflow(receiptDetail); | |
118 | + } | |
119 | + //更新入库单 | |
120 | + receiptDetailService.updateReceiptHeaderLastStatus(id); | |
121 | + return AjaxResult.success("预约成功"); | |
122 | + } | |
74 | 123 | } |
... | ... |
src/main/resources/application-druid.properties
1 | -# 数据源配置 | |
1 | +# \u6570\u636E\u6E90\u914D\u7F6E | |
2 | 2 | spring.datasource.type=com.alibaba.druid.pool.DruidDataSource |
3 | 3 | spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver |
4 | -# 主库 | |
5 | -spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | |
4 | +# \u4E3B\u5E93 | |
5 | +#spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | |
6 | 6 | #spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huahengExample?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false |
7 | -#spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huaheng?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | |
7 | +spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms2.0?characterEncoding=utf8&serverTimezone=GMT%2b8 | |
8 | 8 | |
9 | -#spring.datasource.druid.master.url=jdbc:mysql://172.16.2.8:3306/kshuahengtest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | |
10 | -#spring.datasource.druid.master.url=jdbc:mysql://172.16.2.8:3306/kshuaheng?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false | |
11 | - | |
12 | -spring.datasource.druid.master.username=softhuaheng | |
13 | -spring.datasource.druid.master.password=HHrobot123. | |
14 | -# 从库 | |
9 | +#spring.datasource.druid.master.username=softhuaheng | |
10 | +#spring.datasource.druid.master.password=HHrobot123. | |
11 | +spring.datasource.druid.master.username=root | |
12 | +spring.datasource.druid.master.password=123456 | |
13 | +# \u4ECE\u5E93 | |
15 | 14 | #spring.datasource.druid.slave.open = true |
16 | 15 | #spring.datasource.druid.slave.url=jdbc:mysql://172.16.29.45:3306/huaheng?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false |
17 | 16 | #spring.datasource.druid.master.username=softhuaheng |
18 | 17 | #spring.datasource.druid.master.password=HHrobot123. |
19 | -# 初始连接数 | |
18 | +# \u521D\u59CB\u8FDE\u63A5\u6570 | |
20 | 19 | spring.datasource.druid.initial-size=10 |
21 | 20 | # \u6700\u5927\u8FDE\u63A5\u6C60\u6570\u91CF |
22 | 21 | spring.datasource.druid.max-active=100 |
... | ... |
src/main/resources/templates/receipt/receiptDetail/receiptDetail.html
... | ... | @@ -37,6 +37,9 @@ |
37 | 37 | <a class="btn btn-outline btn-success btn-rounded" onclick="add()" shiro:hasPermission="receipt:receiptDetail:add"> |
38 | 38 | <i class="fa fa-plus"></i> 新增 |
39 | 39 | </a> |
40 | + <a class="btn btn-outline btn-success btn-rounded" onclick="add()" shiro:hasPermission="receipt:receiptDetail:add"> | |
41 | + <i class="fa fa-plus"></i> 到货 | |
42 | + </a> | |
40 | 43 | <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="receipt:receiptDetail:remove"> |
41 | 44 | <i class="fa fa-trash-o"></i> 删除 |
42 | 45 | </a> |
... | ... | @@ -224,8 +227,13 @@ |
224 | 227 | actions.push('<a class="btn btn-warning btn-xs ' + approvalFlag + '" href="#" onclick="approval(\'' + row.id + '\',\''+10+'\')">驳回</a>'); |
225 | 228 | actions.push('<a class="btn btn-danger btn-xs ' + approvalFlag + '" href="#" onclick="approval(\'' + row.id + '\',\''+20+'\')">作废</a>'); |
226 | 229 | } |
227 | - actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> '); | |
228 | - actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>'); | |
230 | + if (row.processStamp < 100){ | |
231 | + actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> '); | |
232 | + actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>'); | |
233 | + } | |
234 | + if (row.processStamp >100 && row.processStamp < 200){ | |
235 | + actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>到货</a> '); | |
236 | + } | |
229 | 237 | return actions.join(''); |
230 | 238 | } |
231 | 239 | }] |
... | ... |
src/main/resources/templates/receipt/receiptHeader/receiptHeader.html
... | ... | @@ -269,10 +269,17 @@ |
269 | 269 | actions.push('<a style="background: #b5bdc0" class="btn btn-default btn-xs" onclick="Toreceiving(\''+ row.code + '\')"><i class="fa fa-list-ul"></i>列表</a> '); |
270 | 270 | if (row.firstStatus < 100) |
271 | 271 | actions.push('<a class="btn btn-info btn-xs ' + editFlag + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')" ><i class="fa fa-edit"></i>编辑</a> '); |
272 | - if (row.lastStatus < 200) | |
272 | + if ((row.firstStatus >= 100 && row.firstStatus < 200) | (row.lastStatus >= 100 && row.firstStatus < 200)){ | |
273 | + actions.push('<a class="btn btn-info btn-xs ' + editFlag + '" href="#" onclick="arrival(\'' + row.id + '\')" ><i class="fa fa-edit"></i>入库预约</a> '); | |
274 | + } | |
275 | + if (row.lastStatus < 200){ | |
273 | 276 | actions.push('<a class="btn btn-primary btn-xs to-receive" ' +addFlag+ ' onclick="Toreceiving(\''+ row.code + '\')"><i class="fa fa-cart-plus"></i>收货</a> '); |
274 | - | |
275 | 277 | actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>'); |
278 | + } | |
279 | + if (row.lastStatus >= 900){ | |
280 | + actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-trash-o"></i>删除</a>'); | |
281 | + } | |
282 | + | |
276 | 283 | return actions.join(''); |
277 | 284 | } |
278 | 285 | }] |
... | ... | @@ -295,6 +302,11 @@ |
295 | 302 | $("#myTab li:eq(1)").addClass("active"); |
296 | 303 | $("#tabDetail").addClass("in active"); |
297 | 304 | } |
305 | + | |
306 | + function arrival(id){ | |
307 | + var url = prefix+"/arrival/"+id; | |
308 | + $.modal.open("预约" + $.table._option.modalName, url); | |
309 | + } | |
298 | 310 | </script> |
299 | 311 | </body> |
300 | 312 | </html> |
301 | 313 | \ No newline at end of file |
... | ... |
src/main/resources/templates/receipt/receiptHeader/reservation.html
0 → 100644
1 | +<!DOCTYPE HTML> | |
2 | +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> | |
3 | +<meta charset="utf-8"> | |
4 | +<head th:include="include :: header"></head> | |
5 | +<body class="white-bg"> | |
6 | +<div class="wrapper wrapper-content animated fadeInRight ibox-content"> | |
7 | + <form class="form-horizontal m" id="form-receiptHeader-edit" th:object="${receiptHeader}"> | |
8 | + <input id="id" name="id" type="hidden" th:field="*{id}"> | |
9 | + <div class="form-group"> | |
10 | + <label class="col-sm-3 control-label">预计到达时间:</label> | |
11 | + <div class="col-sm-8"> | |
12 | + <input id="scheduledArriveDate" name="scheduledArriveDate" class="form-control" type="text" th:field="*{scheduledArriveDate}"> | |
13 | + </div> | |
14 | + </div> | |
15 | + <div class="form-group"> | |
16 | + <div class="form-control-static col-sm-offset-9"> | |
17 | + <button type="submit" class="btn btn-primary">提交</button> | |
18 | + <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button> | |
19 | + </div> | |
20 | + </div> | |
21 | + </form> | |
22 | +</div> | |
23 | +<div th:include="include::footer"></div> | |
24 | +<script type="text/javascript"> | |
25 | + var prefix = ctx + "receipt/receiptHeader"; | |
26 | + | |
27 | + $("#form-receiptHeader-edit").validate({ | |
28 | + rules:{ | |
29 | + scheduledArriveDate:{ | |
30 | + required:true, | |
31 | + } | |
32 | + }, | |
33 | + submitHandler: function(form) { | |
34 | + $.ajax({ | |
35 | + cache : true, | |
36 | + type : "POST", | |
37 | + url : prefix + "/arrival", | |
38 | + data : { | |
39 | + "id": $("#id").val(), | |
40 | + "scheduledArriveDate": $("input[name='scheduledArriveDate']").val(), | |
41 | + }, | |
42 | + async : false, | |
43 | + error : function(request) { | |
44 | + $.modal.alertError("请求失败!"); | |
45 | + }, | |
46 | + success : function(data) { | |
47 | + $.operate.saveSuccess(data); | |
48 | + } | |
49 | + }); | |
50 | + } | |
51 | + }); | |
52 | + | |
53 | + $(function () { | |
54 | + layui.use('laydate', function() { | |
55 | + var laydate = layui.laydate; | |
56 | + laydate.render({ elem: '#scheduledArriveDate',min: 0, theme: 'molv', format: 'yyyy-MM-dd HH:mm:ss'}); | |
57 | + }); | |
58 | + }) | |
59 | + | |
60 | +</script> | |
61 | +</body> | |
62 | +</html> | |
... | ... |