ReceiptDetailServiceImpl.java
10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
package com.huaheng.pc.receipt.receiptDetail.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
import com.huaheng.pc.config.materialType.domain.MaterialType;
import com.huaheng.pc.config.materialType.service.MaterialTypeService;
import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
import com.huaheng.pc.config.receiptType.domain.ReceiptType;
import com.huaheng.pc.config.receiptType.service.ReceiptTypeService;
import com.huaheng.pc.config.statusFlow.domain.StatusFlowDetail;
import com.huaheng.pc.config.statusFlow.service.StatusFlowDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import org.aspectj.weaver.loadtime.Aj;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.mapper.ReceiptDetailMapper;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import org.springframework.transaction.annotation.Transactional;
@Service
public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, ReceiptDetail> implements ReceiptDetailService{
@Resource
private MaterialService materialService;
@Resource
private ReceiptHeaderService receiptHeaderService;
@Resource
private ReceiptTypeService receiptTypeService;
@Resource
private StatusFlowDetailService statusFlowDetailService;
@Resource
private MaterialTypeService materialTypeService;
@Resource
private ReceiptPreferenceService receiptPreferenceService;
/**
* 新增入库明细
* @param receiptDetail
* @return
*/
@Transactional
public AjaxResult saveReceiptDetaial(ReceiptDetail receiptDetail){
/* 判断入库头表状态*/
LambdaQueryWrapper<ReceiptHeader> lambdaReceiptHeader = Wrappers.lambdaQuery();
lambdaReceiptHeader.eq(ReceiptHeader::getId, receiptDetail.getReceiptId());
ReceiptHeader receiptHeader = receiptHeaderService.getOne(lambdaReceiptHeader);
//判断入库头表状态
if (receiptHeader == null ){
throw new ServiceException("找不到主单据");
} else if (receiptHeader.getFirstStatus() > 100){
throw new ServiceException("单据进入订单池后,不允许新增明细");
} else if (receiptHeader.getFirstStatus() == 20) {
throw new ServiceException("单据已作废");
}
receiptDetail.setReceiptCode(receiptHeader.getCode());
/* 判断物料编码*/
LambdaQueryWrapper<Material> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(Material::getCode, receiptDetail.getMaterialCode());
Material material = materialService.getOne(lambdaQueryWrapper);
if (material == null) {
throw new ServiceException("物料不存在");
}
receiptDetail.setCompanyCode(material.getCompanyCode());
receiptDetail.setMaterialName(material.getName());
receiptDetail.setMaterialSpec(material.getSpec());
receiptDetail.setMaterialUnit(material.getUnit());
receiptDetail.setCreatedBy(ShiroUtils.getLoginName());
receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
receiptDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
//根据流程配置更新入库明细下一流程
ReceiptDetail receiptDetail1 = queryflow(receiptDetail);
if (this.save(receiptDetail1)) {
receiptHeader.setTotalQty(receiptHeader.getTotalQty()+receiptDetail1.getTotalQty());
receiptHeader.setTotalLines(receiptHeader.getTotalLines()+1);
receiptHeaderService.updateById(receiptHeader);
return AjaxResult.success("新增单据明细成功");
} else {
return AjaxResult.error("新增单据明细失败!");
}
}
/**
* 修改入库明细
* @param receiptDetail
* @return
*/
@Override
@Transactional
public AjaxResult updateReceiptDetaial(ReceiptDetail receiptDetail) {
/* 先修改入库头表中的总数量和总行数,再更新记录,完成后更新入库头表中总数量和总行数*/
//查询原记录
ReceiptDetail originalReceiptDetail= this.getById(receiptDetail.getId());
ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptDetail.getReceiptId());
//判断物料编码是否被修改
if (!originalReceiptDetail.getMaterialCode().equals(receiptDetail.getMaterialCode())){
LambdaQueryWrapper<Material> lambdaMaterial = Wrappers.lambdaQuery();
lambdaMaterial.eq(Material::getCode,receiptDetail.getMaterialCode());
Material material = materialService.getOne(lambdaMaterial);
if (material == null) {
throw new ServiceException("该物料编码不存在");
}else {
receiptDetail.setMaterialName(material.getName());
receiptDetail.setMaterialSpec(material.getSpec());
receiptDetail.setMaterialUnit(material.getUnit());
receiptHeader.setTotalQty(receiptHeader.getTotalQty()-originalReceiptDetail.getTotalQty());
receiptHeader.setTotalLines(receiptHeader.getTotalLines()-1);
if ( !receiptHeaderService.updateById(receiptHeader)){
return AjaxResult.error("入库头表更新失败");
}
}
}
receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
if ( !this.updateById(receiptDetail) ){
return AjaxResult.error("入库明细更新失败");
} else {
receiptHeader.setTotalQty(receiptHeader.getTotalQty()+receiptDetail.getTotalQty());
receiptHeader.setTotalLines(receiptHeader.getTotalLines()+1);
receiptHeaderService.updateById(receiptHeader);
return AjaxResult.success("修改单据明细成功");
}
}
/**
* 根据流程配置更新入库明细下一流程
* @param receiptDetail
* @return
*/
public ReceiptDetail queryflow(ReceiptDetail receiptDetail){
//查询头表信息
LambdaQueryWrapper<ReceiptHeader> lambdaReceiptHeader = Wrappers.lambdaQuery();
lambdaReceiptHeader.eq(ReceiptHeader::getCode, receiptDetail.getReceiptCode());
ReceiptHeader receiptHeader = receiptHeaderService.getOne(lambdaReceiptHeader);
//查询明细表中入库物料信息
LambdaQueryWrapper<Material> lambdaMaterial = Wrappers.lambdaQuery();
lambdaMaterial.eq(Material::getCode, receiptDetail.getMaterialCode());
Material material = materialService.getOne(lambdaMaterial);
//查询头表中绑定的入库类型中的入库流程
LambdaQueryWrapper<ReceiptType> lambdaReceiptType = Wrappers.lambdaQuery();
lambdaReceiptType.eq(ReceiptType::getCode, receiptHeader.getReceiptType());
ReceiptType receiptType = receiptTypeService.getOne(lambdaReceiptType);
if (receiptType.getReceiptFlow() != null){
//物料是否有入库流程
List<StatusFlowDetail> statusFlowDetails = statusFlowDetailService.queryStatusFlowDetail(receiptType.getReceiptFlow());
String status = nextStatusFlow(statusFlowDetails, receiptDetail.getProcessStamp());
receiptDetail.setProcessStamp(status);
return receiptDetail;
} else if (material.getReceivingFlow() != null){
//物料是否有入库流程
List<StatusFlowDetail> statusFlowDetails = statusFlowDetailService.queryStatusFlowDetail(material.getReceivingFlow());
String status = nextStatusFlow(statusFlowDetails, receiptDetail.getProcessStamp());
receiptDetail.setProcessStamp(status);
return receiptDetail;
} else {
//该物料类别是否有入库流程
LambdaQueryWrapper<MaterialType> lambdaMaterialType = Wrappers.lambdaQuery();
lambdaMaterialType.eq(MaterialType::getCode, material.getType());
MaterialType materialType = materialTypeService.getOne(lambdaMaterialType);
if (materialType.getReceivingFlow() != null) {
List<StatusFlowDetail> statusFlowDetails = statusFlowDetailService.queryStatusFlowDetail(materialType.getReceivingFlow());
String status = nextStatusFlow(statusFlowDetails, receiptDetail.getProcessStamp());
receiptDetail.setProcessStamp(status);
return receiptDetail;
} else {
//以上都没有的情况下查询入库首选项中的入库流程
LambdaQueryWrapper<ReceiptPreference> lambda = Wrappers.lambdaQuery();
lambda.last("Limit 1");
ReceiptPreference receiptPreference = receiptPreferenceService.getOne(lambda);
List<StatusFlowDetail> statusFlowDetails = statusFlowDetailService.queryStatusFlowDetail(receiptPreference.getReceivingFlow());
String status = nextStatusFlow(statusFlowDetails, receiptDetail.getProcessStamp());
receiptDetail.setProcessStamp(status);
return receiptDetail;
}
}
}
public String nextStatusFlow(List<StatusFlowDetail> statusFlowDetails, String status){
if (status.equals(statusFlowDetails.get(statusFlowDetails.size()-1).getFlowCode())){
return status;
} else {
for (int i = 0; i < statusFlowDetails.size(); i++){
if (Integer.parseInt(statusFlowDetails.get(i).getFlowCode()) > Integer.parseInt(status)){
return statusFlowDetails.get(i).getFlowCode();
}
}
return status;
}
}
}