|
|
@@ -0,0 +1,180 @@
|
|
|
+package com.usoftchina.saas.purchase.service.impl;
|
|
|
+
|
|
|
+import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
|
|
|
+import com.usoftchina.saas.common.dto.DocSavedDTO;
|
|
|
+import com.usoftchina.saas.exception.BizException;
|
|
|
+import com.usoftchina.saas.purchase.dto.ProdIODetailDTO;
|
|
|
+import com.usoftchina.saas.purchase.dto.ProdInOutDTO;
|
|
|
+import com.usoftchina.saas.purchase.dto.ProdInOutFormDTO;
|
|
|
+import com.usoftchina.saas.purchase.mapper.ProdIODetailMapper;
|
|
|
+import com.usoftchina.saas.purchase.mapper.ProdInOutMapper;
|
|
|
+import com.usoftchina.saas.purchase.mapper.PurchaseMapper;
|
|
|
+import com.usoftchina.saas.purchase.po.ProdIODetail;
|
|
|
+import com.usoftchina.saas.purchase.po.ProdIODetailExample;
|
|
|
+import com.usoftchina.saas.purchase.po.ProdInOut;
|
|
|
+import com.usoftchina.saas.purchase.po.Status;
|
|
|
+import com.usoftchina.saas.purchase.service.ProdInOutService;
|
|
|
+import com.usoftchina.saas.utils.BeanMapper;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by zdw
|
|
|
+ * 2018-10-17 13:48.
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper, ProdInOut> implements ProdInOutService{
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProdIODetailMapper prodIODetailMapper;
|
|
|
+ @Autowired
|
|
|
+ private PurchaseMapper purchaseMapper;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ProdInOutFormDTO getFormData(Long id) {
|
|
|
+ ProdInOutFormDTO prodInOutFormDTO = new ProdInOutFormDTO();
|
|
|
+ //查询主表
|
|
|
+ ProdInOut prodInOut = getMapper().selectByPrimaryKey(id);
|
|
|
+ //将prodInOut实体对象转化为传输对象
|
|
|
+ ProdInOutDTO main = BeanMapper.map(prodInOut,ProdInOutDTO.class);
|
|
|
+ //查询从表
|
|
|
+ ProdIODetailExample prodIODetailExample = new ProdIODetailExample();
|
|
|
+ ProdIODetailExample.Criteria cta = prodIODetailExample.createCriteria();
|
|
|
+ cta.andPd_piidEqualTo(id.intValue());
|
|
|
+ List<ProdIODetail> prodIODetails =prodIODetailMapper.selectByExample(prodIODetailExample);
|
|
|
+ List<ProdIODetailDTO> items = BeanMapper.mapList(prodIODetails,ProdIODetailDTO.class);
|
|
|
+
|
|
|
+ prodInOutFormDTO.setMain(main);
|
|
|
+ prodInOutFormDTO.setItems(items);
|
|
|
+ return prodInOutFormDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DocSavedDTO saveFormData(ProdInOutFormDTO formdata) {
|
|
|
+ if (null == formdata || null == formdata.getMain()){
|
|
|
+ throw new BizException(500, "数据为空,请填写后再保存");
|
|
|
+ }
|
|
|
+ //获取主表信息
|
|
|
+ ProdInOutDTO main = formdata.getMain();
|
|
|
+ List<ProdIODetailDTO> items = formdata.getItems();
|
|
|
+ //插入从表数据
|
|
|
+ List<ProdIODetail> insertDetails = new ArrayList<>();
|
|
|
+ //更新从表数据
|
|
|
+ List<ProdIODetail> updateDetails = new ArrayList<>();
|
|
|
+ DocSavedDTO saveDTO = new DocSavedDTO();
|
|
|
+ Long pi_id = main.getId();
|
|
|
+ String pi_inoutno = main.getPi_inoutno();
|
|
|
+ ProdInOut prodInOut = BeanMapper.map(main,ProdInOut.class);
|
|
|
+
|
|
|
+ //编号获取
|
|
|
+ if (StringUtils.isEmpty(pi_inoutno)) {
|
|
|
+ pi_inoutno = "PI" + Math.random() * 1000;
|
|
|
+ prodInOut.setPi_inoutno(pi_inoutno);
|
|
|
+ }
|
|
|
+ saveDTO.setCode(pi_inoutno);
|
|
|
+ //判断更新与保存动作
|
|
|
+ if (!StringUtils.isEmpty(pi_id)){
|
|
|
+ //更新主表
|
|
|
+ getMapper().updateByPrimaryKey(prodInOut);
|
|
|
+ //添加从表传输对象
|
|
|
+ for (ProdIODetailDTO item : items) {
|
|
|
+ ProdIODetail detail = BeanMapper.map(item,ProdIODetail.class);
|
|
|
+ detail.setPd_piid(pi_id);
|
|
|
+ detail.setPd_inoutno(pi_inoutno);
|
|
|
+ if (!StringUtils.isEmpty(detail.getId())) {
|
|
|
+ updateDetails.add(detail);
|
|
|
+ } else {
|
|
|
+ insertDetails.add(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //插入从表
|
|
|
+ if (insertDetails.size()>0) {
|
|
|
+ prodIODetailMapper.batchInsert(insertDetails);
|
|
|
+ }
|
|
|
+ //更新从表
|
|
|
+ if (updateDetails.size()>0) {
|
|
|
+ prodIODetailMapper.batchUpdate(updateDetails);
|
|
|
+ }
|
|
|
+ saveDTO.setId(pi_id);
|
|
|
+ return saveDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ //插入操作
|
|
|
+ getMapper().insertSelective(prodInOut);
|
|
|
+ pi_id = prodInOut.getId();
|
|
|
+ //添加从表传输对象
|
|
|
+ for (ProdIODetailDTO item : items) {
|
|
|
+ ProdIODetail detail = BeanMapper.map(item, ProdIODetail.class);
|
|
|
+ detail.setPd_piid(pi_id);
|
|
|
+ detail.setPd_inoutno(pi_inoutno);
|
|
|
+ insertDetails.add(detail);
|
|
|
+ }
|
|
|
+ //插入从表
|
|
|
+ if (insertDetails.size()>0) {
|
|
|
+
|
|
|
+ prodIODetailMapper.batchInsert(insertDetails);
|
|
|
+ }
|
|
|
+ saveDTO.setId(pi_id);
|
|
|
+ return saveDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void delete(Long id) {
|
|
|
+ singleDelete(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void singleDelete(Long id) {
|
|
|
+ if (null != id) {
|
|
|
+ //删除主键
|
|
|
+ getMapper().deleteByPrimaryKey(id.intValue());
|
|
|
+
|
|
|
+ //删除从表
|
|
|
+ ProdIODetailExample prodIODetailExample = new ProdIODetailExample();
|
|
|
+ ProdIODetailExample.Criteria cta = prodIODetailExample.createCriteria();
|
|
|
+ cta.andPd_piidEqualTo(id.intValue());
|
|
|
+ prodIODetailMapper.deleteByExample(prodIODetailExample);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public DocSavedDTO audit(ProdInOutFormDTO formData) {
|
|
|
+ Long id = null;
|
|
|
+ DocSavedDTO savedDTO = new DocSavedDTO();
|
|
|
+ if (null != formData) {
|
|
|
+ id = formData.getMain().getId();
|
|
|
+ if (StringUtils.isEmpty(id)) {
|
|
|
+ DocSavedDTO saveDTO = saveFormData(formData);
|
|
|
+ id = saveDTO.getId();
|
|
|
+ }
|
|
|
+ singleAudit(id);
|
|
|
+ }
|
|
|
+ savedDTO.setId(id);
|
|
|
+ return savedDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void singleAudit(Long id) {
|
|
|
+ ProdInOut prodInOut = new ProdInOut();
|
|
|
+ prodInOut.setId(id);
|
|
|
+ prodInOut.setPi_status(Status.AUDITED.getDisplay());
|
|
|
+ prodInOut.setPi_statuscode(Status.AUDITED.name());
|
|
|
+ getMapper().updateByPrimaryKeySelective(prodInOut);
|
|
|
+ //更新已转数
|
|
|
+ updatePurchaseYqty(id);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updatePurchaseYqty(Long id) {
|
|
|
+ //更新已转数
|
|
|
+ prodIODetailMapper.updatePurchaseYqty(id);
|
|
|
+ //更新采购单入库状态
|
|
|
+ purchaseMapper.updateAcceptstatus(id);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|