Commit 305b5e72d5c69d06a1dfb7e7728cb95d24a83784
Merge branch 'develop' of http://172.16.29.40:8010/wms/wms2 into develop
Showing
28 changed files
with
1344 additions
and
17 deletions
src/main/java/com/huaheng/api/acs/controller/StateInfoUp.java
0 → 100644
1 | +package com.huaheng.api.acs.controller; | ||
2 | + | ||
3 | +import com.huaheng.api.acs.domain.StateInfoUploadModel; | ||
4 | +import com.huaheng.api.acs.service.AcsService; | ||
5 | +import com.huaheng.framework.aspectj.lang.annotation.Log; | ||
6 | +import com.huaheng.framework.aspectj.lang.constant.BusinessType; | ||
7 | +import com.huaheng.framework.web.controller.BaseController; | ||
8 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
9 | +import io.swagger.annotations.Api; | ||
10 | +import io.swagger.annotations.ApiOperation; | ||
11 | +import org.springframework.web.bind.annotation.*; | ||
12 | + | ||
13 | +import javax.annotation.Resource; | ||
14 | + | ||
15 | + | ||
16 | +@RestController | ||
17 | +@RequestMapping("/api/ACS/v1") | ||
18 | +@Api(tags = {"ACS"}, description = "登陆接口") | ||
19 | +public class StateInfoUp extends BaseController { | ||
20 | + @Resource | ||
21 | + private AcsService acsService; | ||
22 | + | ||
23 | + /** | ||
24 | + * AGV 信息上传 | ||
25 | + */ | ||
26 | +// @RequiresPermissions("api:acs:StateInfoUpload") | ||
27 | + @Log(title = "AGV 信息上传", action = BusinessType.INSERT) | ||
28 | + @PostMapping("/StateInfoUpload") | ||
29 | + @ApiOperation("AGV 信息上传接口") | ||
30 | + @ResponseBody | ||
31 | + public AjaxResult StateInfoUpload(@RequestBody StateInfoUploadModel model) | ||
32 | + { | ||
33 | + return acsService.StateInfoUpload(model); | ||
34 | + } | ||
35 | + | ||
36 | +} |
src/main/java/com/huaheng/api/acs/controller/TaskConfirm.java
0 → 100644
1 | +package com.huaheng.api.acs.controller; | ||
2 | + | ||
3 | +import com.huaheng.api.acs.domain.AgvTask; | ||
4 | +import com.huaheng.api.acs.service.AcsService; | ||
5 | +import com.huaheng.framework.aspectj.lang.annotation.Log; | ||
6 | +import com.huaheng.framework.aspectj.lang.constant.BusinessType; | ||
7 | +import com.huaheng.framework.web.controller.BaseController; | ||
8 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
9 | +import io.swagger.annotations.Api; | ||
10 | +import io.swagger.annotations.ApiOperation; | ||
11 | +import org.springframework.web.bind.annotation.*; | ||
12 | + | ||
13 | +import javax.annotation.Resource; | ||
14 | + | ||
15 | + | ||
16 | +@RestController | ||
17 | +@RequestMapping("/api/ACS/v1") | ||
18 | +@Api(tags = {"ACS"}, description = "登陆接口") | ||
19 | +public class TaskConfirm extends BaseController { | ||
20 | + @Resource | ||
21 | + private AcsService acsService; | ||
22 | + | ||
23 | + /** | ||
24 | + * AGV 任务回传 | ||
25 | + */ | ||
26 | +// @RequiresPermissions("api:acs:TaskConfirm") | ||
27 | + @Log(title = "AGV 任务回传", action = BusinessType.UPDATE) | ||
28 | + @PostMapping("/TaskConfirm") | ||
29 | + @ApiOperation("AGV 任务回传接口") | ||
30 | + @ResponseBody | ||
31 | + public AjaxResult TaskConfirm(@RequestBody AgvTask model) | ||
32 | + { | ||
33 | + return acsService.TaskConfirm(model); | ||
34 | + } | ||
35 | + | ||
36 | + | ||
37 | +} |
src/main/java/com/huaheng/api/acs/domain/AgvTask.java
0 → 100644
1 | +package com.huaheng.api.acs.domain; | ||
2 | + | ||
3 | +import com.huaheng.framework.web.domain.BaseEntity; | ||
4 | + | ||
5 | +import java.util.Date; | ||
6 | +import java.util.List; | ||
7 | + | ||
8 | +/** | ||
9 | + * AGV任务实体 | ||
10 | + * | ||
11 | + */ | ||
12 | +public class AgvTask extends BaseEntity { | ||
13 | + | ||
14 | + | ||
15 | + private Integer id; | ||
16 | + //交互标识 | ||
17 | + private String interactionId; | ||
18 | + //任务头标识 | ||
19 | + private Integer taskHeaderId; | ||
20 | + //任务子标识 | ||
21 | + private Integer taskDetailId; | ||
22 | + //任务类型 | ||
23 | + private String taskType; | ||
24 | + //货架编码 | ||
25 | + private String shelfNo; | ||
26 | + //站台编码 | ||
27 | + private String station; | ||
28 | + //源位置编码 | ||
29 | + private String fromLocationNo; | ||
30 | + //目的位置编码 | ||
31 | + private String toLocationNo; | ||
32 | + //方向 | ||
33 | + private String orientation; | ||
34 | + //平台 | ||
35 | + private String platform; | ||
36 | + //小车编号 | ||
37 | + private String carNo; | ||
38 | + //状态 | ||
39 | + private String state; | ||
40 | + //优先级 | ||
41 | + private Integer status; | ||
42 | + //仓库ID | ||
43 | + private Integer warehouseId; | ||
44 | + //仓库编码 | ||
45 | + private String warehouseCode; | ||
46 | + //货主ID | ||
47 | + private Integer companyId; | ||
48 | + //货主编码 | ||
49 | + private String companyCode; | ||
50 | + //货主ID list | ||
51 | + private List<Integer> companyIdList; | ||
52 | + //货主list | ||
53 | + private List<String> companyCodeList; | ||
54 | + | ||
55 | + private Date date; | ||
56 | + | ||
57 | + public Date getDate() { | ||
58 | + return date; | ||
59 | + } | ||
60 | + | ||
61 | + public void setDate(Date date) { | ||
62 | + this.date = date; | ||
63 | + } | ||
64 | + | ||
65 | + public List<Integer> getCompanyIdList() { | ||
66 | + return companyIdList; | ||
67 | + } | ||
68 | + | ||
69 | + public void setCompanyIdList(List<Integer> companyIdList) { | ||
70 | + this.companyIdList = companyIdList; | ||
71 | + } | ||
72 | + | ||
73 | + public Integer getWarehouseId() { | ||
74 | + return warehouseId; | ||
75 | + } | ||
76 | + | ||
77 | + public void setWarehouseId(Integer warehouseId) { | ||
78 | + this.warehouseId = warehouseId; | ||
79 | + } | ||
80 | + | ||
81 | + public String getWarehouseCode() { | ||
82 | + return warehouseCode; | ||
83 | + } | ||
84 | + | ||
85 | + public void setWarehouseCode(String warehouseCode) { | ||
86 | + this.warehouseCode = warehouseCode; | ||
87 | + } | ||
88 | + | ||
89 | + public Integer getCompanyId() { | ||
90 | + return companyId; | ||
91 | + } | ||
92 | + | ||
93 | + public void setCompanyId(Integer companyId) { | ||
94 | + this.companyId = companyId; | ||
95 | + } | ||
96 | + | ||
97 | + public String getCompanyCode() { | ||
98 | + return companyCode; | ||
99 | + } | ||
100 | + | ||
101 | + public void setCompanyCode(String companyCode) { | ||
102 | + this.companyCode = companyCode; | ||
103 | + } | ||
104 | + | ||
105 | + public List<String> getCompanyCodeList() { | ||
106 | + return companyCodeList; | ||
107 | + } | ||
108 | + | ||
109 | + public void setCompanyCodeList(List<String> companyCodeList) { | ||
110 | + this.companyCodeList = companyCodeList; | ||
111 | + } | ||
112 | + | ||
113 | + public Integer getId() { | ||
114 | + return id; | ||
115 | + } | ||
116 | + | ||
117 | + public void setId(Integer id) { | ||
118 | + this.id = id; | ||
119 | + } | ||
120 | + | ||
121 | + public String getInteractionId() { | ||
122 | + return interactionId; | ||
123 | + } | ||
124 | + | ||
125 | + public void setInteractionId(String interactionId) { | ||
126 | + this.interactionId = interactionId; | ||
127 | + } | ||
128 | + | ||
129 | + public Integer getTaskHeaderId() { | ||
130 | + return taskHeaderId; | ||
131 | + } | ||
132 | + | ||
133 | + public void setTaskHeaderId(Integer taskHeaderId) { | ||
134 | + this.taskHeaderId = taskHeaderId; | ||
135 | + } | ||
136 | + | ||
137 | + public Integer getTaskDetailId() { | ||
138 | + return taskDetailId; | ||
139 | + } | ||
140 | + | ||
141 | + public void setTaskDetailId(Integer taskDetailId) { | ||
142 | + this.taskDetailId = taskDetailId; | ||
143 | + } | ||
144 | + | ||
145 | + public String getTaskType() { | ||
146 | + return taskType; | ||
147 | + } | ||
148 | + | ||
149 | + public void setTaskType(String taskType) { | ||
150 | + this.taskType = taskType; | ||
151 | + } | ||
152 | + | ||
153 | + public String getShelfNo() { | ||
154 | + return shelfNo; | ||
155 | + } | ||
156 | + | ||
157 | + public void setShelfNo(String shelfNo) { | ||
158 | + this.shelfNo = shelfNo; | ||
159 | + } | ||
160 | + | ||
161 | + public String getStation() { | ||
162 | + return station; | ||
163 | + } | ||
164 | + | ||
165 | + public void setStation(String station) { | ||
166 | + this.station = station; | ||
167 | + } | ||
168 | + | ||
169 | + public String getFromLocationNo() { | ||
170 | + return fromLocationNo; | ||
171 | + } | ||
172 | + | ||
173 | + public void setFromLocationNo(String fromLocationNo) { | ||
174 | + this.fromLocationNo = fromLocationNo; | ||
175 | + } | ||
176 | + | ||
177 | + public String getToLocationNo() { | ||
178 | + return toLocationNo; | ||
179 | + } | ||
180 | + | ||
181 | + public void setToLocationNo(String toLocationNo) { | ||
182 | + this.toLocationNo = toLocationNo; | ||
183 | + } | ||
184 | + | ||
185 | + public String getOrientation() { | ||
186 | + return orientation; | ||
187 | + } | ||
188 | + | ||
189 | + public void setOrientation(String orientation) { | ||
190 | + this.orientation = orientation; | ||
191 | + } | ||
192 | + | ||
193 | + public String getPlatform() { | ||
194 | + return platform; | ||
195 | + } | ||
196 | + | ||
197 | + public void setPlatform(String platform) { | ||
198 | + this.platform = platform; | ||
199 | + } | ||
200 | + | ||
201 | + public String getCarNo() { | ||
202 | + return carNo; | ||
203 | + } | ||
204 | + | ||
205 | + public void setCarNo(String carNo) { | ||
206 | + this.carNo = carNo; | ||
207 | + } | ||
208 | + | ||
209 | + public String getState() { | ||
210 | + return state; | ||
211 | + } | ||
212 | + | ||
213 | + public void setState(String state) { | ||
214 | + this.state = state; | ||
215 | + } | ||
216 | + | ||
217 | + public Integer getStatus() { | ||
218 | + return status; | ||
219 | + } | ||
220 | + | ||
221 | + public void setStatus(Integer status) { | ||
222 | + this.status = status; | ||
223 | + } | ||
224 | + | ||
225 | + @Override | ||
226 | + public String toString() { | ||
227 | + return "AgvTask{" + | ||
228 | + "id=" + id + | ||
229 | + ", interactionId='" + interactionId + '\'' + | ||
230 | + ", taskHeaderId=" + taskHeaderId + | ||
231 | + ", taskDetailId=" + taskDetailId + | ||
232 | + ", taskType='" + taskType + '\'' + | ||
233 | + ", shelfNo='" + shelfNo + '\'' + | ||
234 | + ", station='" + station + '\'' + | ||
235 | + ", fromLocationNo='" + fromLocationNo + '\'' + | ||
236 | + ", toLocationNo='" + toLocationNo + '\'' + | ||
237 | + ", orientation='" + orientation + '\'' + | ||
238 | + ", platform='" + platform + '\'' + | ||
239 | + ", carNo='" + carNo + '\'' + | ||
240 | + ", state='" + state + '\'' + | ||
241 | + '}'; | ||
242 | + } | ||
243 | +} |
src/main/java/com/huaheng/api/acs/domain/StateInfoUploadModel.java
0 → 100644
1 | +package com.huaheng.api.acs.domain; | ||
2 | + | ||
3 | +import java.util.Date; | ||
4 | + | ||
5 | +/** | ||
6 | + * 小车信息实体 | ||
7 | + * | ||
8 | + */ | ||
9 | +public class StateInfoUploadModel { | ||
10 | + | ||
11 | + private String carNo; // 小车编号,string(50),唯一 ,必填 | ||
12 | + private String interactionId; // 交互标识,int,默认 0,必填" | ||
13 | + private String taskType; // 任务类型,string (50),putway 上架 pick 拣货,必填 | ||
14 | + private String shelfNo; // 货架编码,string (50),默认 0,必填 | ||
15 | + private String station; // 站台编码,string (50),默认 0,必填 | ||
16 | + private String currentLocationNo; // 当前位置编码,string (50),默认 0 必填 | ||
17 | + private String fromLocationNo; // 源位置编码,string (50),默认 0 必填 | ||
18 | + private String toLocationNo; // 目的位置编码,string (50),默认 0 必填 | ||
19 | + private String orientation; // 方向,string (50),N,S,E,W,必填 | ||
20 | + private Integer percentCapacity; // 电量,int【0-100】,必填 | ||
21 | + private Integer exceptionFlag; // 异常标志 0 正常 1 异常,int,默认 0 必填 | ||
22 | + private String state; // 状态,string (50),0 空闲 1 预定 2 任务中 -1 充电,必填 | ||
23 | + private String exceptionInfo; // 异常信息 string(200) | ||
24 | + //仓库ID | ||
25 | + private Integer warehouseId; | ||
26 | + //仓库编码 | ||
27 | + private String warehouseCode; | ||
28 | + | ||
29 | + private Date date; | ||
30 | + | ||
31 | + public Date getDate() { | ||
32 | + return date; | ||
33 | + } | ||
34 | + | ||
35 | + public void setDate(Date date) { | ||
36 | + this.date = date; | ||
37 | + } | ||
38 | + | ||
39 | + public Integer getWarehouseId() { | ||
40 | + return warehouseId; | ||
41 | + } | ||
42 | + | ||
43 | + public void setWarehouseId(Integer warehouseId) { | ||
44 | + this.warehouseId = warehouseId; | ||
45 | + } | ||
46 | + | ||
47 | + public String getWarehouseCode() { | ||
48 | + return warehouseCode; | ||
49 | + } | ||
50 | + | ||
51 | + public void setWarehouseCode(String warehouseCode) { | ||
52 | + this.warehouseCode = warehouseCode; | ||
53 | + } | ||
54 | + | ||
55 | + public String getCarNo() { | ||
56 | + return carNo; | ||
57 | + } | ||
58 | + | ||
59 | + public void setCarNo(String carNo) { | ||
60 | + this.carNo = carNo; | ||
61 | + } | ||
62 | + | ||
63 | + public String getInteractionId() { | ||
64 | + return interactionId; | ||
65 | + } | ||
66 | + | ||
67 | + public void setInteractionId(String interactionId) { | ||
68 | + this.interactionId = interactionId; | ||
69 | + } | ||
70 | + | ||
71 | + public String getTaskType() { | ||
72 | + return taskType; | ||
73 | + } | ||
74 | + | ||
75 | + public void setTaskType(String taskType) { | ||
76 | + this.taskType = taskType; | ||
77 | + } | ||
78 | + | ||
79 | + public String getShelfNo() { | ||
80 | + return shelfNo; | ||
81 | + } | ||
82 | + | ||
83 | + public void setShelfNo(String shelfNo) { | ||
84 | + this.shelfNo = shelfNo; | ||
85 | + } | ||
86 | + | ||
87 | + public String getStation() { | ||
88 | + return station; | ||
89 | + } | ||
90 | + | ||
91 | + public void setStation(String station) { | ||
92 | + this.station = station; | ||
93 | + } | ||
94 | + | ||
95 | + public String getCurrentLocationNo() { | ||
96 | + return currentLocationNo; | ||
97 | + } | ||
98 | + | ||
99 | + public void setCurrentLocationNo(String currentLocationNo) { | ||
100 | + this.currentLocationNo = currentLocationNo; | ||
101 | + } | ||
102 | + | ||
103 | + public String getFromLocationNo() { | ||
104 | + return fromLocationNo; | ||
105 | + } | ||
106 | + | ||
107 | + public void setFromLocationNo(String fromLocationNo) { | ||
108 | + this.fromLocationNo = fromLocationNo; | ||
109 | + } | ||
110 | + | ||
111 | + public String getToLocationNo() { | ||
112 | + return toLocationNo; | ||
113 | + } | ||
114 | + | ||
115 | + public void setToLocationNo(String toLocationNo) { | ||
116 | + this.toLocationNo = toLocationNo; | ||
117 | + } | ||
118 | + | ||
119 | + public String getOrientation() { | ||
120 | + return orientation; | ||
121 | + } | ||
122 | + | ||
123 | + public void setOrientation(String orientation) { | ||
124 | + this.orientation = orientation; | ||
125 | + } | ||
126 | + | ||
127 | + public Integer getPercentCapacity() { | ||
128 | + return percentCapacity; | ||
129 | + } | ||
130 | + | ||
131 | + public void setPercentCapacity(Integer percentCapacity) { | ||
132 | + this.percentCapacity = percentCapacity; | ||
133 | + } | ||
134 | + | ||
135 | + public Integer getExceptionFlag() { | ||
136 | + return exceptionFlag; | ||
137 | + } | ||
138 | + | ||
139 | + public void setExceptionFlag(Integer exceptionFlag) { | ||
140 | + this.exceptionFlag = exceptionFlag; | ||
141 | + } | ||
142 | + | ||
143 | + public String getState() { | ||
144 | + return state; | ||
145 | + } | ||
146 | + | ||
147 | + public void setState(String state) { | ||
148 | + this.state = state; | ||
149 | + } | ||
150 | + | ||
151 | + public String getExceptionInfo() { | ||
152 | + return exceptionInfo; | ||
153 | + } | ||
154 | + | ||
155 | + public void setExceptionInfo(String exceptionInfo) { | ||
156 | + this.exceptionInfo = exceptionInfo; | ||
157 | + } | ||
158 | + | ||
159 | + | ||
160 | + | ||
161 | +} |
src/main/java/com/huaheng/api/acs/service/AcsService.java
0 → 100644
1 | +package com.huaheng.api.acs.service; | ||
2 | + | ||
3 | +import com.huaheng.api.acs.domain.AgvTask; | ||
4 | +import com.huaheng.api.acs.domain.StateInfoUploadModel; | ||
5 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
6 | + | ||
7 | +public interface AcsService { | ||
8 | + | ||
9 | + | ||
10 | + //AGV 信息上传 | ||
11 | + AjaxResult StateInfoUpload(StateInfoUploadModel model); | ||
12 | + | ||
13 | + | ||
14 | + //AGV 任务回传 | ||
15 | + AjaxResult TaskConfirm(AgvTask agvTask); | ||
16 | +} |
src/main/java/com/huaheng/api/acs/service/AcsServiceImpl.java
0 → 100644
1 | +package com.huaheng.api.acs.service; | ||
2 | + | ||
3 | +import com.huaheng.api.acs.domain.AgvTask; | ||
4 | +import com.huaheng.api.acs.domain.StateInfoUploadModel; | ||
5 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
6 | +import org.springframework.stereotype.Service; | ||
7 | + | ||
8 | +/** | ||
9 | + * @ClassName AcsServiceImpl | ||
10 | + * @Description TODO | ||
11 | + * @Author Administrator | ||
12 | + * @Date 2019/12/2615:38 | ||
13 | + */ | ||
14 | +@Service | ||
15 | +public class AcsServiceImpl implements AcsService { | ||
16 | + @Override | ||
17 | + public AjaxResult StateInfoUpload(StateInfoUploadModel model) { | ||
18 | + return null; | ||
19 | + } | ||
20 | + | ||
21 | + @Override | ||
22 | + public AjaxResult TaskConfirm(AgvTask agvTask) { | ||
23 | + return null; | ||
24 | + } | ||
25 | +} |
src/main/java/com/huaheng/common/constant/QuantityConstant.java
@@ -348,5 +348,9 @@ public class QuantityConstant { | @@ -348,5 +348,9 @@ public class QuantityConstant { | ||
348 | //在库抽检 | 348 | //在库抽检 |
349 | public static final Integer CHECK_TYPE_SELECT = 300; | 349 | public static final Integer CHECK_TYPE_SELECT = 300; |
350 | 350 | ||
351 | + //空货架 | ||
352 | + public static final Integer POINTS_EMPTY = 0; | ||
351 | 353 | ||
354 | + //非空货架 | ||
355 | + public static final Integer POINTS_SOME = 1; | ||
352 | } | 356 | } |
src/main/java/com/huaheng/pc/config/address/domain/Address.java
@@ -33,6 +33,13 @@ public class Address implements Serializable { | @@ -33,6 +33,13 @@ public class Address implements Serializable { | ||
33 | private String warehouseCode; | 33 | private String warehouseCode; |
34 | 34 | ||
35 | /** | 35 | /** |
36 | + * 编号 | ||
37 | + */ | ||
38 | + @TableField(value = "number") | ||
39 | + @ApiModelProperty(value="编号") | ||
40 | + private Integer number; | ||
41 | + | ||
42 | + /** | ||
36 | * 参数 | 43 | * 参数 |
37 | */ | 44 | */ |
38 | @TableField(value = "param") | 45 | @TableField(value = "param") |
@@ -62,6 +69,14 @@ public class Address implements Serializable { | @@ -62,6 +69,14 @@ public class Address implements Serializable { | ||
62 | this.warehouseCode = warehouseCode; | 69 | this.warehouseCode = warehouseCode; |
63 | } | 70 | } |
64 | 71 | ||
72 | + public Integer getNumber() { | ||
73 | + return number; | ||
74 | + } | ||
75 | + | ||
76 | + public void setNumber(Integer number) { | ||
77 | + this.number = number; | ||
78 | + } | ||
79 | + | ||
65 | public String getParam() { | 80 | public String getParam() { |
66 | return param; | 81 | return param; |
67 | } | 82 | } |
src/main/java/com/huaheng/pc/config/container/domain/Container.java
@@ -65,6 +65,15 @@ public class Container implements Serializable { | @@ -65,6 +65,15 @@ public class Container implements Serializable { | ||
65 | @Excel(name = "容器类型") | 65 | @Excel(name = "容器类型") |
66 | private String containerType; | 66 | private String containerType; |
67 | 67 | ||
68 | + | ||
69 | + /** | ||
70 | + * 容器类型 | ||
71 | + */ | ||
72 | + @TableField(value = "goodsShelfNo") | ||
73 | + @ApiModelProperty(value="AGV货架编码") | ||
74 | + @Excel(name = "AGV货架编码") | ||
75 | + private String goodsShelfNo; | ||
76 | + | ||
68 | /** | 77 | /** |
69 | * 创建时间 | 78 | * 创建时间 |
70 | */ | 79 | */ |
@@ -199,6 +208,8 @@ public class Container implements Serializable { | @@ -199,6 +208,8 @@ public class Container implements Serializable { | ||
199 | 208 | ||
200 | public static final String COL_CONTAINERTYPE = "containerType"; | 209 | public static final String COL_CONTAINERTYPE = "containerType"; |
201 | 210 | ||
211 | + public static final String COL_GOODSSHELFNO = "goodsShelfNo"; | ||
212 | + | ||
202 | public static final String COL_CREATED = "created"; | 213 | public static final String COL_CREATED = "created"; |
203 | 214 | ||
204 | public static final String COL_CREATEDBY = "createdBy"; | 215 | public static final String COL_CREATEDBY = "createdBy"; |
@@ -245,6 +256,7 @@ public class Container implements Serializable { | @@ -245,6 +256,7 @@ public class Container implements Serializable { | ||
245 | sb.append(", warehouseCode=").append(warehouseCode); | 256 | sb.append(", warehouseCode=").append(warehouseCode); |
246 | sb.append(", companyCode=").append(companyCode); | 257 | sb.append(", companyCode=").append(companyCode); |
247 | sb.append(", containerType=").append(containerType); | 258 | sb.append(", containerType=").append(containerType); |
259 | + sb.append(", goodsShelfNo=").append(goodsShelfNo); | ||
248 | sb.append(", created=").append(created); | 260 | sb.append(", created=").append(created); |
249 | sb.append(", createdBy=").append(createdBy); | 261 | sb.append(", createdBy=").append(createdBy); |
250 | sb.append(", lastUpdated=").append(lastUpdated); | 262 | sb.append(", lastUpdated=").append(lastUpdated); |
src/main/java/com/huaheng/pc/config/container/mapper/ContainerMapper.java
@@ -19,4 +19,6 @@ public interface ContainerMapper extends BaseMapper<Container> { | @@ -19,4 +19,6 @@ public interface ContainerMapper extends BaseMapper<Container> { | ||
19 | int addList(@Param("containers") List<Container> containers); | 19 | int addList(@Param("containers") List<Container> containers); |
20 | 20 | ||
21 | 21 | ||
22 | + //获得空货架编号 | ||
23 | + List<Container> selectListShelf(); | ||
22 | } | 24 | } |
23 | \ No newline at end of file | 25 | \ No newline at end of file |
src/main/java/com/huaheng/pc/config/container/service/ContainerService.java
@@ -22,4 +22,8 @@ public interface ContainerService extends IService<Container>{ | @@ -22,4 +22,8 @@ public interface ContainerService extends IService<Container>{ | ||
22 | void removeByCode(String containCode); | 22 | void removeByCode(String containCode); |
23 | 23 | ||
24 | Container findAllByCode(String containCode); | 24 | Container findAllByCode(String containCode); |
25 | + | ||
26 | + | ||
27 | + //获得空货架编号 | ||
28 | + List<Container> selectListShelf(); | ||
25 | } | 29 | } |
src/main/java/com/huaheng/pc/config/container/service/ContainerServiceImpl.java
@@ -171,4 +171,10 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container | @@ -171,4 +171,10 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container | ||
171 | public Container findAllByCode(String code) { | 171 | public Container findAllByCode(String code) { |
172 | return containerMapper.findAllByCode(code); | 172 | return containerMapper.findAllByCode(code); |
173 | } | 173 | } |
174 | + | ||
175 | + | ||
176 | + @Override | ||
177 | + public List<Container> selectListShelf() { | ||
178 | + return containerMapper.selectListShelf(); | ||
179 | + } | ||
174 | } | 180 | } |
src/main/java/com/huaheng/pc/config/points/controller/PointController.java
0 → 100644
1 | +package com.huaheng.pc.config.points.controller; | ||
2 | + | ||
3 | + | ||
4 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||
5 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
6 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
7 | +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||
8 | +import com.huaheng.common.utils.StringUtils; | ||
9 | +import com.huaheng.common.utils.security.ShiroUtils; | ||
10 | +import com.huaheng.framework.aspectj.lang.annotation.Log; | ||
11 | +import com.huaheng.framework.aspectj.lang.constant.BusinessType; | ||
12 | +import com.huaheng.framework.web.controller.BaseController; | ||
13 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
14 | +import com.huaheng.framework.web.page.PageDomain; | ||
15 | +import com.huaheng.framework.web.page.TableDataInfo; | ||
16 | +import com.huaheng.framework.web.page.TableSupport; | ||
17 | +import com.huaheng.pc.config.company.domain.Company; | ||
18 | +import com.huaheng.pc.config.company.service.CompanyService; | ||
19 | +import com.huaheng.pc.config.container.domain.Container; | ||
20 | +import com.huaheng.pc.config.container.service.ContainerService; | ||
21 | +import com.huaheng.pc.config.points.domain.Points; | ||
22 | +import com.huaheng.pc.config.points.service.PointsService; | ||
23 | +import org.apache.shiro.authz.annotation.RequiresPermissions; | ||
24 | +import org.springframework.beans.factory.annotation.Autowired; | ||
25 | +import org.springframework.stereotype.Controller; | ||
26 | +import org.springframework.ui.ModelMap; | ||
27 | +import org.springframework.web.bind.annotation.*; | ||
28 | + | ||
29 | +import java.util.List; | ||
30 | + | ||
31 | +/** | ||
32 | + * 货架 信息操作处理 | ||
33 | + * | ||
34 | + * @author huaheng | ||
35 | + * @date 2019-07-11 | ||
36 | + */ | ||
37 | +@Controller | ||
38 | +@RequestMapping("/config/point") | ||
39 | +public class PointController extends BaseController | ||
40 | +{ | ||
41 | + private String prefix = "config/point"; | ||
42 | + | ||
43 | + @Autowired | ||
44 | + private PointsService pointsService; | ||
45 | + @Autowired | ||
46 | + private CompanyService companyService; | ||
47 | + @Autowired | ||
48 | + private ContainerService containerService; | ||
49 | + | ||
50 | + @RequiresPermissions("config:point:view") | ||
51 | + @GetMapping() | ||
52 | + public String point() | ||
53 | + { | ||
54 | + return prefix + "/point"; | ||
55 | + } | ||
56 | + | ||
57 | + /** | ||
58 | + * 查询货架列表 | ||
59 | + */ | ||
60 | + @RequiresPermissions("config:point:list") | ||
61 | + @Log(title = "配置-货架设置", operating = "货架查看列表", action = BusinessType.GRANT) | ||
62 | + @PostMapping("/list") | ||
63 | + @ResponseBody | ||
64 | + public TableDataInfo list(Points points) | ||
65 | + { | ||
66 | + | ||
67 | + LambdaQueryWrapper<Points> lambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
68 | + PageDomain pageDomain = TableSupport.buildPageRequest(); | ||
69 | + Integer pageNum = pageDomain.getPageNum(); | ||
70 | + Integer pageSize = pageDomain.getPageSize(); | ||
71 | + lambdaQueryWrapper | ||
72 | + .eq(StringUtils.isNotEmpty(points.getGoodsShelfNo()), Points::getGoodsShelfNo, points.getGoodsShelfNo()) | ||
73 | + .eq(StringUtils.isNotEmpty(points.getCompanyCode()),Points::getCompanyCode, points.getCompanyCode()) | ||
74 | + .eq(Points::getWarehouseCode, ShiroUtils.getWarehouseCode()); | ||
75 | + | ||
76 | + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){ | ||
77 | + /*使用分页查询*/ | ||
78 | + Page<Points> page = new Page<>(pageNum, pageSize); | ||
79 | + IPage<Points> iPage = pointsService.page(page, lambdaQueryWrapper); | ||
80 | + return getMpDataTable(iPage.getRecords(), iPage.getTotal()); | ||
81 | + } else { | ||
82 | + List<Points> list = pointsService.list(lambdaQueryWrapper); | ||
83 | + list.forEach(t->{ | ||
84 | + LambdaQueryWrapper<Company> companyLamb = Wrappers.lambdaQuery(); | ||
85 | + companyLamb.eq(Company::getCode,t.getCompanyCode()); | ||
86 | + Company company= companyService.getOne(companyLamb); | ||
87 | + if(company!=null) { | ||
88 | + t.setCompanyName(company.getName()); | ||
89 | + } | ||
90 | + }); | ||
91 | + return getDataTable(list); | ||
92 | + } | ||
93 | + } | ||
94 | + | ||
95 | + /** | ||
96 | + * 修改货架 | ||
97 | + */ | ||
98 | + @GetMapping("/edit/{id}") | ||
99 | + public String edit(@PathVariable("id") Integer id, ModelMap mmap) | ||
100 | + { | ||
101 | + | ||
102 | + Points points = pointsService.getById(id); | ||
103 | + mmap.put("points", points); | ||
104 | + return prefix + "/edit"; | ||
105 | + } | ||
106 | + | ||
107 | + /** | ||
108 | + * 修改保存货架 | ||
109 | + */ | ||
110 | + @RequiresPermissions("config:point:edit") | ||
111 | + @Log(title = "配置-货架设置", operating = "修改货架", action = BusinessType.UPDATE) | ||
112 | + @PostMapping("/edit") | ||
113 | + @ResponseBody | ||
114 | + public AjaxResult editSave(Points points) | ||
115 | + { | ||
116 | + LambdaQueryWrapper<Container> containerLamb = Wrappers.lambdaQuery(); | ||
117 | + containerLamb.eq(Container::getGoodsShelfNo,points.getGoodsShelfNo()) | ||
118 | + .eq(Container::getWarehouseCode,ShiroUtils.getWarehouseCode()); | ||
119 | + List<Container> containerList=containerService.list(containerLamb); | ||
120 | + for(Container item:containerList){ | ||
121 | + item.setCompanyCode(points.getCompanyCode()); | ||
122 | + if(containerService.saveOrUpdate(item) == false){ | ||
123 | + return AjaxResult.error("修改失败"); | ||
124 | + } | ||
125 | + } | ||
126 | + if(pointsService.saveOrUpdate(points) == false){ | ||
127 | + return AjaxResult.error("修改失败"); | ||
128 | + } | ||
129 | + return AjaxResult.success("修改成功"); | ||
130 | + } | ||
131 | + | ||
132 | + | ||
133 | + /** | ||
134 | + * 恢复货架状态 | ||
135 | + */ | ||
136 | + @RequiresPermissions("config:point:edit") | ||
137 | + @Log(title = "配置-货架设置", operating = "恢复货架状态", action = BusinessType.UPDATE) | ||
138 | + @PostMapping("/restore") | ||
139 | + @ResponseBody | ||
140 | + public AjaxResult restore(){ | ||
141 | + if(pointsService.updateAll() >0){ | ||
142 | + return AjaxResult.success("货架状态恢复成功"); | ||
143 | + }else { | ||
144 | + return AjaxResult.error("失败"); | ||
145 | + } | ||
146 | + } | ||
147 | + | ||
148 | + /** | ||
149 | + * 检测货架装货状态 | ||
150 | + */ | ||
151 | + @RequiresPermissions("config:point:edit") | ||
152 | + @Log(title = "配置-货架设置", operating = "检测货架装货状态", action = BusinessType.UPDATE) | ||
153 | + @PostMapping("/detectShelf") | ||
154 | + @ResponseBody | ||
155 | + public AjaxResult detectShelf(){ | ||
156 | + return pointsService.detectShelf(); | ||
157 | + } | ||
158 | +} |
src/main/java/com/huaheng/pc/config/points/domain/Points.java
0 → 100644
1 | +package com.huaheng.pc.config.points.domain; | ||
2 | + | ||
3 | +import com.baomidou.mybatisplus.annotation.IdType; | ||
4 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
5 | +import com.baomidou.mybatisplus.annotation.TableId; | ||
6 | +import com.baomidou.mybatisplus.annotation.TableName; | ||
7 | +import com.huaheng.framework.web.domain.BaseEntity; | ||
8 | +import io.swagger.annotations.ApiModel; | ||
9 | +import lombok.Data; | ||
10 | + | ||
11 | +/** | ||
12 | + * @author ricard | ||
13 | + * @time 2019/12/26 | ||
14 | + * 货架实体 | ||
15 | + */ | ||
16 | + | ||
17 | +@ApiModel(value="com.huaheng.pc.config.points.domain.Points") | ||
18 | +@Data | ||
19 | +@TableName(value = "points") | ||
20 | +public class Points extends BaseEntity { | ||
21 | + //id | ||
22 | + @TableId(value = "id", type = IdType.AUTO ) | ||
23 | + private Integer id; | ||
24 | + | ||
25 | + //仓库编码 | ||
26 | + @TableField(value = "warehouseCode") | ||
27 | + private String warehouseCode; | ||
28 | + | ||
29 | + //货架号 | ||
30 | + @TableField(value = "goodsShelfNo") | ||
31 | + private String goodsShelfNo; | ||
32 | + private Integer companyId; | ||
33 | + | ||
34 | + //货主 | ||
35 | + @TableField(value = "companyCode") | ||
36 | + private String companyCode; | ||
37 | + //货主名称 | ||
38 | + private String companyName; | ||
39 | + | ||
40 | + //货架调动次数 | ||
41 | + @TableField(value = "num") | ||
42 | + private Integer num; | ||
43 | + | ||
44 | + //是否为空 | ||
45 | + @TableField(value = "isEmpty") | ||
46 | + private Integer isEmpty; | ||
47 | + | ||
48 | + //是否可用 | ||
49 | + @TableField(value = "isEnable") | ||
50 | + private Integer isEnable; | ||
51 | + | ||
52 | + //货架状态 | ||
53 | + @TableField(value = "isLocked") | ||
54 | + private Integer isLocked; | ||
55 | + | ||
56 | + //回库后X轴位置 | ||
57 | + @TableField(value = "intX") | ||
58 | + private String intX; | ||
59 | + | ||
60 | + //回库后Y轴位置 | ||
61 | + @TableField(value = "intY") | ||
62 | + private String intY; | ||
63 | + | ||
64 | + //出库前x位置 | ||
65 | + @TableField(value = "oIntX") | ||
66 | + private String oIntX; | ||
67 | + | ||
68 | + //出库前Y位置 | ||
69 | + @TableField(value = "oIntY") | ||
70 | + private String oIntY; | ||
71 | + | ||
72 | + public Integer getCompanyId() { | ||
73 | + return companyId; | ||
74 | + } | ||
75 | + | ||
76 | + public void setCompanyId(Integer companyId) { | ||
77 | + this.companyId = companyId; | ||
78 | + } | ||
79 | + | ||
80 | + public String getCompanyCode() { | ||
81 | + return companyCode; | ||
82 | + } | ||
83 | + | ||
84 | + public void setCompanyCode(String companyCode) { | ||
85 | + this.companyCode = companyCode; | ||
86 | + } | ||
87 | + | ||
88 | + public String getCompanyName() { | ||
89 | + return companyName; | ||
90 | + } | ||
91 | + | ||
92 | + public void setCompanyName(String companyName) { | ||
93 | + this.companyName = companyName; | ||
94 | + } | ||
95 | + | ||
96 | + public String getoIntX() { | ||
97 | + return oIntX; | ||
98 | + } | ||
99 | + | ||
100 | + public void setoIntX(String oIntX) { | ||
101 | + this.oIntX = oIntX; | ||
102 | + } | ||
103 | + | ||
104 | + public String getoIntY() { | ||
105 | + return oIntY; | ||
106 | + } | ||
107 | + | ||
108 | + public void setoIntY(String oIntY) { | ||
109 | + this.oIntY = oIntY; | ||
110 | + } | ||
111 | + | ||
112 | + public String getWarehouseCode() { | ||
113 | + return warehouseCode; | ||
114 | + } | ||
115 | + | ||
116 | + public void setWarehouseCode(String warehouseCode) { | ||
117 | + this.warehouseCode = warehouseCode; | ||
118 | + } | ||
119 | + | ||
120 | + public String getIntX() { | ||
121 | + return intX; | ||
122 | + } | ||
123 | + | ||
124 | + public void setIntX(String intX) { | ||
125 | + this.intX = intX; | ||
126 | + } | ||
127 | + | ||
128 | + public String getIntY() { | ||
129 | + return intY; | ||
130 | + } | ||
131 | + | ||
132 | + public void setIntY(String intY) { | ||
133 | + this.intY = intY; | ||
134 | + } | ||
135 | + | ||
136 | + public Integer getId() { | ||
137 | + return id; | ||
138 | + } | ||
139 | + | ||
140 | + public void setId(Integer id) { | ||
141 | + this.id = id; | ||
142 | + } | ||
143 | + | ||
144 | + public String getGoodsShelfNo() { | ||
145 | + return goodsShelfNo; | ||
146 | + } | ||
147 | + | ||
148 | + public void setGoodsShelfNo(String goodsShelfNo) { | ||
149 | + this.goodsShelfNo = goodsShelfNo; | ||
150 | + } | ||
151 | + | ||
152 | + public Integer getIsEnable() { | ||
153 | + return isEnable; | ||
154 | + } | ||
155 | + | ||
156 | + public void setIsEnable(Integer isEnable) { | ||
157 | + this.isEnable = isEnable; | ||
158 | + } | ||
159 | + | ||
160 | + public Integer getIsLocked() { | ||
161 | + return isLocked; | ||
162 | + } | ||
163 | + | ||
164 | + public void setIsLocked(Integer isLocked) { | ||
165 | + this.isLocked = isLocked; | ||
166 | + } | ||
167 | + | ||
168 | + public Integer getNum() { | ||
169 | + return num; | ||
170 | + } | ||
171 | + | ||
172 | + public void setNum(Integer num) { | ||
173 | + this.num = num; | ||
174 | + } | ||
175 | + | ||
176 | + public Integer getIsEmpty() { | ||
177 | + return isEmpty; | ||
178 | + } | ||
179 | + | ||
180 | + public void setIsEmpty(Integer isEmpty) { | ||
181 | + this.isEmpty = isEmpty; | ||
182 | + } | ||
183 | +} |
src/main/java/com/huaheng/pc/config/points/mapper/PointsMapper.java
0 → 100644
1 | +package com.huaheng.pc.config.points.mapper; | ||
2 | + | ||
3 | + | ||
4 | +import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||
5 | +import com.huaheng.pc.config.points.domain.Points; | ||
6 | +import org.apache.ibatis.annotations.Param; | ||
7 | + | ||
8 | +import java.util.List; | ||
9 | + | ||
10 | +/** | ||
11 | + * 货架 数据层 | ||
12 | + * | ||
13 | + * @author ricard | ||
14 | + * @date 2019-12-26 | ||
15 | + */ | ||
16 | +public interface PointsMapper extends BaseMapper<Points> { | ||
17 | + | ||
18 | + //修改货架位置信息 | ||
19 | + int updatePoints(Points points); | ||
20 | + | ||
21 | + //修改所有货架的状态为初始状态 | ||
22 | + int updateAll(); | ||
23 | + | ||
24 | + int updateIsEmpty(@Param("list") List<String> list, @Param("isEmpty") Integer isEmpty); | ||
25 | +} |
src/main/java/com/huaheng/pc/config/points/service/PointsService.java
0 → 100644
1 | +package com.huaheng.pc.config.points.service; | ||
2 | + | ||
3 | + | ||
4 | +import com.baomidou.mybatisplus.extension.service.IService; | ||
5 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
6 | +import com.huaheng.pc.config.points.domain.Points; | ||
7 | + | ||
8 | +import java.util.List; | ||
9 | +import java.util.Map; | ||
10 | + | ||
11 | +/** | ||
12 | + * 货架 服务层 | ||
13 | + * | ||
14 | + * @author ricard | ||
15 | + * @date 2019-02-26 | ||
16 | + */ | ||
17 | + | ||
18 | +public interface PointsService extends IService<Points> { | ||
19 | + | ||
20 | + //修改所有货架的状态为初始状态 | ||
21 | + int updateAll(); | ||
22 | + | ||
23 | + //检查货架是否是空货架,并修改 | ||
24 | + AjaxResult detectShelf(); | ||
25 | + | ||
26 | +} |
src/main/java/com/huaheng/pc/config/points/service/PointsServiceImpl.java
0 → 100644
1 | +package com.huaheng.pc.config.points.service; | ||
2 | + | ||
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||
4 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
5 | +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||
6 | +import com.huaheng.common.constant.QuantityConstant; | ||
7 | +import com.huaheng.common.utils.security.ShiroUtils; | ||
8 | +import com.huaheng.framework.web.domain.AjaxResult; | ||
9 | +import com.huaheng.pc.config.container.domain.Container; | ||
10 | +import com.huaheng.pc.config.container.service.ContainerService; | ||
11 | +import com.huaheng.pc.config.points.domain.Points; | ||
12 | +import com.huaheng.pc.config.points.mapper.PointsMapper; | ||
13 | +import org.apache.commons.collections.ListUtils; | ||
14 | +import org.springframework.stereotype.Service; | ||
15 | + | ||
16 | +import javax.annotation.Resource; | ||
17 | +import java.util.ArrayList; | ||
18 | +import java.util.List; | ||
19 | + | ||
20 | + | ||
21 | +/** | ||
22 | + * 货架 服务层实现 | ||
23 | + * | ||
24 | + * @author ricard | ||
25 | + * @date 2019-12-26 | ||
26 | + */ | ||
27 | +@Service | ||
28 | +public class PointsServiceImpl extends ServiceImpl<PointsMapper,Points> implements PointsService{ | ||
29 | + | ||
30 | + @Resource | ||
31 | + private PointsMapper pointsMapper; | ||
32 | + @Resource | ||
33 | + private ContainerService containerService; | ||
34 | + | ||
35 | + @Override | ||
36 | + public int updateAll() { | ||
37 | + return pointsMapper.updateAll(); | ||
38 | + } | ||
39 | + | ||
40 | + | ||
41 | + | ||
42 | + @Override | ||
43 | + public AjaxResult detectShelf() { | ||
44 | + //查找为空的货架 | ||
45 | + List<Container> containers =containerService.selectListShelf(); | ||
46 | + List<String> stringList = new ArrayList<>(); | ||
47 | + for(Container item : containers){ | ||
48 | + stringList.add(item.getGoodsShelfNo()); | ||
49 | + } | ||
50 | + Integer flag = 1; | ||
51 | + | ||
52 | + //修改空货架状态 | ||
53 | + flag = pointsMapper.updateIsEmpty(stringList, QuantityConstant.POINTS_SOME); | ||
54 | + if(flag < 1){ | ||
55 | + return AjaxResult.error("修改空货架状态失败"); | ||
56 | + } | ||
57 | + | ||
58 | + | ||
59 | + //查找所以货架 | ||
60 | + LambdaQueryWrapper<Points> pointsLamb = Wrappers.lambdaQuery(); | ||
61 | + pointsLamb.eq(Points::getWarehouseCode,ShiroUtils.getWarehouseCode()); | ||
62 | + List<Points> pointsList = this.list(pointsLamb); | ||
63 | + | ||
64 | + //去重 | ||
65 | + List<String> list =new ArrayList<>(); | ||
66 | + for(Points item : pointsList){ | ||
67 | + list.add(item.getGoodsShelfNo()); | ||
68 | + } | ||
69 | + | ||
70 | + List<String> list1 = ListUtils.subtract(list,stringList); | ||
71 | + | ||
72 | + //修改非空货架 | ||
73 | + flag = pointsMapper.updateIsEmpty(list1,QuantityConstant.POINTS_EMPTY); | ||
74 | + if(flag < 1){ | ||
75 | + return AjaxResult.error("修改空货架状态失败"); | ||
76 | + } | ||
77 | + | ||
78 | + return AjaxResult.success("成功"); | ||
79 | + } | ||
80 | + | ||
81 | +} |
src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java
@@ -19,6 +19,8 @@ import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailServiceImpl; | @@ -19,6 +19,8 @@ import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailServiceImpl; | ||
19 | import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; | 19 | import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; |
20 | import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; | 20 | import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; |
21 | import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService; | 21 | import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService; |
22 | +import com.huaheng.pc.task.taskHeader.domain.TaskHeader; | ||
23 | +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; | ||
22 | import org.apache.shiro.authz.annotation.RequiresPermissions; | 24 | import org.apache.shiro.authz.annotation.RequiresPermissions; |
23 | import org.springframework.beans.factory.annotation.Autowired; | 25 | import org.springframework.beans.factory.annotation.Autowired; |
24 | import org.springframework.stereotype.Controller; | 26 | import org.springframework.stereotype.Controller; |
@@ -46,6 +48,8 @@ public class ShippingCombinationController extends BaseController { | @@ -46,6 +48,8 @@ public class ShippingCombinationController extends BaseController { | ||
46 | ShipmentHeaderService shipmentHeaderService; | 48 | ShipmentHeaderService shipmentHeaderService; |
47 | @Autowired | 49 | @Autowired |
48 | ShipmentPreferenceService shipmentPreferenceService; | 50 | ShipmentPreferenceService shipmentPreferenceService; |
51 | + @Autowired | ||
52 | + TaskHeaderService taskHeaderService; | ||
49 | 53 | ||
50 | 54 | ||
51 | /** | 55 | /** |
src/main/resources/mybatis/config/AddressMapper.xml
@@ -5,11 +5,12 @@ | @@ -5,11 +5,12 @@ | ||
5 | <!--@mbg.generated--> | 5 | <!--@mbg.generated--> |
6 | <id column="id" jdbcType="INTEGER" property="id" /> | 6 | <id column="id" jdbcType="INTEGER" property="id" /> |
7 | <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" /> | 7 | <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" /> |
8 | + <result column="number" jdbcType="INTEGER" property="number" /> | ||
8 | <result column="param" jdbcType="VARCHAR" property="param" /> | 9 | <result column="param" jdbcType="VARCHAR" property="param" /> |
9 | <result column="url" jdbcType="VARCHAR" property="url" /> | 10 | <result column="url" jdbcType="VARCHAR" property="url" /> |
10 | </resultMap> | 11 | </resultMap> |
11 | <sql id="Base_Column_List"> | 12 | <sql id="Base_Column_List"> |
12 | <!--@mbg.generated--> | 13 | <!--@mbg.generated--> |
13 | - id, warehouseCode, param,url | 14 | + id, warehouseCode,number, param,url |
14 | </sql> | 15 | </sql> |
15 | </mapper> | 16 | </mapper> |
16 | \ No newline at end of file | 17 | \ No newline at end of file |
src/main/resources/mybatis/config/ContainerMapper.xml
@@ -78,4 +78,13 @@ | @@ -78,4 +78,13 @@ | ||
78 | ) | 78 | ) |
79 | </foreach> | 79 | </foreach> |
80 | </insert> | 80 | </insert> |
81 | + | ||
82 | + <select id="selectListShelf" resultType="com.huaheng.pc.config.container.domain.Container"> | ||
83 | + SELECT | ||
84 | + g.goodsShelfNo | ||
85 | + FROM | ||
86 | + ( SELECT DISTINCT ( goodsShelfNo ) goodsShelfNo, COUNT( * ) cunt FROM container WHERE `status` = 'empty' AND type = 'A' GROUP BY goodsShelfNo ) g | ||
87 | + INNER JOIN ( SELECT DISTINCT ( goodsShelfNo ) goodsShelfNo, COUNT( * ) cunt FROM container WHERE type = 'A' GROUP BY goodsShelfNo ) s ON g.goodsShelfNo = s.goodsShelfNo | ||
88 | + AND g.cunt = s.cunt | ||
89 | + </select> | ||
81 | </mapper> | 90 | </mapper> |
82 | \ No newline at end of file | 91 | \ No newline at end of file |
src/main/resources/mybatis/config/PointsMapper.xml
0 → 100644
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.huaheng.pc.config.points.mapper.PointsMapper"> | ||
4 | + <resultMap id="BaseResultMap" type="com.huaheng.pc.config.points.domain.Points"> | ||
5 | + <!--@mbg.generated--> | ||
6 | + <id column="id" jdbcType="INTEGER" property="id" /> | ||
7 | + <result column="warehouseCode" jdbcType="VARCHAR" property="warehouseCode" /> | ||
8 | + <result column="companyCode" jdbcType="VARCHAR" property="companyCode" /> | ||
9 | + <result column="goodsShelfNo" jdbcType="VARCHAR" property="goodsShelfNo" /> | ||
10 | + <result column="intX" jdbcType="VARCHAR" property="intX" /> | ||
11 | + <result column="intY" jdbcType="VARCHAR" property="intY" /> | ||
12 | + <result column="oIntX" jdbcType="VARCHAR" property="oIntX" /> | ||
13 | + <result column="oIntY" jdbcType="VARCHAR" property="oIntY" /> | ||
14 | + <result column="num" jdbcType="INTEGER" property="num" /> | ||
15 | + <result column="isEmpty" jdbcType="INTEGER" property="isEmpty" /> | ||
16 | + <result column="isEnable" jdbcType="INTEGER" property="isEnable" /> | ||
17 | + <result column="isLocked" jdbcType="INTEGER" property="isLocked" /> | ||
18 | + </resultMap> | ||
19 | + <sql id="Base_Column_List"> | ||
20 | + <!--@mbg.generated--> | ||
21 | + warehouseCode,companyCode,goodsShelfNo,intX,intY,oIntX,oIntY,num,isEmpty,isEnable,isLocked | ||
22 | + </sql> | ||
23 | + | ||
24 | + | ||
25 | + <update id="updatePoints"> | ||
26 | + UPDATE points | ||
27 | + <set> | ||
28 | + <if test="isLocked != null"> | ||
29 | + isLocked = #{isLocked, jdbcType=INTEGER}, | ||
30 | + </if> | ||
31 | + <if test="intX != null"> | ||
32 | + intX = #{intX, jdbcType=VARCHAR}, | ||
33 | + </if> | ||
34 | + <if test="intY != null"> | ||
35 | + intY = #{intY, jdbcType=VARCHAR}, | ||
36 | + </if> | ||
37 | + <if test="oIntX != null"> | ||
38 | + oIntX = #{oIntX, jdbcType=VARCHAR}, | ||
39 | + </if> | ||
40 | + <if test="oIntY != null"> | ||
41 | + oIntY = #{oIntY, jdbcType=VARCHAR}, | ||
42 | + </if> | ||
43 | + <if test="num != null"> | ||
44 | + num = #{num, jdbcType=INTEGER}, | ||
45 | + </if> | ||
46 | + </set> | ||
47 | + where goodsShelfNo=#{goodsShelfNo} and warehouseCode=#{warehouseCode} | ||
48 | + </update> | ||
49 | + | ||
50 | + | ||
51 | + | ||
52 | + <update id="updateAll"> | ||
53 | + update points set isLocked = 0 | ||
54 | + </update> | ||
55 | + | ||
56 | + | ||
57 | + <update id="updateIsEmpty"> | ||
58 | + update points set isEmpty = #{isEmpty} | ||
59 | + WHERE goodsShelfNo IN | ||
60 | + <foreach collection="list" item="item" index="index" open="(" close=")" separator=","> | ||
61 | + #{item} | ||
62 | + </foreach> | ||
63 | + | ||
64 | + </update> | ||
65 | +</mapper> | ||
0 | \ No newline at end of file | 66 | \ No newline at end of file |
src/main/resources/static/huaheng.png
src/main/resources/templates/config/point/edit.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-zone-edit"> | ||
8 | + <div class="form-group"> | ||
9 | + <label class="col-sm-3 control-label">货架号:</label> | ||
10 | + <div class="col-sm-8"> | ||
11 | + <input id="goodsShelfNo" name="goodsShelfNo" class="form-control" type="text"> | ||
12 | + </div> | ||
13 | + </div> | ||
14 | + <div class="form-group"> | ||
15 | + <label class="col-sm-3 control-label">货主:</label> | ||
16 | + <div class="col-sm-8"> | ||
17 | + <select id="companyCode" name="companyCode" class="form-control" th:with="list=${@company.selectCompanyByCurrentUserId()}"> | ||
18 | + <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option> | ||
19 | + </select> | ||
20 | + </div> | ||
21 | + </div> | ||
22 | + <div class="form-group"> | ||
23 | + <div class="form-control-static col-sm-offset-9"> | ||
24 | + <button type="submit" class="btn btn-primary">提交</button> | ||
25 | + <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button> | ||
26 | + </div> | ||
27 | + </div> | ||
28 | + </form> | ||
29 | +</div> | ||
30 | +<div th:include="include::footer"></div> | ||
31 | +<script type="text/javascript"> | ||
32 | + let prefix = ctx + "config/point"; | ||
33 | + $("#form-zone-edit").validate({ | ||
34 | + rules:{ | ||
35 | + XX:{ | ||
36 | + required:true, | ||
37 | + }, | ||
38 | + }, | ||
39 | + submitHandler: function(form) { | ||
40 | + let tableValue = $.common.getTableValue("#form-zone-edit"); | ||
41 | + $.operate.save(prefix + "/edit", tableValue); | ||
42 | + } | ||
43 | + }); | ||
44 | + | ||
45 | + $(function () { | ||
46 | + $("#goodsShelfNo").val(window.parent.goodsShelfNos); | ||
47 | + $("select[name='companyCode']").change(function (e) { | ||
48 | + let companyCode=$("select[name='companyCode'] option:selected").attr('code'); | ||
49 | + $.ajax({ | ||
50 | + url: ctx + "receipt/receiptHeader/getwarehouse", | ||
51 | + type:'post', | ||
52 | + data:{code:companyCode}, | ||
53 | + success:function (response) { | ||
54 | + if(response.code===200){ | ||
55 | + $("select[name='uWarehouseCode']").children().remove(); | ||
56 | + $("select[name='uWarehouseCode']").append(`<option value="">所有</option>`); | ||
57 | + for (let item of response.data) { | ||
58 | + let option=`<option value="${item.uWarehouseCode}">${item.uWarehouseName}</option>`; | ||
59 | + $("select[name='uWarehouseCode']").append(option); | ||
60 | + } | ||
61 | + } | ||
62 | + else {$.modal.msgError(response.msg)} | ||
63 | + } | ||
64 | + }) | ||
65 | + }) | ||
66 | + }) | ||
67 | +</script> | ||
68 | +</body> | ||
69 | +</html> |
src/main/resources/templates/config/point/point.html
0 → 100644
1 | +<!DOCTYPE HTML> | ||
2 | +<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> | ||
3 | +<meta charset="utf-8"> | ||
4 | +<head th:include="include :: header"></head> | ||
5 | +<body class="gray-bg"> | ||
6 | +<div class="container-div"> | ||
7 | + <div class="row"> | ||
8 | + <div class="col-sm-12 select-info"> | ||
9 | + <form id="zone-form"> | ||
10 | + <div class="select-list"> | ||
11 | + <ul> | ||
12 | + <li> | ||
13 | + 货架号:<input type="text" id="goodsShelfNo" name="goodsShelfNo"/> | ||
14 | + </li> | ||
15 | + <li> | ||
16 | + 货主:<select name="companyCode" th:with="company=${@company.getEnableCompanyList()}"> | ||
17 | + <option value="">所有</option> | ||
18 | + <option th:each="e : ${company}" th:text="${e['name']}" th:value="${e['code']}"></option></select> | ||
19 | + </li> | ||
20 | + <li> | ||
21 | + <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 搜索</a> | ||
22 | + <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('zone-form')"><i class="fa fa-refresh"></i> 重置</a> | ||
23 | + </li> | ||
24 | + </ul> | ||
25 | + </div> | ||
26 | + </form> | ||
27 | + </div> | ||
28 | + | ||
29 | + <!--<div class="btn-group hidden-xs" id="toolbar" role="group">--> | ||
30 | + <!--<a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()" shiro:hasPermission="config:zone:add">--> | ||
31 | + <!--<i class="fa fa-plus"></i> 新增--> | ||
32 | + <!--</a>--> | ||
33 | + <!--<a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="config:zone:remove">--> | ||
34 | + <!--<i class="fa fa-trash-o"></i> 删除--> | ||
35 | + <!--</a>--> | ||
36 | + <!--</div>--> | ||
37 | + | ||
38 | + <div class="col-sm-12 select-info"> | ||
39 | + <a class="btn btn-outline btn-primary btn-rounded to-receive" onclick="restore()"> | ||
40 | + <i class="fa fa-paper-plane"></i> 状态恢复 | ||
41 | + </a> | ||
42 | + <a class="btn btn-outline btn-primary btn-rounded to-receive" onclick="detectShelf()"> | ||
43 | + <i class="fa fa-paper-plane"></i> 检测空货架 | ||
44 | + </a> | ||
45 | + <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table> | ||
46 | + </div> | ||
47 | + </div> | ||
48 | +</div> | ||
49 | +<div th:include="include :: footer"></div> | ||
50 | +<script th:inline="javascript"> | ||
51 | + var prefix = ctx + "config/point"; | ||
52 | + var goodsShelfNos=null; | ||
53 | + $(function() { | ||
54 | + let options = { | ||
55 | + url: prefix + "/list", | ||
56 | + createUrl: prefix + "/add", | ||
57 | + updateUrl: prefix + "/edit/{id}", | ||
58 | + removeUrl: prefix + "/remove", | ||
59 | + modalName: "货架", | ||
60 | + search: false, | ||
61 | + columns: [ | ||
62 | + // { | ||
63 | + // checkbox: true | ||
64 | + // }, | ||
65 | + { | ||
66 | + field : 'goodsShelfNo', | ||
67 | + title : '货架号', | ||
68 | + sortable:true | ||
69 | + }, | ||
70 | + { | ||
71 | + field : 'companyName', | ||
72 | + title : '货主名称', | ||
73 | + sortable:true | ||
74 | + }, | ||
75 | + { | ||
76 | + field : 'isEmpty', | ||
77 | + title : '是否空货架', | ||
78 | + sortable:true, | ||
79 | + formatter: function (value, item, index) { | ||
80 | + if (value==true) { | ||
81 | + return '<span class="badge" style="background-color: #00B83F;color: white;width: 36px;">' + ' 是 ' + '</span>'; | ||
82 | + } | ||
83 | + else if (value==false) { | ||
84 | + return '<span class="badge" style="background-color: #ff0000;color: white;width: 36px;">' + ' 否 ' + '</span>'; | ||
85 | + } | ||
86 | + } | ||
87 | + }, | ||
88 | + { | ||
89 | + title: '操作', | ||
90 | + align: 'center', | ||
91 | + formatter: function(value, row, index) { | ||
92 | + let actions = []; | ||
93 | + actions.push('<a class="btn btn-success btn-xs" onclick="Edit(\'' + row.id + '\' , \'' + row.goodsShelfNo + '\' )"><i class="fa fa-edit"></i>编辑</a> '); | ||
94 | + return actions.join(''); | ||
95 | + } | ||
96 | + } | ||
97 | + ] | ||
98 | + }; | ||
99 | + $.table.init(options); | ||
100 | + }); | ||
101 | + | ||
102 | + function Edit(id, code) { | ||
103 | + goodsShelfNos=code; | ||
104 | + $.operate.edit(id) | ||
105 | + } | ||
106 | + | ||
107 | + /* 恢复 */ | ||
108 | + function restore() { | ||
109 | + $.ajax({ | ||
110 | + url:prefix+'/restore', | ||
111 | + type:'post', | ||
112 | + success:function (res) { | ||
113 | + if(res.code==200){ | ||
114 | + $.table.refresh(); | ||
115 | + $.modal.msgSuccess(res.msg); | ||
116 | + } | ||
117 | + else{ | ||
118 | + $.modal.msgError(res.msg); | ||
119 | + } | ||
120 | + } | ||
121 | + }) | ||
122 | + } | ||
123 | + | ||
124 | + | ||
125 | + | ||
126 | + /* 检测货架装货状态 */ | ||
127 | + function detectShelf() { | ||
128 | + $.ajax({ | ||
129 | + url:prefix+'/detectShelf', | ||
130 | + type:'post', | ||
131 | + success:function (res) { | ||
132 | + if(res.code==200){ | ||
133 | + $.table.refresh(); | ||
134 | + $.modal.msgSuccess(res.msg); | ||
135 | + } | ||
136 | + else{ | ||
137 | + $.modal.msgError(res.msg); | ||
138 | + } | ||
139 | + } | ||
140 | + }) | ||
141 | + } | ||
142 | + | ||
143 | +</script> | ||
144 | +</body> | ||
145 | +</html> | ||
0 | \ No newline at end of file | 146 | \ No newline at end of file |
src/main/resources/templates/index.html
@@ -4,9 +4,9 @@ | @@ -4,9 +4,9 @@ | ||
4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
6 | <meta name="renderer" content="webkit"> | 6 | <meta name="renderer" content="webkit"> |
7 | - <title>政田WMS管理系统首页</title> | ||
8 | - <meta name="keywords" content="政田WMS管理系统首页"> | ||
9 | - <meta name="description" content="政田WMS管理系统首页"> | 7 | + <title>华恒WMS管理系统首页</title> |
8 | + <meta name="keywords" content="华恒WMS管理系统首页"> | ||
9 | + <meta name="description" content="华恒WMS管理系统首页"> | ||
10 | <!--[if lt IE 9]> | 10 | <!--[if lt IE 9]> |
11 | <meta http-equiv="refresh" content="0;ie.html"/> | 11 | <meta http-equiv="refresh" content="0;ie.html"/> |
12 | <![endif]--> | 12 | <![endif]--> |
@@ -31,7 +31,7 @@ | @@ -31,7 +31,7 @@ | ||
31 | <li class="nav-header"> | 31 | <li class="nav-header"> |
32 | <div class="dropdown profile-element"> | 32 | <div class="dropdown profile-element"> |
33 | <span class="pull-left" style="padding-right: 10px;"> | 33 | <span class="pull-left" style="padding-right: 10px;"> |
34 | - <img th:src="(${user.avatar} == '') ? 'img/profiles.jpg' : 'profile/' + ${user.avatar}" alt="image" class="img-circle" height="45" width="45"/> | 34 | + <img th:src="(${user.avatar} == '') ? 'img/profile.jpg' : 'profile/' + ${user.avatar}" alt="image" class="img-circle" height="45" width="45"/> |
35 | </span> | 35 | </span> |
36 | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> | 36 | <a href="#" class="dropdown-toggle" data-toggle="dropdown"> |
37 | <span class="pull-left clear"> | 37 | <span class="pull-left clear"> |
src/main/resources/templates/login.html
@@ -4,8 +4,8 @@ | @@ -4,8 +4,8 @@ | ||
4 | <meta charset="utf-8"> | 4 | <meta charset="utf-8"> |
5 | <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> | 5 | <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> |
6 | 6 | ||
7 | - <title>政田WMS仓库管理系统 - 登录</title> | ||
8 | - <meta name="keywords" content="政田WMS管理系统"> | 7 | + <title>华恒WMS仓库管理系统 - 登录</title> |
8 | + <meta name="keywords" content="华恒WMS管理系统"> | ||
9 | <meta name="description" content="huaheng"> | 9 | <meta name="description" content="huaheng"> |
10 | <link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/> | 10 | <link href="../static/css/bootstrap.min.css" th:href="@{css/bootstrap.min.css}" rel="stylesheet"/> |
11 | <link href="../static/css/font-awesome.css" th:href="@{css/font-awesome.css}" rel="stylesheet"/> | 11 | <link href="../static/css/font-awesome.css" th:href="@{css/font-awesome.css}" rel="stylesheet"/> |
@@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
38 | <h1><img alt="[ 华恒 ]" src="../static/huaheng.png" th:src="@{/huaheng.png}"></h1> | 38 | <h1><img alt="[ 华恒 ]" src="../static/huaheng.png" th:src="@{/huaheng.png}"></h1> |
39 | </div> | 39 | </div> |
40 | <div class="m-b"></div> | 40 | <div class="m-b"></div> |
41 | - <h4>欢迎使用政田WMS仓库管理系统_v2.0</h4> | 41 | + <h4>欢迎使用华恒WMS仓库管理系统_v2.0</h4> |
42 | <!--<ul class="m-b">--> | 42 | <!--<ul class="m-b">--> |
43 | <!--<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>--> | 43 | <!--<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> SpringBoot</li>--> |
44 | <!--<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>--> | 44 | <!--<li><i class="fa fa-arrow-circle-o-right m-r-xs"></i> Mybatis</li>--> |
src/main/resources/templates/system/user/edit.html
@@ -58,14 +58,14 @@ | @@ -58,14 +58,14 @@ | ||
58 | </div> | 58 | </div> |
59 | </div> | 59 | </div> |
60 | </div> | 60 | </div> |
61 | - <div class="form-group"> | ||
62 | - <label class="col-sm-3 control-label">货主:</label> | ||
63 | - <div class="col-sm-8"> | ||
64 | - <label th:each="company:${companys}" class="checkbox-inline i-checks"> | ||
65 | - <input name="company" type="checkbox" th:value="${company.id}" th:text=" ${company.name}" th:checked="${company.flag}" > | ||
66 | - </label> | ||
67 | - </div> | ||
68 | - </div> | 61 | + <!--<div class="form-group">--> |
62 | + <!--<label class="col-sm-3 control-label">货主:</label>--> | ||
63 | + <!--<div class="col-sm-8">--> | ||
64 | + <!--<label th:each="company:${companys}" class="checkbox-inline i-checks">--> | ||
65 | + <!--<input name="company" type="checkbox" th:value="${company.id}" th:text=" ${company.name}" th:checked="${company.flag}" >--> | ||
66 | + <!--</label>--> | ||
67 | + <!--</div>--> | ||
68 | + <!--</div>--> | ||
69 | 69 | ||
70 | <div class="form-group"> | 70 | <div class="form-group"> |
71 | <label class="col-sm-3 control-label">仓库:</label> | 71 | <label class="col-sm-3 control-label">仓库:</label> |
src/main/resources/templates/system/user/profile/profile.html
@@ -35,7 +35,7 @@ | @@ -35,7 +35,7 @@ | ||
35 | <div class="contact-box"> | 35 | <div class="contact-box"> |
36 | <div class="col-sm-4"> | 36 | <div class="col-sm-4"> |
37 | <div class="text-center"> | 37 | <div class="text-center"> |
38 | - <img alt="image" class="img-circle m-t-xs img-responsive" th:src="(${user.avatar} == '') ? '../../img/profiles.jpg' : '/profile/' + ${user.avatar}"> | 38 | + <img alt="image" class="img-circle m-t-xs img-responsive" th:src="(${user.avatar} == '') ? '../../img/profile.jpg' : '/profile/' + ${user.avatar}"> |
39 | <div class="m-t-xs font-bold">[[${user.loginIp}]]</div> | 39 | <div class="m-t-xs font-bold">[[${user.loginIp}]]</div> |
40 | </div> | 40 | </div> |
41 | </div> | 41 | </div> |