WarehousingServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.tld.service.impl;
  2. import com.github.pagehelper.PageHelper;
  3. import com.github.pagehelper.PageInfo;
  4. import com.tld.excel.ExcelUtils;
  5. import com.tld.mapper.UserMapper;
  6. import com.tld.mapper.WarehousingMapper;
  7. import com.tld.model.*;
  8. import com.tld.service.WarehousingService;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import javax.servlet.http.HttpServletResponse;
  13. import java.text.SimpleDateFormat;
  14. import java.util.*;
  15. @Service
  16. public class WarehousingServiceImpl implements WarehousingService {
  17. @Autowired
  18. private WarehousingMapper warehousingMapper;
  19. @Autowired
  20. private UserMapper userMapper;
  21. @Override
  22. public Map<String, Object> getRecommend(String wllbCode, String suppId, String num, String unique, String producDate) {
  23. Map<String, Object> map = new HashMap<>();
  24. try{
  25. Map<String, Object> mapVal = warehousingMapper.getScanIsNot(wllbCode, suppId, unique, producDate);
  26. if(Integer.parseInt(mapVal.get("inventoryCount").toString()) != 0 || Integer.parseInt(mapVal.get("virtualCount").toString()) != 0){
  27. map.put("msg", "500");
  28. map.put("errMsg", "已被扫描");
  29. return map;
  30. }
  31. //判断如果是混合则走单独逻辑
  32. String isNotSisable = warehousingMapper.getIsNotSisable(wllbCode);
  33. if(isNotSisable.equals("1")){
  34. List<StorageLocation> list1 = warehousingMapper.getIsNotSisableLocation("1");
  35. map.put("data", list1);
  36. map.put("msg", "200");
  37. return map;
  38. }
  39. List<MaterialClass> listMaterialClass = warehousingMapper.getMaterialClass(wllbCode);
  40. if(listMaterialClass.size() == 0){
  41. listMaterialClass = warehousingMapper.getMaterialClassType(wllbCode);
  42. }
  43. StringBuffer stringBuffer = new StringBuffer();
  44. List<Integer> listString = new LinkedList<>();//库存剩余数量
  45. for(int i = 0; i < listMaterialClass.size(); i++) {
  46. Map<String, Object> map1 = warehousingMapper.getScanNum(listMaterialClass.get(i).getStorageLocationCode(), num);
  47. if(Double.parseDouble(String.valueOf(map1.get("scanNum"))) < Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity")))){
  48. stringBuffer.append(listMaterialClass.get(i).getStorageLocationCode() + ",");
  49. int surplusNum = (int) (Double.parseDouble(String.valueOf(map1.get("storageLocationCapacity"))) - Double.parseDouble(String.valueOf(map1.get("scanNum"))) + Double.parseDouble(num));
  50. listString.add(surplusNum);
  51. }
  52. }
  53. List<StorageLocation> list = warehousingMapper.recommend(stringBuffer.toString());
  54. map.put("data", list);
  55. map.put("listString", listString);//返回库位剩余数量
  56. map.put("msg", "200");
  57. } catch (Exception e){
  58. e.printStackTrace();
  59. map.put("msg", "500");
  60. map.put("errMsg", "服务器请求异常,请稍后再试");
  61. }
  62. return map;
  63. }
  64. @Override
  65. @Transactional(rollbackFor = Exception.class)
  66. public Map<String, Object> addWarehousingVirtual(WarehousingVirtual warehousingVirtual) {
  67. Map<String, Object> map = new HashMap<>();
  68. try{
  69. warehousingMapper.addWarehousingVirtual(warehousingVirtual);
  70. map.put("msg", "200");
  71. } catch (Exception e){
  72. e.printStackTrace();
  73. map.put("msg", "500");
  74. map.put("errMsg", "服务器请求异常,请稍后再试");
  75. }
  76. return map;
  77. }
  78. @Override
  79. @Transactional(rollbackFor = Exception.class)
  80. public Map<String, Object> delWarehousingVirtual(WarehousingVirtual warehousingVirtual) {
  81. Map<String, Object> map = new HashMap<>();
  82. try{
  83. warehousingMapper.delWarehousingVirtual(warehousingVirtual);
  84. map.put("msg", "200");
  85. } catch (Exception e){
  86. e.printStackTrace();
  87. map.put("msg", "500");
  88. map.put("errMsg", "服务器请求异常,请稍后再试");
  89. }
  90. return map;
  91. }
  92. @Override
  93. public Map<String, Object> warehousing(String uniqueCode) {
  94. Map<String, Object> map = new HashMap<>();
  95. try{
  96. //入库信息
  97. List<WarehousingVirtual> list = new LinkedList<>();
  98. //查询入库所需要的信息
  99. for(WarehousingVirtual warehousingVirtual : warehousingMapper.getVirtual(uniqueCode)){
  100. //查询采购单信息
  101. List<ReceiveGoods> receiveGoods = warehousingMapper.getReceiveGoods(warehousingVirtual);
  102. if(receiveGoods.size() != 0) {
  103. //所属账套
  104. warehousingVirtual.setAccountSleeve(receiveGoods.get(0).getCompanyNumber());
  105. //WBS
  106. warehousingVirtual.setWbs(receiveGoods.get(0).getWbs());
  107. }
  108. //查询部门编号
  109. List<User> listUser = userMapper.getAllUser(new User().setId(Integer.parseInt(warehousingVirtual.getUserId())));
  110. warehousingVirtual.setDepartmentId(listUser.get(0).getDepartmentId());
  111. //查询物料分类
  112. WarehousingVirtual warehousingVirtual1 = warehousingMapper.getWlClass(warehousingVirtual);
  113. warehousingVirtual.setWllbClass(warehousingVirtual1.getWllbClass());
  114. warehousingVirtual.setMaterialId(warehousingVirtual1.getMaterialId());
  115. list.add(warehousingVirtual);
  116. }
  117. //入库
  118. warehousingMapper.addStorage(list);//入库流水
  119. warehousingMapper.addInventory(list);//库存
  120. //返回采购单id
  121. StringBuilder stringBuilder = new StringBuilder();
  122. //入质检入库数量
  123. for(WarehousingVirtual warehousingVirtual1 : warehousingMapper.getVirtual(uniqueCode)) {
  124. //查询采购单信息
  125. List<ReceiveGoods> receiveGoods = warehousingMapper.getReceiveGoods(warehousingVirtual1);
  126. for(ReceiveGoods receiveGoods1 : receiveGoods) {
  127. if(Integer.parseInt(warehousingVirtual1.getNum()) <= 0){
  128. break;
  129. }
  130. //采购单剩余入库数量
  131. int surplusNum = Integer.parseInt(receiveGoods1.getQualifiedNum()) - Integer.parseInt(receiveGoods1.getWarehousingNum());
  132. //剩余入库数量
  133. int numInto = Integer.parseInt(warehousingVirtual1.getNum()) - surplusNum;
  134. if(numInto < 0){
  135. receiveGoods1.setWarehousingNum(warehousingVirtual1.getNum());
  136. warehousingMapper.updateReceiveGood(receiveGoods1);
  137. } else {
  138. receiveGoods1.setWarehousingNum(String.valueOf(surplusNum));
  139. warehousingMapper.updateReceiveGood(receiveGoods1);
  140. //存入给gs的返回数据
  141. ReturnWarehousing returnWarehousing = new ReturnWarehousing()
  142. .setWarehousingNum(receiveGoods1.getWarehousingNum())
  143. .setGsCk(warehousingVirtual1.getGsCk())
  144. .setSourceType(receiveGoods1.getSourceType())
  145. .setMoveType(receiveGoods1.getMoveType())
  146. .setEntryNumber(receiveGoods1.getEntryNumber())
  147. .setWbs(receiveGoods1.getWbs())
  148. .setReceiveGoodsId(receiveGoods1.getId())
  149. .setMaterialId(receiveGoods1.getMaterialId())
  150. .setStorageCode(codeGenerateRk())
  151. .setOrderNumber(receiveGoods1.getOrderNumber());
  152. warehousingMapper.addReturnWarehousing(returnWarehousing);
  153. //判断是否有已存在的采购单号
  154. if(!stringBuilder.toString().contains(receiveGoods1.getOrderNumber() + ",")){
  155. stringBuilder.append(receiveGoods1.getOrderNumber() + ",");
  156. }
  157. }
  158. warehousingVirtual1.setNum(String.valueOf(numInto));
  159. }
  160. }
  161. warehousingMapper.delVirtual(uniqueCode);//删除临时表数据
  162. map.put("data", stringBuilder.toString());
  163. map.put("msg", "200");
  164. } catch (Exception e){
  165. e.printStackTrace();
  166. map.put("msg", "500");
  167. map.put("errMsg", "服务器请求异常,请稍后再试");
  168. }
  169. return map;
  170. }
  171. @Override
  172. public void plugOutWarehousing(String orderNumber) {
  173. try{
  174. Calendar cal = Calendar.getInstance();
  175. int year = cal.get(Calendar.YEAR);
  176. int month = cal.get(Calendar.MONTH) + 1;
  177. int day = cal.get(Calendar.DATE) ;
  178. List<ReturnWarehousing> list = new ArrayList<>();
  179. for(ReturnWarehousing returnWarehousing : warehousingMapper.getPlugOutWarehousing(orderNumber)){
  180. returnWarehousing.setYear(String.valueOf(year));
  181. returnWarehousing.setMonth(String.valueOf(month));
  182. returnWarehousing.setTime(year + "-" + month + "-" + day);
  183. returnWarehousing.setIsNotRed("0");
  184. list.add(returnWarehousing);
  185. }
  186. }catch (Exception e){
  187. e.printStackTrace();
  188. }
  189. }
  190. @Override
  191. public Map<String, Object> warehousingFlowing(Storage storage) {
  192. Map<String, Object> map = new HashMap<>();
  193. try{
  194. PageHelper.startPage(storage.getPage(), storage.getLimit());
  195. PageInfo<Storage> list = new PageInfo<>(warehousingMapper.warehousingFlowing(storage));
  196. map.put("data", list);
  197. map.put("msg", "200");
  198. } catch (Exception e){
  199. e.printStackTrace();
  200. map.put("msg", "500");
  201. map.put("errMsg", "服务器请求异常,请稍后再试");
  202. }
  203. return map;
  204. }
  205. @Override
  206. public Map<String, Object> getWarehousingVirtual(String uniqueCode) {
  207. Map<String, Object> map = new HashMap<>();
  208. try{
  209. List<WarehousingVirtual> list = warehousingMapper.getWarehousingVirtual(uniqueCode);
  210. map.put("data", list);
  211. map.put("msg", "200");
  212. } catch (Exception e){
  213. e.printStackTrace();
  214. map.put("msg", "500");
  215. map.put("errMsg", "服务器请求异常,请稍后再试");
  216. }
  217. return map;
  218. }
  219. @Override
  220. public void export(Storage storage, HttpServletResponse response) {
  221. try{
  222. //导出数据汇总
  223. List<List<Object>> sheetDataList = new ArrayList<>();
  224. //表头数据
  225. List<Object> head = Arrays.asList("物料名称", "供应商名称", "连翻号", "生产日期", "生产批次", "容量", "序列号", "类型", "用户名称", "部门", "库位名称", "入库日期");
  226. //查询数据
  227. PageHelper.startPage(storage.getPage(), storage.getLimit());
  228. PageInfo<Map<String, Object>> list = new PageInfo<>(warehousingMapper.export(storage));
  229. sheetDataList.add(head);
  230. for(Map<String, Object> userMap : list.getList()){
  231. List<Object> listSheet = new ArrayList<>();
  232. for(String key: userMap.keySet()){
  233. listSheet.add(userMap.get(key));
  234. }
  235. sheetDataList.add(listSheet);
  236. }
  237. //当前时间
  238. Date time = new Date();
  239. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMddHHmmss");
  240. ExcelUtils.export(response, "入库流水数据导出" + sdf.format(time), sheetDataList);
  241. }catch (Exception e){
  242. e.printStackTrace();
  243. }
  244. }
  245. /**
  246. * 入库单生成
  247. * @return
  248. */
  249. public String codeGenerateRk(){
  250. StringBuilder stringBuilder = new StringBuilder("RK");
  251. Date date = new Date();
  252. SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
  253. stringBuilder.append(sdf.format(date));
  254. int count = warehousingMapper.getWarehousingCount();
  255. for(int i = 0; i < 4 - (count + "").length(); i++){
  256. stringBuilder.append("0");
  257. }
  258. return (stringBuilder.append(count + 1)).toString();
  259. }
  260. }