GoodsSkuService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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. goodsSku.setSkuId(codeMap.get("outId").toString());
  103. goodsSku.setSkuCode(codeMap.get("outNote").toString());
  104. super.insert(goodsSku);
  105. if(goodsSkuVO.getWhId()!=null){ //生成入库单数据 插入存货表
  106. String StaffId = authUtils.getStaff().getStaffId();
  107. //总单
  108. InboundVO inboundVO = new InboundVO();
  109. inboundVO.setIntoType(Constant.IntoType.BEGIN.getName());
  110. inboundVO.setIntoingQty(goodsSkuVO.getIntoQty());
  111. inboundVO.setIntoingAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  112. inboundVO.setStaffId(StaffId);
  113. inboundVO.setMakeStaff(StaffId);
  114. inboundVO.setOrgId(goodsSkuVO.getOrgId());
  115. inboundVO.setMakeTime(LocalDateTime.now());
  116. inboundVO.setIntoDate(LocalDate.now());
  117. inboundVO.setWhId(goodsSkuVO.getWhId());
  118. inboundVO.setFlgAutoHandle(true);
  119. //明细
  120. List<InboundItemVO> inboundItemVOList = new ArrayList<>();
  121. InboundItemVO inboundItemVO = new InboundItemVO();
  122. inboundItemVO.setIntoingQty(goodsSkuVO.getIntoQty());
  123. inboundItemVO.setIntoingAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  124. inboundItemVO.setPriceInto(goodsSkuVO.getPriceInto());
  125. inboundItemVO.setCostPrice(goodsSkuVO.getPriceInto());
  126. inboundItemVO.setIntoAmt(goodsSkuVO.getIntoQty().multiply(goodsSkuVO.getPriceInto()));
  127. inboundItemVO.setIntoQty(goodsSkuVO.getIntoQty());
  128. inboundItemVO.setItemIndex(0);
  129. inboundItemVO.setSkuId(goodsSku.getSkuId());
  130. inboundItemVO.setWhId(goodsSkuVO.getWhId());
  131. inboundItemVO.setNonStdCode(goodsSkuVO.getNonStdCode());
  132. inboundItemVO.setIntoingBox(goodsSkuVO.getBox());
  133. inboundItemVO.setIntoingPiece(goodsSkuVO.getPiece());
  134. inboundItemVO.setSkuModel(goodsSkuVO.getSkuModel());
  135. inboundItemVO.setSkuName(goodsSkuVO.getSkuName());
  136. inboundItemVOList.add(inboundItemVO);
  137. Map<String, Object> map = new HashMap<>();
  138. map.put("total",inboundVO);
  139. map.put("detail",inboundItemVOList);
  140. inboundCheckService.checkInboundInsert(map);
  141. }
  142. return ResponseResultUtil.success();
  143. }
  144. /**
  145. * @desc : 新建
  146. * @author : 王英杰
  147. * @date : 2023/1/5 9:39
  148. */
  149. @Transactional(
  150. rollbackFor = {Exception.class}
  151. )
  152. public ResponseResultVO<?> update(GoodsSkuVO goodsSkuVO) {
  153. GoodsSku goodsSku = goodsSkuConvert.convertToPo(goodsSkuVO);
  154. // 获取编码和主键UuId
  155. super.updateByUuid(goodsSku);
  156. return ResponseResultUtil.success();
  157. }
  158. /**
  159. * @desc : 导入
  160. * @author : 常皓宁
  161. * @date : 2024/6/7 11:41
  162. */
  163. @Transactional(rollbackFor = {Exception.class})
  164. public ResponseResultVO<String> importSKU(List<GoodsSku> list, HttpServletResponse response,@PathVariable Integer cpId) {
  165. List<GoodsSku> messageList = new ArrayList<>();
  166. Workbook workbook = null;
  167. Boolean importMessage = false;
  168. //规则校验
  169. for (GoodsSku goodsSku : list) {
  170. goodsSku.setCpId(cpId);
  171. goodsSku.setErrorMessage("");
  172. //TODO 校验规则
  173. //商品编号不能为空
  174. if(goodsSku.getSkuCode()==null){
  175. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品编号不能为空,");
  176. importMessage = true;
  177. }
  178. //商品型号不能为空
  179. if(goodsSku.getSkuModel()==null){
  180. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品型号不能为空,");
  181. importMessage = true;
  182. }
  183. //品牌
  184. if (goodsSku.getBrandName()!=null) {
  185. String brandName = goodsSku.getBrandName();
  186. GoodsBrandResponse goodsBrandResponse = goodsBrandMapper.selectByUuId(new GoodsBrandQuery().setBrandName(brandName).setCpId(goodsSku.getCpId()));
  187. if(goodsBrandResponse == null){
  188. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品品牌填写错误,");
  189. importMessage = true;
  190. }else{
  191. goodsSku.setBrandId(goodsBrandResponse.getBrandId());
  192. }
  193. }else{
  194. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品品牌不能为空,");
  195. importMessage = true;
  196. }
  197. //种类
  198. if (goodsSku.getCategoryName()!=null) {
  199. String CatagoryName = goodsSku.getCategoryName();
  200. GoodsCategoryResponse goodsCategoryResponse = goodsCategoryMapper.selectByUuId(new GoodsCategoryQuery().setCatName(CatagoryName).setCpId(goodsSku.getCpId()));
  201. if(goodsCategoryResponse == null){
  202. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品种类填写错误,");
  203. importMessage = true;
  204. }else{
  205. goodsSku.setCategoryId(goodsCategoryResponse.getCatId());
  206. }
  207. }else{
  208. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品种类不能为空,");
  209. importMessage = true;
  210. }
  211. //计量单位
  212. if (goodsSku.getUnitName()!=null) {
  213. String unintName = goodsSku.getUnitName();
  214. UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(unintName).setCpId(goodsSku.getCpId()));
  215. if(unitResponse == null){
  216. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "计量单位填写错误,");
  217. importMessage = true;
  218. }else{
  219. goodsSku.setUnitId(unitResponse.getUnitId());
  220. }
  221. }else{
  222. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "计量单位不能为空,");
  223. importMessage = true;
  224. }
  225. //辅助单位
  226. if (goodsSku.getSubUnitName()!=null) {
  227. String subUnintName = goodsSku.getSubUnitName();
  228. UnitResponse unitResponse = unitMapper.selectByUuId(new UnitQuery().setUnitName(subUnintName).setCpId(goodsSku.getCpId()));
  229. if(unitResponse == null){
  230. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "辅助单位填写错误,");
  231. importMessage = true;
  232. }else{
  233. goodsSku.setSubUnitId(unitResponse.getUnitId());
  234. }
  235. }
  236. //商品系列
  237. if (goodsSku.getSeriesName()!=null) {
  238. String seriesName = goodsSku.getSeriesName();
  239. GoodsSeriesResponse goodsSeriesResponse = goodsSeriesMapper.selectByUuId(new GoodsSeriesQuery().setSeriesName(seriesName).setCpId(goodsSku.getCpId()));
  240. if(goodsSeriesResponse == null){
  241. goodsSku.setErrorMessage(goodsSku.getErrorMessage() + "商品系列填写错误,");
  242. importMessage = true;
  243. }else{
  244. goodsSku.setSubUnitId(goodsSeriesResponse.getSeriesId());
  245. }
  246. }
  247. messageList.add(goodsSku);
  248. }
  249. //导出错误提示
  250. if (importMessage) {
  251. workbook = ExcelUtils.exportExcelUrl(messageList, "错误数据反馈", "错误数据反馈", GoodsSku.class, "商品档案错误数据反馈.xls", response);
  252. UUID uuid = UUID.randomUUID();
  253. String randomUUIDString = uuid.toString();
  254. //TODO 导出文件位置
  255. String fileName = "D:/练习/" + randomUUIDString;
  256. File outputFile = new File(fileName);
  257. //创建文件夹
  258. if (!outputFile.exists()) {
  259. outputFile.mkdir();
  260. }
  261. File uploadFile = new File(fileName, "商品档案错误数据反馈.xls");
  262. try (FileOutputStream fos = new FileOutputStream(uploadFile)) {
  263. workbook.write(fos);
  264. } catch (IOException e) {
  265. e.printStackTrace();
  266. }
  267. return ResponseResultUtil.error(-300,"D:/练习/" + randomUUIDString + "/商品档案错误数据反馈.xls");
  268. }
  269. else{
  270. //插入数据
  271. for (GoodsSku goodsSku : messageList) {
  272. super.insert(goodsSku);
  273. }
  274. return ResponseResultUtil.success();
  275. }
  276. }
  277. public ResponseResultVO<?> saveUpdateList(List<GoodsSkuVO> goodsSkuVOS) {
  278. Boolean saveBoolean = goodsSkuMapper.saveWarningList(goodsSkuVOS);
  279. return ResponseResultUtil.success();
  280. }
  281. }