Commit 693b4cd0aa709c135350f29af7f84d0d8ed7434e

Authored by 易文鹏
1 parent 931c454f

feat:1、库存交易记录新增库区;2、母件编码和母件名称去重复;3、出库单新增颜色信息字段。

Showing 17 changed files with 524 additions and 392 deletions
src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java
... ... @@ -31,7 +31,9 @@ import org.springframework.transaction.annotation.Transactional;
31 31 import javax.annotation.Resource;
32 32 import java.math.BigDecimal;
33 33 import java.util.ArrayList;
  34 +import java.util.HashSet;
34 35 import java.util.List;
  36 +import java.util.Set;
35 37 import java.util.stream.Collectors;
36 38  
37 39 @Service
... ... @@ -186,20 +188,19 @@ public class MesServiceImpl implements IMesService {
186 188 public AjaxResult shipment(ReceiptDTO receiptDTO) {
187 189 Header header = receiptDTO.getShipmentHeader();
188 190 List<Detail> details = receiptDTO.getShipemtnDetails();
189   -
190   - LambdaQueryWrapper<ShipmentHeader> query = Wrappers.lambdaQuery();
191   - query.eq(ShipmentHeader::getCode, header.getReferCode()).eq(ShipmentHeader::getShipmentType, header.getRefeCodeType());
192   - List<ShipmentHeader> list = shipmentHeaderService.list(query);
193   - if (list.size() > 0) {
  191 + List<ShipmentHeader> list = shipmentHeaderService.list(new LambdaQueryWrapper<ShipmentHeader>()
  192 + .eq(ShipmentHeader::getCode, header.getReferCode())
  193 + .eq(ShipmentHeader::getShipmentType, header.getRefeCodeType()));
  194 + if (!list.isEmpty()) {
194 195 return AjaxResult.error("添加出库单: 上游单号referCode重复[ " + header.getReferCode() + " ],请勿重复添加。");
195 196 }
196 197 AjaxResult ajaxResult = new AjaxResult();
  198 + //校验参数
197 199 boolean inNull = enterIsNull(ajaxResult, header, details);
198 200 if (inNull) {
199 201 return ajaxResult;
200 202 }
201 203 ShipmentHeader shipmentHeader = new ShipmentHeader();
202   - // shipmentHeader.setId(header.getId());
203 204 if (StringUtils.isNotEmpty(header.getMOMID())) {
204 205 shipmentHeader.setMOMID(header.getMOMID());
205 206 }
... ... @@ -219,14 +220,30 @@ public class MesServiceImpl implements IMesService {
219 220 shipmentHeader.setCreatorCode(header.getCreatorCode());
220 221 shipmentHeader.setCreatorName(header.getCreatorName());
221 222 shipmentHeader.setRequestedStartDate(header.getRequestedStartDate());
222   - shipmentHeader.setSuperiorCode(header.getSuperiorCode());
  223 +
  224 + //母件编码和母件名称去重复
  225 + String[] superiorCodeValue = header.getSuperiorCode().split(",");
  226 + String[] superiorNameValue = header.getSuperiorName().split(",");
  227 + Set<String> uniqueSuperiorCodeValue = new HashSet<>();
  228 + Set<String> uniqueSuperiorNameValue = new HashSet<>();
  229 + for (String value : superiorCodeValue) {
  230 + uniqueSuperiorCodeValue.add(value.trim());
  231 + }
  232 + for (String value : superiorNameValue) {
  233 + uniqueSuperiorNameValue.add(value.trim());
  234 + }
  235 + String superiorCode = String.join(",", uniqueSuperiorCodeValue);
  236 + String superiorName = String.join(",", uniqueSuperiorNameValue);
  237 + shipmentHeader.setSuperiorCode(superiorCode);
  238 + shipmentHeader.setSuperiorName(superiorName);
  239 +
  240 +
223 241 if (StringUtils.isNotEmpty(header.getTransferWarehouseName())) {
224 242 shipmentHeader.setTransferWarehouseName(header.getTransferWarehouseName());
225 243 }
226 244 if (StringUtils.isNotEmpty(header.getTransferWarehouseCode())) {
227 245 shipmentHeader.setTransferWarehouseCode(header.getTransferWarehouseCode());
228 246 }
229   - shipmentHeader.setSuperiorName(header.getSuperiorName());
230 247 shipmentHeader.setShipmentNote(header.getShipmentNote());
231 248 shipmentHeader.setRequestedDeliveryDate(header.getRequestedDeliveryDate());
232 249 if (StringUtils.isNotEmpty(header.getTransferWarehouseCode())) {
... ... @@ -295,6 +312,10 @@ public class MesServiceImpl implements IMesService {
295 312 if (!success) {
296 313 throw new ServiceException("生成出库单详情失败");
297 314 }
  315 +
  316 +
  317 + //如果通知单号和车间、仓库相同,自动合并单据
  318 +
298 319 return AjaxResult.success(receiptDTO);
299 320 }
300 321  
... ...
src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
... ... @@ -40,7 +40,6 @@ import java.util.List;
40 40 public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, AdjustDetail> implements AdjustDetailService {
41 41  
42 42  
43   -
44 43 @Resource
45 44 private CycleCountDetailService cycleCountDetailService;
46 45 @Resource
... ... @@ -61,12 +60,9 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
61 60 private ContainerService containerService;
62 61  
63 62  
64   -
65   -
66   -
67   -
68 63 /**
69   - *新增调整明细
  64 + * 新增调整明细
  65 + *
70 66 * @param adjustDetail
71 67 * @return
72 68 */
... ... @@ -82,38 +78,38 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
82 78 LambdaQueryWrapper<AdjustHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(adjustHeader);
83 79 adjustHeader = adjustHeaderService.getOne(lambdaQueryWrapper);
84 80 //检查库存
85   - if((adjustDetail.getInventoryDetailId()) != null){
  81 + if ((adjustDetail.getInventoryDetailId()) != null) {
86 82 InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
87   - if(inventoryDetail == null){
  83 + if (inventoryDetail == null) {
88 84 return AjaxResult.error("没有该条库存明细");
89 85 }
90 86 }
91 87 //明细单据的上层单编码需要和主单一直,主单空值则不判断
92   - if(StringUtils.isNotEmpty(adjustHeader.getCycleCountHeaderCode()) || StringUtils.isNotEmpty(adjustHeader.getCheckCode())){
  88 + if (StringUtils.isNotEmpty(adjustHeader.getCycleCountHeaderCode()) || StringUtils.isNotEmpty(adjustHeader.getCheckCode())) {
93 89 adjustDetail.setCycleCountHeaderCode(adjustHeader.getCycleCountHeaderCode());
94 90 adjustDetail.setCheckCode(adjustHeader.getCheckCode());
95 91 }
96 92 //检查盘点单
97   - if(StringUtils.isNotEmpty(adjustDetail.getCycleCountHeaderCode())){
98   - CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(adjustDetail.getCheckDetailId());
99   - if(cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountHeaderCode())){
100   - return AjaxResult.error("盘点单错误,请核对盘点单据!");
  93 + if (StringUtils.isNotEmpty(adjustDetail.getCycleCountHeaderCode())) {
  94 + CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(adjustDetail.getCheckDetailId());
  95 + if (cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountHeaderCode())) {
  96 + return AjaxResult.error("盘点单错误,请核对盘点单据!");
101 97 }
102 98 }
103 99 //检查质检单
104   - if(StringUtils.isNotEmpty(adjustDetail.getCheckCode())){
  100 + if (StringUtils.isNotEmpty(adjustDetail.getCheckCode())) {
105 101 CheckDetail checkDetail = checkDetailService.getById(adjustDetail.getCheckDetailId());
106   - if(checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())){
  102 + if (checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())) {
107 103 return AjaxResult.error("质检单错误,请核对质检单据!");
108 104 }
109 105 }
110 106 //检查物料
111 107 Material material = materialService.getMaterialByCode(adjustDetail.getMaterialCode());
112   - if(material != null){
113   - if(!material.getName().equals(adjustDetail.getMaterialName())){
114   - return AjaxResult.error("物料名称错误!");
  108 + if (material != null) {
  109 + if (!material.getName().equals(adjustDetail.getMaterialName())) {
  110 + return AjaxResult.error("物料名称错误!");
115 111 }
116   - }else{
  112 + } else {
117 113 return AjaxResult.error("物料编码错误!");
118 114 }
119 115 //调整数量
... ... @@ -133,6 +129,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
133 129  
134 130 /**
135 131 * 调整审批
  132 + *
136 133 * @param adjustDetail
137 134 * @return
138 135 */
... ... @@ -140,7 +137,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
140 137 @Override
141 138 public AjaxResult adjustAgree(AdjustDetail adjustDetail) {
142 139 //修改状态,审批人栏填入名称,修改状态
143   - if(adjustDetail.getStatus() > 1){
  140 + if (adjustDetail.getStatus() > 1) {
144 141 return AjaxResult.error("单据状态无法审批!");
145 142 }
146 143 adjustDetail.setAgreeBy(ShiroUtils.getName());
... ... @@ -155,17 +152,17 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
155 152  
156 153 /**
157 154 * 修改调整数量
158   - * */
  155 + */
159 156 @Override
160 157 public AjaxResult editSave(AdjustDetail adjustDetail) {
161   - //调整数量和货主,供应商
162   - //根据ID修改
  158 + //调整数量和货主,供应商
  159 + //根据ID修改
163 160 BigDecimal t = adjustDetail.getToQty().subtract(adjustDetail.getFromQty());
164 161 adjustDetail.setGapQty(t);
165   - Boolean j = this.updateById(adjustDetail);
166   - if(!j){
167   - throw new ServiceException("修改调账明细失败!");
168   - }
  162 + Boolean j = this.updateById(adjustDetail);
  163 + if (!j) {
  164 + throw new ServiceException("修改调账明细失败!");
  165 + }
169 166 return AjaxResult.success("修改成功");
170 167 }
171 168  
... ... @@ -174,157 +171,160 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
174 171 * 调整库存
175 172 * 调整数量,调整库存状态
176 173 * 调整插入库存
  174 + *
177 175 * @param adjustDetail
178 176 * @return
179 177 */
180 178 @Transactional
181 179 @Override
182 180 public AjaxResult updateAdjustDetail(AdjustDetail adjustDetail) {
183   - if(adjustDetail.getStatus() == 1){
184   - AjaxResult.error("该单据已调整,不允许再次调整!" );
185   - }
  181 + if (adjustDetail.getStatus() == 1) {
  182 + AjaxResult.error("该单据已调整,不允许再次调整!");
  183 + }
186 184 String containerCode = adjustDetail.getContainerCode();
187 185 Container container = containerService.getContainerByCode(containerCode);
188 186 adjustDetail.setLocationCode(container.getLocationCode());
189 187 //调整单中不带库存明细时不查询
190   - if(adjustDetail.getInventoryDetailId() != null && adjustDetail.getInventoryDetailId() != 0) {
191   - InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
192   - if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
193   - !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
194   - return AjaxResult.error("调整单和所调整库存的库位容器不符,前检查数据");
195   - }
196   - //验证该条库存是不是正在使用,验证库存明细
197   - Location location = new Location();
198   - location.setCode(inventoryDetail.getLocationCode());
199   - location.setWarehouseCode(inventoryDetail.getWarehouseCode());
200   - LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
201   - location = locationService.getOne(lambdaQueryWrapper);
202   - if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(location.getStatus())) {
203   - return AjaxResult.error (inventoryDetail.getId() + "库位非空闲,请等待其他任务完成再进行调整!");
204   - }
205   - //判断调整库存状态还是数量
206   - if ((adjustDetail.getToQty() != null || adjustDetail.getGapQty() != null) &&!"manual".equals(adjustDetail.getUserDef3())) {
207   - //调整数量
208   - this.updateAdjustDetailNumber(adjustDetail, inventoryDetail);
209   - }
210   - if (!adjustDetail.getFromInventorySts().equals(adjustDetail.getToInventorySts())) {
211   - //调整库存状态
212   - this.updateAdjustDetailState(adjustDetail, inventoryDetail);
213   - }
214   - }else{
215   - String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
216   - if(StringUtils.isNotEmpty(fromQtyString) && !"manual".equals(adjustDetail.getUserDef3())){
217   - //调整插入库存
218   - updateAdjustDetailInsert(adjustDetail);
219   - }
  188 + if (adjustDetail.getInventoryDetailId() != null && adjustDetail.getInventoryDetailId() != 0) {
  189 + InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
  190 + if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
  191 + !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
  192 + return AjaxResult.error("调整单和所调整库存的库位容器不符,前检查数据");
220 193 }
221   -
222   - if ("manual".equals(adjustDetail.getUserDef3())){
223   - LambdaQueryWrapper<InventoryDetail>queryWrapper=Wrappers.lambdaQuery();
224   - queryWrapper.eq(InventoryDetail::getContainerCode,adjustDetail.getContainerCode())
225   - .eq(InventoryDetail::getLocationCode,adjustDetail.getLocationCode())
226   - .eq(InventoryDetail::getCompanyCode,adjustDetail.getCompanyCode()).last("limit 1");
227   - InventoryDetail inventoryDetail=inventoryDetailService.getOne(queryWrapper);
228   - if (StringUtils.isNotNull(inventoryDetail)){
229   - //新增库存
230   - InventoryDetail insertDetail=new InventoryDetail();
231   - insertDetail.setMaterialCode(adjustDetail.getMaterialCode());
232   - insertDetail.setMaterialUnit(adjustDetail.getMaterialUnit());
233   - insertDetail.setMaterialName(adjustDetail.getMaterialName());
234   - insertDetail.setQty(adjustDetail.getToQty());
235   - insertDetail.setMaterialSpec(adjustDetail.getMaterialSpec());
236   - insertDetail.setContainerCode(inventoryDetail.getContainerCode());
237   - insertDetail.setLocationCode(inventoryDetail.getLocationCode());
238   - insertDetail.setInventoryHeaderId(inventoryDetail.getInventoryHeaderId());
239   - insertDetail.setCompanyCode(inventoryDetail.getCompanyCode());
240   - insertDetail.setInventorySts(inventoryDetail.getInventorySts());
241   - insertDetail.setWarehouseCode(inventoryDetail.getWarehouseCode());
242   - insertDetail.setZoneCode(inventoryDetail.getZoneCode());
243   - insertDetail.setCreatedBy(ShiroUtils.getName());
244   - insertDetail.setLastUpdatedBy(ShiroUtils.getName());
245   - insertDetail.setLastUpdatedByName(ShiroUtils.getName());
246   - insertDetail.setZoneCode(inventoryDetail.getZoneCode());
247   - insertDetail.setTaskQty(new BigDecimal(0));
248   - insertDetail.setReceiptDetailId(0);
249   - insertDetail.setReceiptCode("0");
250   - insertDetail.setInventorySts(QuantityConstant.GOOD);
251   - inventoryDetailService.save(insertDetail);
252   - adjustDetail.setInventoryDetailId(insertDetail.getId());
253   -
254   - //写入库存交易
255   - //调整入
256   - InventoryTransaction inventoryTransaction = new InventoryTransaction();
257   - inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
258   - inventoryTransaction.setWarehouseCode(insertDetail.getWarehouseCode());
259   - inventoryTransaction.setCompanyCode(insertDetail.getCompanyCode());
260   - inventoryTransaction.setLocationCode(insertDetail.getLocationCode());
261   - inventoryTransaction.setContainerCode(insertDetail.getContainerCode());
262   - inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
263   - inventoryTransaction.setMaterialCode(insertDetail.getMaterialCode());
264   - inventoryTransaction.setMaterialName(insertDetail.getMaterialName());
265   - inventoryTransaction.setMaterialSpec(insertDetail.getMaterialSpec());
266   - inventoryTransaction.setMaterialUnit(insertDetail.getMaterialUnit());
267   - inventoryTransaction.setTaskQty(adjustDetail.getToQty());
268   - inventoryTransaction.setInventorySts(insertDetail.getInventorySts());//状态
269   - inventoryTransaction.setReferCode(insertDetail.getReferCode());
270   - inventoryTransaction.setReferDetailId(insertDetail.getReferDetailId());
271   - inventoryTransaction.setBatch(insertDetail.getBatch());
272   - inventoryTransaction.setLot(insertDetail.getLot());
273   - inventoryTransaction.setProjectNo(insertDetail.getProjectNo());
274   - inventoryTransaction.setQcCheck(insertDetail.getQcCheck());
275   - inventoryTransaction.setWeight(insertDetail.getWeight());
276   - inventoryTransaction.setManufactureDate(insertDetail.getManufactureDate());
277   - inventoryTransaction.setExpirationDate(insertDetail.getExpirationDate());
278   - inventoryTransaction.setAgingDate(insertDetail.getCreated());
279   - inventoryTransaction.setAttributeId(insertDetail.getAttributeId());
280   - inventoryTransaction.setAttribute1(insertDetail.getAttribute1());
281   - inventoryTransaction.setAttribute2(insertDetail.getAttribute2());
282   - inventoryTransaction.setAttribute3(insertDetail.getAttribute3());
283   - inventoryTransaction.setCreated(new Date());
284   - inventoryTransaction.setCreatedBy(ShiroUtils.getName());
285   - inventoryTransaction.setBillDetailId(insertDetail.getReceiptDetailId());
286   - inventoryTransaction.setSupplierCode(insertDetail.getSupplierCode());
287   - inventoryTransactionService.saveOrUpdate(inventoryTransaction);
288   - }
  194 + //验证该条库存是不是正在使用,验证库存明细
  195 + Location location = new Location();
  196 + location.setCode(inventoryDetail.getLocationCode());
  197 + location.setWarehouseCode(inventoryDetail.getWarehouseCode());
  198 + LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
  199 + location = locationService.getOne(lambdaQueryWrapper);
  200 + if (!QuantityConstant.STATUS_LOCATION_EMPTY.equals(location.getStatus())) {
  201 + return AjaxResult.error(inventoryDetail.getId() + "库位非空闲,请等待其他任务完成再进行调整!");
  202 + }
  203 + //判断调整库存状态还是数量
  204 + if ((adjustDetail.getToQty() != null || adjustDetail.getGapQty() != null) && !"manual".equals(adjustDetail.getUserDef3())) {
  205 + //调整数量
  206 + this.updateAdjustDetailNumber(adjustDetail, inventoryDetail);
  207 + }
  208 + if (!adjustDetail.getFromInventorySts().equals(adjustDetail.getToInventorySts())) {
  209 + //调整库存状态
  210 + this.updateAdjustDetailState(adjustDetail, inventoryDetail);
  211 + }
  212 + } else {
  213 + String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
  214 + if (StringUtils.isNotEmpty(fromQtyString) && !"manual".equals(adjustDetail.getUserDef3())) {
  215 + //调整插入库存
  216 + updateAdjustDetailInsert(adjustDetail);
289 217 }
290   - //修改调整单明细状态
291   - adjustDetail.setStatus(3);
292   - adjustDetail.setLastUpdatedBy(ShiroUtils.getName());
293   - adjustDetail.setLastUpdated(new Date());
294   - this.saveOrUpdate(adjustDetail);
295   - //判断调整单明细是否全部已批准
296   - List<AdjustDetail> list = this.list(new LambdaQueryWrapper<AdjustDetail>()
297   - .eq(AdjustDetail::getAdjustCode, adjustDetail.getAdjustCode()));
298   - boolean isFlag = false;
299   - for (AdjustDetail detail : list) {
300   - if(detail.getStatus()!=3){
301   - isFlag = true;
302   - }
  218 + }
  219 +
  220 + if ("manual".equals(adjustDetail.getUserDef3())) {
  221 + LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
  222 + queryWrapper.eq(InventoryDetail::getContainerCode, adjustDetail.getContainerCode())
  223 + .eq(InventoryDetail::getLocationCode, adjustDetail.getLocationCode())
  224 + .eq(InventoryDetail::getCompanyCode, adjustDetail.getCompanyCode()).last("limit 1");
  225 + InventoryDetail inventoryDetail = inventoryDetailService.getOne(queryWrapper);
  226 + if (StringUtils.isNotNull(inventoryDetail)) {
  227 + //新增库存
  228 + InventoryDetail insertDetail = new InventoryDetail();
  229 + insertDetail.setMaterialCode(adjustDetail.getMaterialCode());
  230 + insertDetail.setMaterialUnit(adjustDetail.getMaterialUnit());
  231 + insertDetail.setMaterialName(adjustDetail.getMaterialName());
  232 + insertDetail.setQty(adjustDetail.getToQty());
  233 + insertDetail.setMaterialSpec(adjustDetail.getMaterialSpec());
  234 + insertDetail.setContainerCode(inventoryDetail.getContainerCode());
  235 + insertDetail.setLocationCode(inventoryDetail.getLocationCode());
  236 + insertDetail.setInventoryHeaderId(inventoryDetail.getInventoryHeaderId());
  237 + insertDetail.setCompanyCode(inventoryDetail.getCompanyCode());
  238 + insertDetail.setInventorySts(inventoryDetail.getInventorySts());
  239 + insertDetail.setWarehouseCode(inventoryDetail.getWarehouseCode());
  240 + insertDetail.setZoneCode(inventoryDetail.getZoneCode());
  241 + insertDetail.setCreatedBy(ShiroUtils.getName());
  242 + insertDetail.setLastUpdatedBy(ShiroUtils.getName());
  243 + insertDetail.setLastUpdatedByName(ShiroUtils.getName());
  244 + insertDetail.setZoneCode(inventoryDetail.getZoneCode());
  245 + insertDetail.setTaskQty(new BigDecimal(0));
  246 + insertDetail.setReceiptDetailId(0);
  247 + insertDetail.setReceiptCode("0");
  248 + insertDetail.setInventorySts(QuantityConstant.GOOD);
  249 + inventoryDetailService.save(insertDetail);
  250 + adjustDetail.setInventoryDetailId(insertDetail.getId());
  251 +
  252 + //写入库存交易
  253 + //调整入
  254 + InventoryTransaction inventoryTransaction = new InventoryTransaction();
  255 + inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
  256 + inventoryTransaction.setWarehouseCode(insertDetail.getWarehouseCode());
  257 + inventoryTransaction.setCompanyCode(insertDetail.getCompanyCode());
  258 + inventoryTransaction.setLocationCode(insertDetail.getLocationCode());
  259 + inventoryTransaction.setContainerCode(insertDetail.getContainerCode());
  260 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
  261 + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
  262 + inventoryTransaction.setMaterialCode(insertDetail.getMaterialCode());
  263 + inventoryTransaction.setMaterialName(insertDetail.getMaterialName());
  264 + inventoryTransaction.setMaterialSpec(insertDetail.getMaterialSpec());
  265 + inventoryTransaction.setMaterialUnit(insertDetail.getMaterialUnit());
  266 + inventoryTransaction.setTaskQty(adjustDetail.getToQty());
  267 + inventoryTransaction.setInventorySts(insertDetail.getInventorySts());//状态
  268 + inventoryTransaction.setReferCode(insertDetail.getReferCode());
  269 + inventoryTransaction.setReferDetailId(insertDetail.getReferDetailId());
  270 + inventoryTransaction.setBatch(insertDetail.getBatch());
  271 + inventoryTransaction.setLot(insertDetail.getLot());
  272 + inventoryTransaction.setProjectNo(insertDetail.getProjectNo());
  273 + inventoryTransaction.setQcCheck(insertDetail.getQcCheck());
  274 + inventoryTransaction.setWeight(insertDetail.getWeight());
  275 + inventoryTransaction.setManufactureDate(insertDetail.getManufactureDate());
  276 + inventoryTransaction.setExpirationDate(insertDetail.getExpirationDate());
  277 + inventoryTransaction.setAgingDate(insertDetail.getCreated());
  278 + inventoryTransaction.setAttributeId(insertDetail.getAttributeId());
  279 + inventoryTransaction.setAttribute1(insertDetail.getAttribute1());
  280 + inventoryTransaction.setAttribute2(insertDetail.getAttribute2());
  281 + inventoryTransaction.setAttribute3(insertDetail.getAttribute3());
  282 + inventoryTransaction.setCreated(new Date());
  283 + inventoryTransaction.setCreatedBy(ShiroUtils.getName());
  284 + inventoryTransaction.setBillDetailId(insertDetail.getReceiptDetailId());
  285 + inventoryTransaction.setSupplierCode(insertDetail.getSupplierCode());
  286 + inventoryTransactionService.saveOrUpdate(inventoryTransaction);
303 287 }
304   - if(isFlag){
305   - return AjaxResult.success("调整库存成功!");
  288 + }
  289 + //修改调整单明细状态
  290 + adjustDetail.setStatus(3);
  291 + adjustDetail.setLastUpdatedBy(ShiroUtils.getName());
  292 + adjustDetail.setLastUpdated(new Date());
  293 + this.saveOrUpdate(adjustDetail);
  294 + //判断调整单明细是否全部已批准
  295 + List<AdjustDetail> list = this.list(new LambdaQueryWrapper<AdjustDetail>()
  296 + .eq(AdjustDetail::getAdjustCode, adjustDetail.getAdjustCode()));
  297 + boolean isFlag = false;
  298 + for (AdjustDetail detail : list) {
  299 + if (detail.getStatus() != 3) {
  300 + isFlag = true;
306 301 }
307   - //已批准更新 调整单头
308   - AdjustHeader adjustHeader = adjustHeaderService.getOne(new LambdaQueryWrapper<AdjustHeader>()
309   - .eq(AdjustHeader::getCode, adjustDetail.getAdjustCode()));
310   - adjustHeader.setProcessStamp("100");
311   - adjustHeaderService.updateById(adjustHeader);
  302 + }
  303 + if (isFlag) {
312 304 return AjaxResult.success("调整库存成功!");
  305 + }
  306 + //已批准更新 调整单头
  307 + AdjustHeader adjustHeader = adjustHeaderService.getOne(new LambdaQueryWrapper<AdjustHeader>()
  308 + .eq(AdjustHeader::getCode, adjustDetail.getAdjustCode()));
  309 + adjustHeader.setProcessStamp("100");
  310 + adjustHeaderService.updateById(adjustHeader);
  311 + return AjaxResult.success("调整库存成功!");
313 312 }
314 313  
315 314  
316 315 /**
317 316 * 调整修改库存数量
  317 + *
318 318 * @param adjustDetail
319 319 */
320 320 @Transactional
321   - public void updateAdjustDetailNumber (AdjustDetail adjustDetail, InventoryDetail inventoryDetail){
  321 + public void updateAdjustDetailNumber(AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
322 322 /*修改库存数量,调整单据状态,写入库存交易*/
323 323  
324 324 /*调整后的数量写入库存*/
325 325 //比较大小可以用 .compareTo()返回值 -1 小于 0 等于 1 大于
326 326 //Bigdecimal 自带运算方法.add加法 .subtract减法
327   - if(adjustDetail.getToQty().compareTo(BigDecimal.ZERO) == 0){
  327 + if (adjustDetail.getToQty().compareTo(BigDecimal.ZERO) == 0) {
328 328 //当调整后数量为0时,直接删除该条库存,并写入库存交易
329 329 //删除库存,并查询当前库位还有没有其他物料,没有则删除库存头,恢复容器和库位状态
330 330 InventoryDetail inv = new InventoryDetail();
... ... @@ -334,36 +334,38 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
334 334 LambdaQueryWrapper<InventoryDetail> lamdDetail = Wrappers.lambdaQuery(inv);
335 335 List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(lamdDetail);
336 336 inventoryDetailService.removeById(adjustDetail.getInventoryDetailId());//删除实际库存数量为0的库存明细
337   - if(inventoryDetailList.size() == 0){
  337 + if (inventoryDetailList.size() == 0) {
338 338 //恢复库位和容器状态,删除库存头
339 339 inventoryHeaderService.removeById(inventoryDetail.getInventoryHeaderId());
340 340 locationService.updateContainerCodeAndStatus(inventoryDetail.getLocationCode(),
341   - "",QuantityConstant.STATUS_LOCATION_EMPTY);
  341 + "", QuantityConstant.STATUS_LOCATION_EMPTY);
342 342 containerService.updateLocationCodeAndStatus(inventoryDetail.getContainerCode(),
343   - "",QuantityConstant.STATUS_CONTAINER_EMPTY);
  343 + "", QuantityConstant.STATUS_CONTAINER_EMPTY);
344 344 }
345   - }else{
  345 + } else {
346 346 //修改库存
347 347 //BigDecimal temp =(adjustDetail.getFromQty()).add(adjustDetail.getGapQty());
348 348 inventoryDetail.setQty(adjustDetail.getToQty());//调整后的数量
349 349 inventoryDetail.setLastUpdatedBy(ShiroUtils.getName());
350 350 inventoryDetail.setLastUpdatedByName(ShiroUtils.getName());
351 351 inventoryDetail.setLastUpdated(new Date());
352   - Boolean j = inventoryDetailService.saveOrUpdate(inventoryDetail);
353   - if(j == false){
  352 + Boolean j = inventoryDetailService.saveOrUpdate(inventoryDetail);
  353 + if (j == false) {
354 354 throw new SecurityException("调整修改库存失败!");
355   - } }
  355 + }
  356 + }
356 357 //写入库存交易记录
357 358 InventoryTransaction inventoryTransaction = new InventoryTransaction();
358 359 inventoryTransaction.setWarehouseCode(inventoryDetail.getWarehouseCode());
359 360 inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
360 361 inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
361 362 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
362   - if(adjustDetail.getGapQty().compareTo(BigDecimal.ZERO) > 0) {
363   - inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO );
  363 + if (adjustDetail.getGapQty().compareTo(BigDecimal.ZERO) > 0) {
  364 + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
364 365 } else {
365   - inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT );
  366 + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT);
366 367 }
  368 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
367 369 inventoryTransaction.setAdjustCode(adjustDetail.getAdjustCode());
368 370 inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
369 371 inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
... ... @@ -390,18 +392,19 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
390 392 inventoryTransaction.setBillDetailId(inventoryDetail.getReceiptDetailId());
391 393 inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
392 394 Boolean k = inventoryTransactionService.saveOrUpdate(inventoryTransaction);
393   - if(k == false){
  395 + if (k == false) {
394 396 throw new SecurityException("调整单库存交易生成失败!");
395 397 }
396 398 }
397 399  
398 400 /**
399 401 * 调整库存属性
  402 + *
400 403 * @param adjustDetail
401 404 */
402 405 @Transactional
403   - public void updateAdjustDetailState (AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
404   - /*不考虑其他只改变库存状态即可,也需要写入库存交易。*/
  406 + public void updateAdjustDetailState(AdjustDetail adjustDetail, InventoryDetail inventoryDetail) {
  407 + /*不考虑其他只改变库存状态即可,也需要写入库存交易。*/
405 408  
406 409 //修改库存的状态
407 410 inventoryDetail.setInventorySts(adjustDetail.getToInventorySts());//修改为调整库存
... ... @@ -420,7 +423,8 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
420 423 inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
421 424 inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
422 425 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
423   - inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT );
  426 + inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTOUT);
  427 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
424 428 inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
425 429 inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
426 430 inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
... ... @@ -485,10 +489,11 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
485 489  
486 490 /**
487 491 * 调整插入库存
  492 + *
488 493 * @param adjustDetail
489 494 */
490 495 @Transactional
491   - public void updateAdjustDetailInsert (AdjustDetail adjustDetail) {
  496 + public void updateAdjustDetailInsert(AdjustDetail adjustDetail) {
492 497 /*当系统库存为0时,调整单触发插入新库存状态*/
493 498 //新生成库存头时,库位,容器都需要更新数据
494 499  
... ... @@ -499,7 +504,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
499 504 ih.setContainerCode(adjustDetail.getContainerCode());
500 505 LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(ih);
501 506 InventoryHeader inventoryHeader = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
502   - if(inventoryHeader == null){
  507 + if (inventoryHeader == null) {
503 508 //库存头为空,生成库存头
504 509 inventoryHeader.setWarehouseCode(adjustDetail.getWarehouseCode());
505 510 inventoryHeader.setLocationCode(adjustDetail.getLocationCode());
... ... @@ -515,9 +520,9 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
515 520 inventoryHeaderService.saveOrUpdate(inventoryHeader);
516 521 //更新库位和容器
517 522 locationService.updateContainerCodeAndStatus(inventoryHeader.getLocationCode(),
518   - inventoryHeader.getContainerCode(),QuantityConstant.STATUS_LOCATION_EMPTY);
  523 + inventoryHeader.getContainerCode(), QuantityConstant.STATUS_LOCATION_EMPTY);
519 524 containerService.updateLocationCodeAndStatus(inventoryHeader.getContainerCode(),
520   - inventoryHeader.getLocationCode(),QuantityConstant.STATUS_CONTAINER_EMPTY);
  525 + inventoryHeader.getLocationCode(), QuantityConstant.STATUS_CONTAINER_EMPTY);
521 526  
522 527 }
523 528 //生成库存明细
... ... @@ -567,6 +572,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
567 572 inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
568 573 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
569 574 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_ADJUSTINTO);
  575 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
570 576 inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
571 577 inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
572 578 inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
... ... @@ -596,7 +602,4 @@ public class AdjustDetailServiceImpl extends ServiceImpl&lt;AdjustDetailMapper, Adj
596 602 }
597 603  
598 604  
599   -
600   -
601   -
602 605 }
... ...
src/main/java/com/huaheng/pc/inventory/inventoryHeader/controller/InventoryHeaderController.java
... ... @@ -98,7 +98,7 @@ public class InventoryHeaderController extends BaseController {
98 98 lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin), InventoryHeader::getCreated, createdBegin)
99 99 .le(StringUtils.isNotEmpty(createdEnd), InventoryHeader::getCreated, createdEnd)//创建时间范围
100 100 .eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())//仓库
101   - .eq(StringUtils.isNotEmpty(inventoryHeader.getZoneCode()), InventoryHeader::getZoneCode, inventoryHeader.getZoneCode()) //库
  101 + .eq(StringUtils.isNotEmpty(inventoryHeader.getZoneCode()), InventoryHeader::getZoneCode, inventoryHeader.getZoneCode()) //库
102 102 .eq(StringUtils.isNotEmpty(inventoryHeader.getLocationCode()), InventoryHeader::getLocationCode, inventoryHeader.getLocationCode()) //库位
103 103 .like(StringUtils.isNotEmpty(inventoryHeader.getContainerCode()), InventoryHeader::getContainerCode, inventoryHeader.getContainerCode())//容器
104 104 .eq(StringUtils.isNotEmpty(inventoryHeader.getCreatedBy()), InventoryHeader::getCreatedBy, inventoryHeader.getCreatedBy())//创建用户
... ... @@ -162,7 +162,7 @@ public class InventoryHeaderController extends BaseController {
162 162 BigDecimal materialQuantity = BigDecimal.ZERO;
163 163 BigDecimal materialWeight = BigDecimal.ZERO;
164 164  
165   - if(StrUtil.isNotBlank(dimension) && ReUtil.isMatch(pattern, dimension)){
  165 + if (StrUtil.isNotBlank(dimension) && ReUtil.isMatch(pattern, dimension)) {
166 166 String[] parts = dimension.split("x");
167 167 double length = Double.parseDouble(parts[0]);
168 168 double width = Double.parseDouble(parts[1]);
... ... @@ -177,12 +177,12 @@ public class InventoryHeaderController extends BaseController {
177 177 }
178 178  
179 179  
180   - if(materialQuantity.compareTo(BigDecimal.ZERO) > 0){
181   - if(materialVolume.compareTo(BigDecimal.ZERO) > 0){
  180 + if (materialQuantity.compareTo(BigDecimal.ZERO) > 0) {
  181 + if (materialVolume.compareTo(BigDecimal.ZERO) > 0) {
182 182 materialVolumeList.add(NumberUtil.mul(materialVolume, materialQuantity));
183 183  
184 184 }
185   - if(materialWeight.compareTo(BigDecimal.ZERO) > 0 ){
  185 + if (materialWeight.compareTo(BigDecimal.ZERO) > 0) {
186 186 materialWeightList.add(NumberUtil.mul(materialWeight, materialQuantity));
187 187 }
188 188 }
... ... @@ -191,11 +191,11 @@ public class InventoryHeaderController extends BaseController {
191 191  
192 192 BigDecimal materialVolume = materialVolumeList.stream()
193 193 .reduce(BigDecimal.ZERO, BigDecimal::add)
194   - .divide(palletVolume,4,RoundingMode.HALF_UP);
  194 + .divide(palletVolume, 4, RoundingMode.HALF_UP);
195 195  
196 196 BigDecimal materialWeight = materialWeightList.stream()
197 197 .reduce(BigDecimal.ZERO, BigDecimal::add)
198   - .divide(palletWeightCapacity,4,RoundingMode.HALF_UP);
  198 + .divide(palletWeightCapacity, 4, RoundingMode.HALF_UP);
199 199  
200 200 String materialVolumePercentage = percentageFormat.format(materialVolume);
201 201 String materialWeightPercentage = percentageFormat.format(materialWeight);
... ... @@ -213,7 +213,6 @@ public class InventoryHeaderController extends BaseController {
213 213 }
214 214  
215 215  
216   -
217 216 /**
218 217 * 盘点库存主列表
219 218 */
... ...
src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java
... ... @@ -14,6 +14,7 @@ import com.huaheng.framework.web.page.TableDataInfo;
14 14 import com.huaheng.framework.web.page.TableSupport;
15 15 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
16 16 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
  17 +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
17 18 import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
18 19 import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction;
19 20 import com.huaheng.pc.inventory.inventoryTransaction.service.InventoryTransactionService;
... ... @@ -87,6 +88,7 @@ public class InventoryTransactionController extends BaseController {
87 88 .like(StringUtils.isNotEmpty(inventoryTransaction.getCreatedBy()), InventoryTransaction::getCreatedBy, inventoryTransaction.getCreatedBy())//创建用户
88 89 .eq(StringUtils.isNotEmpty(inventoryTransaction.getWarehouse()), InventoryTransaction::getWarehouse, inventoryTransaction.getWarehouse()) //原仓库编码
89 90 .like(StringUtils.isNotEmpty(inventoryTransaction.getWarehouseName()), InventoryTransaction::getWarehouseName, inventoryTransaction.getWarehouseName()) //原仓库名称
  91 + .eq(StringUtils.isNotEmpty(inventoryTransaction.getZoneCode()), InventoryTransaction::getZoneCode, inventoryTransaction.getZoneCode()) //库区
90 92 //货主
91 93 .in(InventoryTransaction::getCompanyCode, ShiroUtils.getCompanyCodeList())
92 94 .orderByDesc(InventoryTransaction::getId);
... ...
src/main/java/com/huaheng/pc/inventory/inventoryTransaction/domain/InventoryTransaction.java
... ... @@ -330,5 +330,10 @@ public class InventoryTransaction implements Serializable {
330 330 @TableField(value = "isFlatWarehouse")
331 331 @ApiModelProperty(value = "是否平库,1为平库")
332 332 private Integer isFlatWarehouse;
333   -
  333 + /**
  334 + * 库区
  335 + */
  336 + @TableField(value = "zoneCode")
  337 + @ApiModelProperty(value = "库区")
  338 + private String zoneCode;
334 339 }
... ...
src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java
... ... @@ -110,7 +110,7 @@ public class ReceiptHeaderService extends ServiceImpl&lt;ReceiptHeaderMapper, Recei
110 110 SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
111 111 LambdaQueryWrapper<ReceiptHeader> lambda = Wrappers.lambdaQuery();
112 112 lambda.select(ReceiptHeader::getCode).eq(ReceiptHeader::getReceiptType, receiptType)
113   - .inSql(ReceiptHeader::getCode, "select code from receipt_header where code like '"+receiptType+"%'")
  113 + .inSql(ReceiptHeader::getCode, "select code from receipt_header where code like '" + receiptType + "%'")
114 114 .orderByDesc(ReceiptHeader::getId).last("Limit 1");
115 115 //如果指定类型的最后的code存在,并且日期一致。那么 code = 入库单类型 + 年月日 + (排序号 + 1)
116 116 String maxCode = null;
... ... @@ -127,12 +127,12 @@ public class ReceiptHeaderService extends ServiceImpl&lt;ReceiptHeaderMapper, Recei
127 127 Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length()));
128 128 code = receiptType + df.format(now) + String.format("%05d", Count + i++);
129 129 } else {
130   - code = receiptType + df.format(now) + String.format("%05d", 0000+i++);
  130 + code = receiptType + df.format(now) + String.format("%05d", 0000 + i++);
131 131 }
132 132 aa.select(ReceiptHeaderHistory::getCode).eq(ReceiptHeaderHistory::getCode, code);
133 133 List<ReceiptHeaderHistory> list = receiptheaderhistoryMapper.selectList(aa);
134 134 if (list.size() <= 0) {
135   - i=0;
  135 + i = 0;
136 136 }
137 137 }
138 138 return code;
... ... @@ -484,6 +484,7 @@ public class ReceiptHeaderService extends ServiceImpl&lt;ReceiptHeaderMapper, Recei
484 484 inventoryTransaction.setLocationCode(locationCode);
485 485 inventoryTransaction.setContainerCode(containerCode);
486 486 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
  487 + inventoryTransaction.setZoneCode("未知库区");
487 488 inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
488 489 inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
489 490 inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
... ...
src/main/java/com/huaheng/pc/shipment/shipmentHeader/controller/ShipmentHeaderController.java
... ... @@ -26,6 +26,7 @@ import com.huaheng.pc.config.waveMaster.service.WaveMasterService;
26 26 import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
27 27 import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
28 28 import com.huaheng.pc.momLog.service.IMomLogService;
  29 +import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
29 30 import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
30 31 import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
31 32 import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
... ... @@ -47,10 +48,7 @@ import javax.annotation.Resource;
47 48 import java.lang.reflect.InvocationTargetException;
48 49 import java.math.BigDecimal;
49 50 import java.text.SimpleDateFormat;
50   -import java.util.ArrayList;
51   -import java.util.Arrays;
52   -import java.util.Date;
53   -import java.util.List;
  51 +import java.util.*;
54 52  
55 53  
56 54 /**
... ... @@ -182,6 +180,7 @@ public class ShipmentHeaderController extends BaseController {
182 180 .eq(shipmentHeader.getFirstStatus() != null, ShipmentHeader::getFirstStatus, shipmentHeader.getFirstStatus())
183 181 .eq(shipmentHeader.getLastStatus() != null, ShipmentHeader::getLastStatus, shipmentHeader.getLastStatus())
184 182 .eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()), ShipmentHeader::getPushSuccessStatus, shipmentHeader.getPushSuccessStatus())
  183 + .like(StringUtils.isNotEmpty(shipmentHeader.getMaterialColor()), ShipmentHeader::getMaterialColor, shipmentHeader.getMaterialColor())
185 184 .eq(ShipmentHeader::getDeleted, 0)
186 185 .orderByAsc(ShipmentHeader::getLastStatus)
187 186 .orderByAsc(ShipmentHeader::getRequestedStartDate)
... ... @@ -511,7 +510,7 @@ public class ShipmentHeaderController extends BaseController {
511 510 LambdaQueryWrapper<ShipmentHeader> headerWrapper = Wrappers.lambdaQuery();
512 511 headerWrapper.in(ShipmentHeader::getId, headerIdArr);
513 512 List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(headerWrapper);
514   - if (shipmentHeaderList.size() < 1) {
  513 + if (shipmentHeaderList.isEmpty()) {
515 514 throw new ServiceException("单据主表不存在!!!");
516 515 }
517 516 shipmentHeaderList.forEach(shipmentHeader -> {
... ... @@ -540,7 +539,17 @@ public class ShipmentHeaderController extends BaseController {
540 539 shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
541 540 StringBuilder recordID = new StringBuilder();
542 541 StringBuilder workShops = new StringBuilder();
543   - shipmentHeaderList.forEach(header -> workShops.append(header.getWorkshop()).append(","));
  542 + Set<String> uniqueWorkshops = new HashSet<>();
  543 + for (ShipmentHeader header : shipmentHeaderList) {
  544 + uniqueWorkshops.add(header.getWorkshop());
  545 + }
  546 + for (String workshop : uniqueWorkshops) {
  547 + workShops.append(workshop).append(",");
  548 + }
  549 + // 移除最后一个逗号
  550 + if (workShops.length() > 0) {
  551 + workShops.setLength(workShops.length() - 1);
  552 + }
544 553 shipmentHeaderList.forEach(header -> recordID.append(header.getId()).append(","));
545 554 shipmentHeader.setWorkshop(workShops.toString());
546 555 shipmentHeader.setRecordID(recordID.toString());
... ...
src/main/java/com/huaheng/pc/shipment/shipmentHeader/domain/ShipmentHeader.java
... ... @@ -529,4 +529,11 @@ public class ShipmentHeader implements Serializable {
529 529 @TableField(value = "ISMOM")
530 530 @ApiModelProperty(value = "ISMOM")
531 531 private String ISMOM;
  532 +
  533 + /**
  534 + * 物料颜色
  535 + */
  536 + @TableField(value = "materialColor")
  537 + @ApiModelProperty(value = "物料颜色")
  538 + public String materialColor;
532 539 }
... ...
src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/controller/ShipmentHeaderHistoryController.java
... ... @@ -40,183 +40,181 @@ import java.util.List;
40 40 */
41 41 @Controller
42 42 @RequestMapping("/shipment/shipmentHeaderHistory")
43   -public class ShipmentHeaderHistoryController extends BaseController
44   -{
  43 +public class ShipmentHeaderHistoryController extends BaseController {
45 44 private String prefix = "shipment/shipmentHeaderHistory";
46 45  
47   - @Autowired
48   - private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
49   - @Autowired
50   - private ShipmentDetailHistoryService shipmentDetailHistoryService;
51   -
52   -
53   - @RequiresPermissions("shipment:bill:view")
54   - @GetMapping()
55   - public String shipmentHeaderHistory()
56   - {
57   - return prefix + "/shipmentHeaderHistory";
58   - }
59   -
60   - /**
61   - * 查询出库单主列表
62   - */
63   - @RequiresPermissions("shipment:bill:list")
64   - @Log(title = "出库-出库单历史", operating="查看历史出库主单", action = BusinessType.GRANT)
65   - @PostMapping("/list")
66   - @ResponseBody
67   - public TableDataInfo list(ShipmentHeaderHistory shipmentHeader, String createdBegin, String createdEnd, String deliveryDate, String startDate,String importDate) {
68   - LambdaQueryWrapper<ShipmentHeaderHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
69   - PageDomain pageDomain = TableSupport.buildPageRequest();
70   - Integer pageNum = pageDomain.getPageNum();
71   - Integer pageSize = pageDomain.getPageSize();
72   - Date date1 = null;
73   - Date date2 = null;
74   - Date date3 = null;
75   - try {
76   - if (StringUtils.isNotNull(deliveryDate)) {
77   - date1 = new SimpleDateFormat("yyyy-MM-dd").parse(deliveryDate);
78   - }else {
79   - date1 = null;
80   - }
81   - } catch (java.text.ParseException e) {
82   - //LOGGER.error("时间转换错误, string = {}", deliveryDate, e);
83   - }
84   -
85   - try {
86   - if (StringUtils.isNotNull(startDate)) {
87   - date2 = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);
88   - }else {
89   - date2 = null;
90   - }
91   - } catch (java.text.ParseException e) {
92   - }
93   - try {
94   - if (StringUtils.isNotNull(importDate)) {
95   - date3 = new SimpleDateFormat("yyyy-MM-dd").parse(importDate);
96   - } else {
97   - date3 = null;
98   - }
99   - } catch (java.text.ParseException e) {
100   - }
101   - Date startTime1 = date1;
102   - Date endTime1 = null;
103   - if(startTime1!=null){
104   - //获取当前时间
105   - endTime1 = DateUtils.dateAddNum(startTime1, 1,0,-1);
106   - }
107   -
108   - Date startTime2 = date2;
109   - Date endTime2 = null;
110   - if(startTime2!=null){
111   - //获取当前时间
112   - endTime2 = DateUtils.dateAddNum(startTime2, 1,0,-1);
113   - }
114   - Date startTime3 = date3;
115   - Date endTime3 = null;
116   - if (startTime3 != null) {
117   - //获取当前时间
118   - endTime3 = DateUtils.dateAddNum(startTime3, 1, 0, -1);
119   - }
120   -
121   - lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin),ShipmentHeaderHistory::getCreated, createdBegin)
122   - .le(StringUtils.isNotEmpty(createdEnd), ShipmentHeaderHistory::getCreated, createdEnd)
123   - .eq(ShipmentHeaderHistory::getWarehouseCode,ShiroUtils.getWarehouseCode())
124   - .eq(ShipmentHeaderHistory::getDeleted,false)
  46 + @Autowired
  47 + private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
  48 + @Autowired
  49 + private ShipmentDetailHistoryService shipmentDetailHistoryService;
  50 +
  51 +
  52 + @RequiresPermissions("shipment:bill:view")
  53 + @GetMapping()
  54 + public String shipmentHeaderHistory() {
  55 + return prefix + "/shipmentHeaderHistory";
  56 + }
  57 +
  58 + /**
  59 + * 查询出库单主列表
  60 + */
  61 + @RequiresPermissions("shipment:bill:list")
  62 + @Log(title = "出库-出库单历史", operating = "查看历史出库主单", action = BusinessType.GRANT)
  63 + @PostMapping("/list")
  64 + @ResponseBody
  65 + public TableDataInfo list(ShipmentHeaderHistory shipmentHeader, String createdBegin, String createdEnd, String deliveryDate, String startDate, String importDate) {
  66 + LambdaQueryWrapper<ShipmentHeaderHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
  67 + PageDomain pageDomain = TableSupport.buildPageRequest();
  68 + Integer pageNum = pageDomain.getPageNum();
  69 + Integer pageSize = pageDomain.getPageSize();
  70 + Date date1 = null;
  71 + Date date2 = null;
  72 + Date date3 = null;
  73 + try {
  74 + if (StringUtils.isNotNull(deliveryDate)) {
  75 + date1 = new SimpleDateFormat("yyyy-MM-dd").parse(deliveryDate);
  76 + } else {
  77 + date1 = null;
  78 + }
  79 + } catch (java.text.ParseException e) {
  80 + //LOGGER.error("时间转换错误, string = {}", deliveryDate, e);
  81 + }
  82 +
  83 + try {
  84 + if (StringUtils.isNotNull(startDate)) {
  85 + date2 = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);
  86 + } else {
  87 + date2 = null;
  88 + }
  89 + } catch (java.text.ParseException e) {
  90 + }
  91 + try {
  92 + if (StringUtils.isNotNull(importDate)) {
  93 + date3 = new SimpleDateFormat("yyyy-MM-dd").parse(importDate);
  94 + } else {
  95 + date3 = null;
  96 + }
  97 + } catch (java.text.ParseException e) {
  98 + }
  99 + Date startTime1 = date1;
  100 + Date endTime1 = null;
  101 + if (startTime1 != null) {
  102 + //获取当前时间
  103 + endTime1 = DateUtils.dateAddNum(startTime1, 1, 0, -1);
  104 + }
  105 +
  106 + Date startTime2 = date2;
  107 + Date endTime2 = null;
  108 + if (startTime2 != null) {
  109 + //获取当前时间
  110 + endTime2 = DateUtils.dateAddNum(startTime2, 1, 0, -1);
  111 + }
  112 + Date startTime3 = date3;
  113 + Date endTime3 = null;
  114 + if (startTime3 != null) {
  115 + //获取当前时间
  116 + endTime3 = DateUtils.dateAddNum(startTime3, 1, 0, -1);
  117 + }
  118 +
  119 + lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin), ShipmentHeaderHistory::getCreated, createdBegin)
  120 + .le(StringUtils.isNotEmpty(createdEnd), ShipmentHeaderHistory::getCreated, createdEnd)
  121 + .eq(ShipmentHeaderHistory::getWarehouseCode, ShiroUtils.getWarehouseCode())
  122 + .eq(ShipmentHeaderHistory::getDeleted, false)
125 123 // .eq(date != null,ShipmentHeader::getRequestedDeliveryDate,date)
126   - .inSql(StringUtils.isNotEmpty(shipmentHeader.getNoticeNo()),ShipmentHeaderHistory::getId,"select DISTINCT shipmentId from shipment_detail_history where noticeNo like '%"+shipmentHeader.getNoticeNo()+"%'")
127   - .in(StringUtils.isNotEmpty(shipmentHeader.getCompanyCode()),ShipmentHeaderHistory::getCompanyCode, shipmentHeader.getCompanyCode())
128   - .in(StringUtils.isEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, ShiroUtils.getCompanyCodeList())
129   - .inSql(StringUtils.isNotEmpty(shipmentHeader.getCode()),ShipmentHeaderHistory::getCode,"select DISTINCT shipmentCode from shipment_detail_history where recordCode = '"+shipmentHeader.getCode()+"' UNION SELECT DISTINCT shipmentCode FROM shipment_detail_history WHERE shipmentCode like '%" + shipmentHeader.getCode() + "%'")
130   - //.inSql(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where preMergerWorkshop like '%" + shipmentHeader.getWorkshop() + "%'")
131   - //.or()
132   - .like(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getWorkshop, shipmentHeader.getWorkshop())
133   - .like(StringUtils.isNotEmpty(shipmentHeader.getLastUpdatedBy()), ShipmentHeaderHistory::getLastUpdatedBy, shipmentHeader.getLastUpdatedBy())
134   - .like(StringUtils.isNotEmpty(shipmentHeader.getShipmentNote()), ShipmentHeaderHistory::getShipmentNote, shipmentHeader.getShipmentNote())
135   - .eq(StringUtils.isNotEmpty(shipmentHeader.getShipmentType()),ShipmentHeaderHistory::getShipmentType,shipmentHeader.getShipmentType())
136   - .like(StringUtils.isNotEmpty(shipmentHeader.getProcessType()), ShipmentHeaderHistory::getProcessType, shipmentHeader.getProcessType())
137   - .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCode()), ShipmentHeaderHistory::getReferCode, shipmentHeader.getReferCode())
138   - .like(StringUtils.isNotEmpty(shipmentHeader.getTransferWarehouseName()), ShipmentHeaderHistory::getTransferWarehouseName, shipmentHeader.getTransferWarehouseName())
139   - .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCodeType()), ShipmentHeaderHistory::getReferCodeType, shipmentHeader.getReferCodeType())
140   - .like(StringUtils.isNotEmpty(shipmentHeader.getOrigin()), ShipmentHeaderHistory::getOrigin, shipmentHeader.getOrigin())
141   - .between(StringUtils.isNotNull(startTime1), ShipmentHeaderHistory::getRequestedDeliveryDate, startTime1,endTime1)
142   - .between(StringUtils.isNotNull(startTime2), ShipmentHeaderHistory::getRequestedStartDate, startTime2,endTime2)
143   - .between(StringUtils.isNotNull(startTime3), ShipmentHeaderHistory::getDailyScheduleImportDate, startTime3, endTime3)
144   - .eq(shipmentHeader.getFirstStatus()!=null, ShipmentHeaderHistory::getFirstStatus, shipmentHeader.getFirstStatus())
145   - .eq(shipmentHeader.getLastStatus()!=null, ShipmentHeaderHistory::getLastStatus, shipmentHeader.getLastStatus())
146   - .eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()),ShipmentHeaderHistory::getPushSuccessStatus,shipmentHeader.getPushSuccessStatus())
147   - .eq(ShipmentHeaderHistory::getDeleted,0)
148   - //.orderByAsc(ShipmentHeaderHistory::getLastUpdated)
149   - //.orderByAsc(ShipmentHeaderHistory::getLastStatus)
150   - //.orderByAsc(ShipmentHeaderHistory::getRequestedStartDate)
151   - //.orderByAsc(ShipmentHeaderHistory::getCreated);
152   - .orderByDesc(ShipmentHeaderHistory::getLastUpdated);
153   -
154   - if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
155   - /**
156   - * 使用分页查询
157   - */
158   - Page<ShipmentHeaderHistory> page = new Page<>(pageNum, pageSize);
159   - IPage<ShipmentHeaderHistory> iPage = shipmentHeaderHistoryService.page(page, lambdaQueryWrapper);
160   - return getMpDataTable(iPage.getRecords(),iPage.getTotal());
161   - } else {
162   - List<ShipmentHeaderHistory> list = shipmentHeaderHistoryService.list(lambdaQueryWrapper);
163   - return getDataTable(list);
164   - }
165   - }
166   -
167   -
168   - /**
169   - * 删除出库单主
170   - */
171   - @RequiresPermissions("shipment:bill:remove")
172   - @Log(title = "出库-历史出库单", operating="删除历史出库主单", action = BusinessType.DELETE)
173   - @PostMapping( "/remove")
174   - @ResponseBody
175   - public AjaxResult remove(String ids) {
176   - if (StringUtils.isEmpty(ids)) {
  124 + .inSql(StringUtils.isNotEmpty(shipmentHeader.getNoticeNo()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where noticeNo like '%" + shipmentHeader.getNoticeNo() + "%'")
  125 + .in(StringUtils.isNotEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, shipmentHeader.getCompanyCode())
  126 + .in(StringUtils.isEmpty(shipmentHeader.getCompanyCode()), ShipmentHeaderHistory::getCompanyCode, ShiroUtils.getCompanyCodeList())
  127 + .inSql(StringUtils.isNotEmpty(shipmentHeader.getCode()), ShipmentHeaderHistory::getCode, "select DISTINCT shipmentCode from shipment_detail_history where recordCode = '" + shipmentHeader.getCode() + "' UNION SELECT DISTINCT shipmentCode FROM shipment_detail_history WHERE shipmentCode like '%" + shipmentHeader.getCode() + "%'")
  128 + //.inSql(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getId, "select DISTINCT shipmentId from shipment_detail_history where preMergerWorkshop like '%" + shipmentHeader.getWorkshop() + "%'")
  129 + //.or()
  130 + .like(StringUtils.isNotEmpty(shipmentHeader.getWorkshop()), ShipmentHeaderHistory::getWorkshop, shipmentHeader.getWorkshop())
  131 + .like(StringUtils.isNotEmpty(shipmentHeader.getLastUpdatedBy()), ShipmentHeaderHistory::getLastUpdatedBy, shipmentHeader.getLastUpdatedBy())
  132 + .like(StringUtils.isNotEmpty(shipmentHeader.getShipmentNote()), ShipmentHeaderHistory::getShipmentNote, shipmentHeader.getShipmentNote())
  133 + .eq(StringUtils.isNotEmpty(shipmentHeader.getShipmentType()), ShipmentHeaderHistory::getShipmentType, shipmentHeader.getShipmentType())
  134 + .like(StringUtils.isNotEmpty(shipmentHeader.getProcessType()), ShipmentHeaderHistory::getProcessType, shipmentHeader.getProcessType())
  135 + .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCode()), ShipmentHeaderHistory::getReferCode, shipmentHeader.getReferCode())
  136 + .like(StringUtils.isNotEmpty(shipmentHeader.getTransferWarehouseName()), ShipmentHeaderHistory::getTransferWarehouseName, shipmentHeader.getTransferWarehouseName())
  137 + .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCodeType()), ShipmentHeaderHistory::getReferCodeType, shipmentHeader.getReferCodeType())
  138 + .like(StringUtils.isNotEmpty(shipmentHeader.getOrigin()), ShipmentHeaderHistory::getOrigin, shipmentHeader.getOrigin())
  139 + .between(StringUtils.isNotNull(startTime1), ShipmentHeaderHistory::getRequestedDeliveryDate, startTime1, endTime1)
  140 + .between(StringUtils.isNotNull(startTime2), ShipmentHeaderHistory::getRequestedStartDate, startTime2, endTime2)
  141 + .between(StringUtils.isNotNull(startTime3), ShipmentHeaderHistory::getDailyScheduleImportDate, startTime3, endTime3)
  142 + .eq(shipmentHeader.getFirstStatus() != null, ShipmentHeaderHistory::getFirstStatus, shipmentHeader.getFirstStatus())
  143 + .eq(shipmentHeader.getLastStatus() != null, ShipmentHeaderHistory::getLastStatus, shipmentHeader.getLastStatus())
  144 + .eq(StringUtils.isNotNull(shipmentHeader.getPushSuccessStatus()), ShipmentHeaderHistory::getPushSuccessStatus, shipmentHeader.getPushSuccessStatus())
  145 + .like(StringUtils.isNotEmpty(shipmentHeader.getMaterialColor()), ShipmentHeaderHistory::getMaterialColor, shipmentHeader.getMaterialColor())
  146 + .eq(ShipmentHeaderHistory::getDeleted, 0)
  147 + //.orderByAsc(ShipmentHeaderHistory::getLastUpdated)
  148 + //.orderByAsc(ShipmentHeaderHistory::getLastStatus)
  149 + //.orderByAsc(ShipmentHeaderHistory::getRequestedStartDate)
  150 + //.orderByAsc(ShipmentHeaderHistory::getCreated);
  151 + .orderByDesc(ShipmentHeaderHistory::getLastUpdated);
  152 +
  153 + if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
  154 + /**
  155 + * 使用分页查询
  156 + */
  157 + Page<ShipmentHeaderHistory> page = new Page<>(pageNum, pageSize);
  158 + IPage<ShipmentHeaderHistory> iPage = shipmentHeaderHistoryService.page(page, lambdaQueryWrapper);
  159 + return getMpDataTable(iPage.getRecords(), iPage.getTotal());
  160 + } else {
  161 + List<ShipmentHeaderHistory> list = shipmentHeaderHistoryService.list(lambdaQueryWrapper);
  162 + return getDataTable(list);
  163 + }
  164 + }
  165 +
  166 +
  167 + /**
  168 + * 删除出库单主
  169 + */
  170 + @RequiresPermissions("shipment:bill:remove")
  171 + @Log(title = "出库-历史出库单", operating = "删除历史出库主单", action = BusinessType.DELETE)
  172 + @PostMapping("/remove")
  173 + @ResponseBody
  174 + public AjaxResult remove(String ids) {
  175 + if (StringUtils.isEmpty(ids)) {
177 176 return AjaxResult.error("id不能为空");
178 177 }
179   - for (Integer id : Convert.toIntArray(ids))
180   - {
181   - boolean result=shipmentHeaderHistoryService.removeById(id);
182   - LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper=Wrappers.lambdaQuery();
183   - lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId,id)
184   - .eq(ShipmentDetailHistory::getWarehouseCode,ShiroUtils.getWarehouseCode());
185   - Boolean flag=true;
186   - flag=shipmentDetailHistoryService.remove(lambdaQueryWrapper);
187   - if(result==false){
188   - return AjaxResult.error("删除失败");
189   - }
190   - }
191   - return AjaxResult.success("删除成功!");
192   - }
193   -
194   - /**
195   - * 出库单报表打印
196   - * @return
197   - */
198   - @RequiresPermissions("shipment:bill:report")
199   - @Log(title = "出库-历史出库单", operating="打印历史出库单报表", action = BusinessType.OTHER)
200   - @GetMapping("/report/{id}")
201   - public String report(@PathVariable("id") Integer id, ModelMap mmap)
202   - {
203   - ShipmentHeaderHistory shipmentHeaderHistory = shipmentHeaderHistoryService.getById(id);
204   - mmap.put("shipmentHeader", shipmentHeaderHistory);
205   -
206   - LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
207   - lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId,id)
208   - .eq(ShipmentDetailHistory::getWarehouseCode,ShiroUtils.getWarehouseCode());
209   - List<ShipmentDetailHistory> details = shipmentDetailHistoryService.list(lambdaQueryWrapper);
210   - mmap.put("details", details);
211   -
212   - return prefix + "/report";
213   - }
214   -
215   - @PostMapping("/getShipmentHeader")
216   - @ResponseBody
217   - public AjaxResult<ShipmentHeaderHistory> getShipmentHeader(int id){
218   - return AjaxResult.success(shipmentHeaderHistoryService.getById(id));
219   - }
  178 + for (Integer id : Convert.toIntArray(ids)) {
  179 + boolean result = shipmentHeaderHistoryService.removeById(id);
  180 + LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
  181 + lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId, id)
  182 + .eq(ShipmentDetailHistory::getWarehouseCode, ShiroUtils.getWarehouseCode());
  183 + Boolean flag = true;
  184 + flag = shipmentDetailHistoryService.remove(lambdaQueryWrapper);
  185 + if (result == false) {
  186 + return AjaxResult.error("删除失败");
  187 + }
  188 + }
  189 + return AjaxResult.success("删除成功!");
  190 + }
  191 +
  192 + /**
  193 + * 出库单报表打印
  194 + *
  195 + * @return
  196 + */
  197 + @RequiresPermissions("shipment:bill:report")
  198 + @Log(title = "出库-历史出库单", operating = "打印历史出库单报表", action = BusinessType.OTHER)
  199 + @GetMapping("/report/{id}")
  200 + public String report(@PathVariable("id") Integer id, ModelMap mmap) {
  201 + ShipmentHeaderHistory shipmentHeaderHistory = shipmentHeaderHistoryService.getById(id);
  202 + mmap.put("shipmentHeader", shipmentHeaderHistory);
  203 +
  204 + LambdaQueryWrapper<ShipmentDetailHistory> lambdaQueryWrapper = Wrappers.lambdaQuery();
  205 + lambdaQueryWrapper.eq(ShipmentDetailHistory::getShipmentId, id)
  206 + .eq(ShipmentDetailHistory::getWarehouseCode, ShiroUtils.getWarehouseCode());
  207 + List<ShipmentDetailHistory> details = shipmentDetailHistoryService.list(lambdaQueryWrapper);
  208 + mmap.put("details", details);
  209 +
  210 + return prefix + "/report";
  211 + }
  212 +
  213 + @PostMapping("/getShipmentHeader")
  214 + @ResponseBody
  215 + public AjaxResult<ShipmentHeaderHistory> getShipmentHeader(int id) {
  216 + return AjaxResult.success(shipmentHeaderHistoryService.getById(id));
  217 + }
220 218  
221 219  
222 220 }
... ...
src/main/java/com/huaheng/pc/shipment/shipmentHeaderHistory/domain/ShipmentHeaderHistory.java
... ... @@ -485,31 +485,32 @@ public class ShipmentHeaderHistory implements Serializable {
485 485  
486 486 /**
487 487 * 回传错误次数
  488 + *
488 489 * @return
489 490 */
490 491 @TableField(value = "pushErrorCount")
491   - @ApiModelProperty(value="回传错误次数")
  492 + @ApiModelProperty(value = "回传错误次数")
492 493 public Integer pushErrorCount;
493 494  
494 495 /**
495 496 * 错误消息
496 497 */
497 498 @TableField(value = "ErrorMsg")
498   - @ApiModelProperty(value="错误消息")
  499 + @ApiModelProperty(value = "错误消息")
499 500 public String errorMsg;
500 501  
501 502 /**
502 503 * 回传状态,0默认,1成功,2失败
503 504 */
504 505 @TableField(value = "pushSuccessStatus")
505   - @ApiModelProperty(value="回传状态,0默认,1成功,2失败,3提前过账")
  506 + @ApiModelProperty(value = "回传状态,0默认,1成功,2失败,3提前过账")
506 507 public Integer pushSuccessStatus;
507 508  
508 509 /**
509 510 * 来源
510 511 */
511 512 @TableField(value = "origin")
512   - @ApiModelProperty(value="来源")
  513 + @ApiModelProperty(value = "来源")
513 514 public String origin;
514 515  
515 516 /**
... ... @@ -530,6 +531,13 @@ public class ShipmentHeaderHistory implements Serializable {
530 531 * 入库单的最后更新时间
531 532 */
532 533 @TableField(value = "lastUpdateTime")
533   - @ApiModelProperty(value="入库单的最后更新时间")
  534 + @ApiModelProperty(value = "入库单的最后更新时间")
534 535 private Date lastUpdateTime;
  536 +
  537 + /**
  538 + * 物料颜色
  539 + */
  540 + @TableField(value = "materialColor")
  541 + @ApiModelProperty(value = "物料颜色")
  542 + public String materialColor;
535 543 }
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/ReceiptTaskService.java
... ... @@ -558,6 +558,7 @@ public class ReceiptTaskService {
558 558 //记录库存交易记录
559 559 InventoryTransaction inventoryTransaction = new InventoryTransaction();
560 560 ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
  561 + inventoryTransaction.setZoneCode(inventoryHeader.getZoneCode());
561 562 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
562 563 inventoryTransaction.setWarehouseCode(taskDetail.getWarehouseCode());
563 564 inventoryTransaction.setCompanyCode(taskDetail.getCompanyCode());
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/ShipmentTaskService.java
... ... @@ -359,6 +359,7 @@ public class ShipmentTaskService {
359 359 inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
360 360 inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
361 361 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
  362 + inventoryTransaction.setZoneCode(inventoryHeader.getZoneCode());
362 363 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT);
363 364 inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
364 365 inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/TransferTaskService.java
... ... @@ -159,7 +159,7 @@ public class TransferTaskService {
159 159 // locationService.updateStatus(desLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
160 160 int updateCount = locationService.updateStatusNew(desLocationCode, warehouseCode,
161 161 QuantityConstant.STATUS_LOCATION_LOCK, QuantityConstant.STATUS_LOCATION_EMPTY);
162   - if(updateCount != 1) {
  162 + if (updateCount != 1) {
163 163 throw new ServiceException("库位已经锁定,不允许再分到这个库位");
164 164 }
165 165 containerService.updateLocationCodeAndStatus(sourceLocation.getContainerCode(),
... ... @@ -236,6 +236,7 @@ public class TransferTaskService {
236 236 inventoryTransaction.setLocationCode(taskDetail.getToLocation());
237 237 inventoryTransaction.setContainerCode(taskDetail.getContainerCode());
238 238 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_TRANSFERINTO);
  239 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
239 240 inventoryTransaction.setMaterialCode(taskDetail.getMaterialCode());
240 241 inventoryTransaction.setMaterialName(taskDetail.getMaterialName());
241 242 inventoryTransaction.setMaterialSpec(taskDetail.getMaterialSpec());
... ... @@ -259,6 +260,7 @@ public class TransferTaskService {
259 260 inventoryTransactionService.save(inventoryTransaction);
260 261 inventoryTransaction.setLocationCode(taskDetail.getFromLocation());
261 262 inventoryTransaction.setTransactionType(QuantityConstant.INVENTORY_TRANSACTION_TRANSFEROUT);
  263 + inventoryTransaction.setZoneCode(inventoryDetail.getZoneCode());
262 264 inventoryTransactionService.save(inventoryTransaction);
263 265 }
264 266 if (taskDetailList.size() != 0) {
... ...
src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html
... ... @@ -10,6 +10,15 @@
10 10 <div class="select-list">
11 11 <ul>
12 12 <li>
  13 + 库区:
  14 + <select id="zoneCode" name="zoneCode" th:with="list=${@zone.getCode()}">
  15 + <option value="">所有</option>
  16 + <option th:each="item : ${list}" th:text="${item['name']}"
  17 + th:value="${item['code']}"
  18 + th:attr=" code = ${item['code']}"></option>
  19 + </select>
  20 + </li>
  21 + <li>
13 22 库位编码:<input type="text" name="locationCode"/>
14 23 </li>
15 24 <li>
... ... @@ -102,6 +111,7 @@
102 111 var prefix = ctx + "inventory/inventoryTransaction";
103 112 var inventoryStatus = [[${@dict.getType('inventorySts')}]];
104 113 var warehouses = [[${@WarehouseService.getCode()}]];
  114 + var zone = [[${@zone.getCode()}]];
105 115 var inventoryTransactionType = [[${@dict.getType('inventoryTransactionType')}]];
106 116 $(function () {
107 117 var options = {
... ... @@ -148,6 +158,21 @@
148 158 }
149 159 },
150 160 {
  161 + field: 'zoneCode',
  162 + title: '库区',
  163 + align: 'center',
  164 + formatter: function (value, row, index) {
  165 + var actions = [];
  166 + $.each(zone, function (index, dict) {
  167 + if (dict.code == value) {
  168 + actions.push("<span class='badge badge-info'>" + dict.name + "</span>");
  169 + return false;
  170 + }
  171 + });
  172 + return actions.join('');
  173 + }
  174 + },
  175 + {
151 176 field: 'locationCode',
152 177 title: '库位编号'
153 178 },
... ...
src/main/resources/templates/receipt/receiving/receiving.html
... ... @@ -327,6 +327,19 @@
327 327 field: 'materialUnit',
328 328 title: '单位'
329 329 },
  330 + {
  331 + field: 'isFlatWarehouse',
  332 + title: '仓库类型',
  333 + visible: true,
  334 + align: 'center',
  335 + formatter: function (value, row, index) {
  336 + if (value == 1) {
  337 + return '<span style="color:#51855c">平库</span>'
  338 + } else {
  339 + return '<span style="color:black">立库</span>'
  340 + }
  341 + }
  342 + },
330 343  
331 344 ]
332 345 });
... ...
src/main/resources/templates/shipment/shipmentHeader/shipmentHeader.html
... ... @@ -104,6 +104,9 @@
104 104 </select>
105 105 </li>
106 106 <li>
  107 + 颜色信息:<input type="text" name="materialColor"/>
  108 + </li>
  109 + <li>
107 110 备注:<input type="text" name="shipmentNote"/>
108 111 </li>
109 112 <li class="time">
... ... @@ -499,19 +502,22 @@
499 502 field: 'requestedDeliveryDate',
500 503 title: '计划完成日期',
501 504 },
  505 + // {
  506 + // field: 'workshop',
  507 + // title: '生产车间',
  508 + // formatter: function (value, row, index) {
  509 + // var actions = [];
  510 + // if (value == undefined || value == '')
  511 + // value = " "
  512 + // else
  513 + // actions.push("<div class='textEllipsis'>" + value + "</div>")
  514 + // return actions.join(" ")
  515 + // }
  516 + // },
502 517 {
503 518 field: 'workshop',
504 519 title: '生产车间',
505   - formatter: function (value, row, index) {
506   - var actions = [];
507   - if (value == undefined || value == '')
508   - value = " "
509   - else
510   - actions.push("<div class='textEllipsis'>" + value + "</div>")
511   - return actions.join(" ")
512   - }
513 520 },
514   -
515 521 {
516 522 field: 'shipmentNote',
517 523 title: '备注',
... ... @@ -591,6 +597,18 @@
591 597 visible: true
592 598 },
593 599 {
  600 + field: 'materialColor',
  601 + title: '颜色信息',
  602 + formatter: function (value, row, index) {
  603 + var actions = [];
  604 + if (value == undefined || value == '')
  605 + value = " "
  606 + else
  607 + actions.push('<pre style="max-height:50px; white-space: pre-wrap; width:500px">' + value + '</pre>')
  608 + return actions.join(" ")
  609 + }
  610 + },
  611 + {
594 612 field: 'errorMsg',
595 613 title: '错误信息',
596 614 formatter: function (value, row, index) {
... ...
src/main/resources/templates/shipment/shipmentHeaderHistory/shipmentHeaderHistory.html
... ... @@ -98,6 +98,9 @@
98 98 </li>
99 99 </li>
100 100 <li>
  101 + 颜色信息:<input type="text" name="materialColor"/>
  102 + </li>
  103 + <li>
101 104 备注:<input type="text" name="shipmentNote"/>
102 105 </li>
103 106 <li class="time">
... ... @@ -454,17 +457,21 @@
454 457 field: 'requestedDeliveryDate',
455 458 title: '计划完成日期',
456 459 },
  460 + // {
  461 + // field: 'workshop',
  462 + // title: '生产车间',
  463 + // formatter: function(value, row, index) {
  464 + // var actions = [];
  465 + // if(value == undefined || value == '')
  466 + // value = " "
  467 + // else
  468 + // actions.push("<div class='textEllipsis'>"+value+"</div>")
  469 + // return actions.join(" ")
  470 + // }
  471 + // },
457 472 {
458 473 field: 'workshop',
459 474 title: '生产车间',
460   - formatter: function(value, row, index) {
461   - var actions = [];
462   - if(value == undefined || value == '')
463   - value = " "
464   - else
465   - actions.push("<div class='textEllipsis'>"+value+"</div>")
466   - return actions.join(" ")
467   - }
468 475 },
469 476 {
470 477 field: 'shipmentNote',
... ... @@ -553,6 +560,18 @@
553 560 visible: true
554 561 },
555 562 {
  563 + field: 'materialColor',
  564 + title: '颜色信息',
  565 + formatter: function (value, row, index) {
  566 + var actions = [];
  567 + if (value == undefined || value == '')
  568 + value = " "
  569 + else
  570 + actions.push('<pre style="max-height:50px; white-space: pre-wrap; width:500px">' + value + '</pre>')
  571 + return actions.join(" ")
  572 + }
  573 + },
  574 + {
556 575 field: 'errorMsg',
557 576 title: '错误信息',
558 577 formatter: function (value, row, index) {
... ...