WarehousingServiceImpl.java 13 KB

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