Commit 4ca0078a9eb5a91b7e6272bc4be77fe35d09e2fd

Authored by mahuandong
1 parent d6ea7c29

入库预约与入库到货

.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
... ... @@ -339,7 +339,6 @@ public class ReceiptDetail implements Serializable {
339 339 */
340 340 @TableField(value = "deleted")
341 341 @ApiModelProperty(value = "是否删除")
342   - @TableLogic
343 342 private Boolean deleted;
344 343  
345 344 }
346 345 \ No newline at end of file
... ...
src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java
... ... @@ -11,4 +11,5 @@ public interface ReceiptDetailService extends IService&lt;ReceiptDetail&gt;{
11 11  
12 12 ReceiptDetail queryflow(ReceiptDetail receiptDetail);
13 13  
  14 + void updateReceiptHeaderLastStatus(Integer id);
14 15 }
... ...
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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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
... ... @@ -290,7 +290,6 @@ public class ReceiptHeader implements Serializable {
290 290 */
291 291 @TableField(value = "deleted")
292 292 @ApiModelProperty(value="是否删除")
293   - @TableLogic
294 293 private Boolean deleted;
295 294  
296 295 private static final long serialVersionUID = 1L;
... ...
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&lt;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&lt;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>
... ...