GoodsSkuService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package com.dk.mdm.service.mst;
  2. import com.dk.common.exception.BaseBusinessException;
  3. import com.dk.common.infrastructure.annotaiton.Pagination;
  4. import com.dk.common.infrastructure.constant.Constant;
  5. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  6. import com.dk.common.model.pojo.PageList;
  7. import com.dk.common.response.ResponseResultUtil;
  8. import com.dk.common.response.ResponseResultVO;
  9. import com.dk.common.util.ExcelUtils;
  10. import com.dk.mdm.infrastructure.convert.mst.GoodsSkuConvert;
  11. import com.dk.mdm.infrastructure.util.AuthUtils;
  12. import com.dk.mdm.mapper.mst.*;
  13. import com.dk.mdm.model.pojo.mst.GoodsBrand;
  14. import com.dk.mdm.model.pojo.mst.GoodsCategory;
  15. import com.dk.mdm.model.pojo.mst.GoodsSku;
  16. import com.dk.common.service.BaseService;
  17. import com.dk.common.mapper.BaseMapper;
  18. import com.dk.mdm.model.pojo.mst.Role;
  19. import com.dk.mdm.model.query.mac.OtherReceivableItemQuery;
  20. import com.dk.mdm.model.query.mst.*;
  21. import com.dk.mdm.model.response.mac.OtherReceivableItemResponse;
  22. import com.dk.mdm.model.response.mst.*;
  23. import com.dk.mdm.model.vo.ivt.InOutRecordVO;
  24. import com.dk.mdm.model.vo.ivt.InboundItemVO;
  25. import com.dk.mdm.model.vo.ivt.InboundVO;
  26. import com.dk.mdm.model.vo.mst.GoodsSkuVO;
  27. import com.dk.mdm.model.vo.mst.RoleVo;
  28. import com.dk.mdm.service.common.CommonService;
  29. import com.dk.mdm.service.ivt.inbound.InboundCheckService;
  30. import com.dk.mdm.service.ivt.inventory.InventoryService;
  31. import org.apache.poi.ss.usermodel.Workbook;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import org.springframework.web.bind.annotation.PathVariable;
  36. import javax.servlet.http.HttpServletResponse;
  37. import java.io.File;
  38. import java.io.FileOutputStream;
  39. import java.io.IOException;
  40. import java.math.BigDecimal;
  41. import java.time.LocalDate;
  42. import java.time.LocalDateTime;
  43. import java.util.*;
  44. @Service
  45. @Transactional
  46. public class GoodsSkuService extends BaseService<GoodsSku> {
  47. @Override
  48. public BaseMapper<GoodsSku> getRepository() {
  49. return goodsSkuMapper;
  50. }
  51. @Autowired
  52. private GoodsSkuMapper goodsSkuMapper;
  53. @Autowired
  54. private GoodsSkuConvert goodsSkuConvert;
  55. @Autowired
  56. private InboundCheckService inboundCheckService;
  57. @Autowired
  58. InventoryService inventoryService;
  59. @Autowired
  60. private GoodsBrandMapper goodsBrandMapper;
  61. @Autowired
  62. private GoodsCategoryMapper goodsCategoryMapper;
  63. @Autowired
  64. private UnitMapper unitMapper;
  65. @Autowired
  66. private GoodsSeriesMapper goodsSeriesMapper;
  67. /**
  68. * @desc : 重写组件
  69. * @author : 王英杰
  70. * @date : 2024/3/4 14:51
  71. */
  72. @Override
  73. public String getPrimaryKey() {
  74. return "sku_id";
  75. }
  76. @Autowired
  77. private CommonService commonService;
  78. @Autowired
  79. private AuthUtils authUtils;
  80. /**
  81. * @desc : 查询
  82. * @author : 王英杰
  83. * @date : 2023/1/5 9:39
  84. */
  85. @Pagination
  86. public ResponseResultVO<PageList<GoodsSkuResponse>> selectByCond(GoodsSkuQuery goodsSkuQuery) {
  87. return super.mergeListWithCount(goodsSkuQuery, goodsSkuMapper.selectByCond(goodsSkuQuery),
  88. goodsSkuMapper.countByCond(goodsSkuQuery));
  89. }
  90. /**
  91. * @desc : 新建
  92. * @author : 王英杰
  93. * @date : 2023/1/5 9:39
  94. */
  95. @Transactional(
  96. rollbackFor = {Exception.class}
  97. )
  98. public ResponseResultVO<?> insert(GoodsSkuVO goodsSkuVO) {
  99. GoodsSku goodsSku = goodsSkuConvert.convertToPo(goodsSkuVO);
  100. // 获取编码和主键UuId
  101. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.GOODSSKU.getName(), true);
  102. // 如果辅助单位标识前端传值为空则赋值false
  103. if(goodsSku.getFlgSubUnit() == null || goodsSku.getFlgSubUnit().equals("null")){
  104. goodsSku.setFlgSubUnit(false);
  105. }
  106. goodsSku.setSkuId(codeMap.get("outId").toString());
  107. goodsSku.setSkuCode(codeMap.get("outNote").toString());
  108. super.insert(goodsSku);
  109. if(goodsSkuVO.getWhId()!=null){ //生成入库单数据 插入存货表
  110. String StaffId = authUtils.getStaff().getStaffId();
  111. //总单
  112. InboundVO inboundVO = new InboundVO();
  113. inboundVO.setIntoType(Constant.IntoType.BEGIN.getName());
  114. inboundVO.setIntoingQty(goodsSkuVO.getIntoQty());
  115. inboundVO.setIntoingAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  116. inboundVO.setStaffId(StaffId);
  117. inboundVO.setMakeStaff(StaffId);
  118. inboundVO.setOrgId(goodsSkuVO.getOrgId());
  119. inboundVO.setMakeTime(LocalDateTime.now());
  120. inboundVO.setIntoDate(LocalDate.now());
  121. inboundVO.setWhId(goodsSkuVO.getWhId());
  122. inboundVO.setFlgAutoHandle(true);
  123. //明细
  124. List<InboundItemVO> inboundItemVOList = new ArrayList<>();
  125. InboundItemVO inboundItemVO = new InboundItemVO();
  126. inboundItemVO.setIntoingQty(goodsSkuVO.getIntoQty());
  127. inboundItemVO.setIntoingAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  128. inboundItemVO.setPriceInto(goodsSkuVO.getPriceInto());
  129. inboundItemVO.setCostPrice(goodsSkuVO.getPriceInto());
  130. inboundItemVO.setCostAmt(inboundItemVO.getIntoingAmt());
  131. inboundItemVO.setIntoAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  132. inboundItemVO.setIntoQty(goodsSkuVO.getIntoQty());
  133. inboundItemVO.setItemIndex(0);
  134. inboundItemVO.setSkuId(goodsSku.getSkuId());
  135. inboundItemVO.setWhId(goodsSkuVO.getWhId());
  136. inboundItemVO.setNonStdCode(goodsSkuVO.getNonStdCode());
  137. inboundItemVO.setIntoingBox(goodsSkuVO.getBox());
  138. inboundItemVO.setIntoingPiece(goodsSkuVO.getPiece());
  139. inboundItemVO.setSkuModel(goodsSkuVO.getSkuModel());
  140. inboundItemVO.setSkuName(goodsSkuVO.getSkuName());
  141. inboundItemVOList.add(inboundItemVO);
  142. Map<String, Object> map = new HashMap<>();
  143. map.put("total",inboundVO);
  144. map.put("detail",inboundItemVOList);
  145. inboundCheckService.checkInboundInsert(map);
  146. }
  147. return ResponseResultUtil.success();
  148. }
  149. /**
  150. * @desc : 新建
  151. * @author : 王英杰
  152. * @date : 2023/1/5 9:39
  153. */
  154. @Transactional(
  155. rollbackFor = {Exception.class}
  156. )
  157. public ResponseResultVO<?> update(GoodsSkuVO goodsSkuVO) {
  158. GoodsSku goodsSku = goodsSkuConvert.convertToPo(goodsSkuVO);
  159. // 获取编码和主键UuId
  160. super.updateByUuid(goodsSku);
  161. return ResponseResultUtil.success();
  162. }
  163. /**
  164. * @desc : 导入
  165. * @author : 常皓宁
  166. * @date : 2024/6/7 11:41
  167. */
  168. @Transactional(rollbackFor = {Exception.class})
  169. public ResponseResultVO<String> importSKU(List<GoodsSku> list, HttpServletResponse response,@PathVariable Integer cpId) {
  170. List<GoodsSku> messageList = new ArrayList<>();
  171. Workbook workbook = null;
  172. Boolean importMessage = false;
  173. //规则校验
  174. for (GoodsSku goodsSku : list) {
  175. goodsSku.setCpId(cpId);
  176. goodsSku.setErrorMessage("");
  177. //TODO 校验规则
  178. //商品编号不能为空
  179. if(goodsSku.getSkuCode()==null){
  180. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品编号不能为空,");
  181. importMessage = true;
  182. }
  183. //商品型号不能为空
  184. if(goodsSku.getSkuModel()==null){
  185. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品型号不能为空,");
  186. importMessage = true;
  187. }
  188. //品牌
  189. if (goodsSku.getBrandName()!=null) {
  190. String brandName = goodsSku.getBrandName();
  191. GoodsBrandResponse goodsBrandResponse = goodsBrandMapper.selectByUuId(new GoodsBrandQuery().setBrandName(brandName).setCpId(goodsSku.getCpId()));
  192. if(goodsBrandResponse == null){
  193. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品品牌填写错误,");
  194. importMessage = true;
  195. }else{
  196. goodsSku.setBrandId(goodsBrandResponse.getBrandId());
  197. }
  198. }else{
  199. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品品牌不能为空,");
  200. importMessage = true;
  201. }
  202. //种类
  203. if (goodsSku.getCategoryName()!=null) {
  204. String CatagoryName = goodsSku.getCategoryName();
  205. GoodsCategoryResponse goodsCategoryResponse = goodsCategoryMapper.selectByUuId(new GoodsCategoryQuery().setCatName(CatagoryName).setCpId(goodsSku.getCpId()));
  206. if(goodsCategoryResponse == null){
  207. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品种类填写错误,");
  208. importMessage = true;
  209. }else{
  210. goodsSku.setCategoryId(goodsCategoryResponse.getCatId());
  211. }
  212. }else{
  213. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品种类不能为空,");
  214. importMessage = true;
  215. }
  216. //计量单位
  217. if (goodsSku.getUnitName()!=null) {
  218. String unintName = goodsSku.getUnitName();
  219. UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(unintName).setCpId(goodsSku.getCpId()));
  220. if(unitResponse == null){
  221. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "计量单位填写错误,");
  222. importMessage = true;
  223. }else{
  224. goodsSku.setUnitId(unitResponse.getUnitId());
  225. }
  226. }else{
  227. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "计量单位不能为空,");
  228. importMessage = true;
  229. }
  230. //辅助单位
  231. if (goodsSku.getSubUnitName()!=null) {
  232. String subUnintName = goodsSku.getSubUnitName();
  233. UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(subUnintName).setCpId(goodsSku.getCpId()));
  234. if(unitResponse == null){
  235. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "辅助单位填写错误,");
  236. importMessage = true;
  237. }else{
  238. goodsSku.setSubUnitId(unitResponse.getUnitId());
  239. }
  240. }
  241. //商品系列
  242. if (goodsSku.getSeriesName()!=null) {
  243. String seriesName = goodsSku.getSeriesName();
  244. GoodsSeriesResponse goodsSeriesResponse = goodsSeriesMapper.selectByUuId(new GoodsSeriesQuery().setSeriesName(seriesName).setCpId(goodsSku.getCpId()));
  245. if(goodsSeriesResponse == null){
  246. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品系列填写错误,");
  247. importMessage = true;
  248. }else{
  249. goodsSku.setSubUnitId(goodsSeriesResponse.getSeriesId());
  250. }
  251. }
  252. messageList.add(goodsSku);
  253. }
  254. //导出错误提示
  255. if (importMessage) {
  256. workbook = ExcelUtils.exportExcelUrl(messageList, "错误数据反馈", "错误数据反馈", GoodsSku.class, "商品档案错误数据反馈.xls", response);
  257. UUID uuid = UUID.randomUUID();
  258. String randomUUIDString = uuid.toString();
  259. //TODO 导出文件位置
  260. String fileName = "D:/练习/" + randomUUIDString;
  261. File outputFile = new File(fileName);
  262. //创建文件夹
  263. if (!outputFile.exists()) {
  264. outputFile.mkdir();
  265. }
  266. File uploadFile = new File(fileName, "商品档案错误数据反馈.xls");
  267. try (FileOutputStream fos = new FileOutputStream(uploadFile)) {
  268. workbook.write(fos);
  269. } catch (IOException e) {
  270. e.printStackTrace();
  271. }
  272. return ResponseResultUtil.error(-300,"D:/练习/" + randomUUIDString + "/商品档案错误数据反馈.xls");
  273. }
  274. else{
  275. //插入数据
  276. for (GoodsSku goodsSku : messageList) {
  277. super.insert(goodsSku);
  278. }
  279. return ResponseResultUtil.success();
  280. }
  281. }
  282. public ResponseResultVO<?> saveUpdateList(List<GoodsSkuVO> goodsSkuVOS) {
  283. Boolean saveBoolean = goodsSkuMapper.saveWarningList(goodsSkuVOS);
  284. return ResponseResultUtil.success();
  285. }
  286. }