Blame view

src/main/java/com/huaheng/api/general/service/CycleCountService.java 7.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.huaheng.api.general.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.CycCountDomain;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.config.configValue.domain.ConfigValue;
import com.huaheng.pc.config.configValue.service.ConfigValueService;
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader;
import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
19
import org.springframework.stereotype.Service;
20
21
22
23
24
25
26
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
27
@Service
28
29
30
31
32
33
34
35
36
37
public class CycleCountService {

    @Resource
    private CycleCountHeaderService cycleCountHeaderService;
    @Resource
    private CycleCountDetailService cycleCountDetailService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private ConfigValueService configValueService;
38
39
40
    /**
     * 盘点单下发
41
     *
42
43
44
45
     * @param cycCountDomain 盘点单
     * @return 是否下发成功
     */
    @Transactional(rollbackFor = Exception.class)
46
47
    public AjaxResult insertCycleCount(CycCountDomain cycCountDomain) {
        CycleCountHeader cycleCountHeader = cycCountDomain.getCycleCountHeader();
48
49
        if (cycleCountHeader == null || cycCountDomain.getInventoryId() == null) {
50
51
52
            return AjaxResult.error("主单据或库存id不能为空");
        }
53
        if (StringUtils.isEmpty(cycCountDomain.getCycleCountHeader().getCountType())) {
54
55
            return AjaxResult.error("盘点类型不能为空");
        }
56
        if (StringUtils.isEmpty(cycleCountHeader.getWarehouseCode())) {
57
58
            return AjaxResult.error("仓库编码不能为空");
        }
59
        if (StringUtils.isEmpty(cycleCountHeader.getCompanyCode())) {
60
61
62
63
64
65
66
67
            return AjaxResult.error("货主编码不能为空");
        }

        cycleCountHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
        cycleCountHeader.setCompanyCode(cycleCountHeader.getCompanyCode());
        cycleCountHeader.setCreated(new Date());
        cycleCountHeader.setCreatedBy(ShiroUtils.getLoginName());
        cycleCountHeader.setCode(cycleCountHeaderService.createCode());
68
        if (!cycleCountHeaderService.save(cycleCountHeader)) {
69
70
            return AjaxResult.error("新增盘点单失败");
        }
71
        this.addDetails(cycleCountHeader.getCode(), cycCountDomain.getInventoryId());
72
73
74
75
76
77

        return AjaxResult.success("成功");
    }

    /**
     * 新增盘点明细
78
     */
79
80
81
    @Transactional
    public AjaxResult addDetails(String cycleCountHeadCode, Integer[] inventoryDetailIdIds) {
82
        if (cycleCountHeadCode == null) {
83
84
            throw new ServiceException("盘点主单编码不能为空!");
        }
85
        CycleCountHeader cyclecountHeader = new CycleCountHeader();
86
87
88
89
        cyclecountHeader.setCode(cycleCountHeadCode);
        LambdaQueryWrapper<CycleCountHeader> ch = Wrappers.lambdaQuery(cyclecountHeader);
        cyclecountHeader = cycleCountHeaderService.getOne(ch);
        //可能存在并发删除的情况
90
        if (cyclecountHeader == null) {
91
92
            return AjaxResult.error("盘点主单据不存在");
        }
93
        if (cyclecountHeader.getStatusCyc() > QuantityConstant.CYCLECOUNT_STATUS_BUILD) {
94
95
96
97
98
99
100
101
            return AjaxResult.error("盘点单非新建状态,无法再添加明细");
        }
        //默认盘点配置,首选项
        ConfigValue configValue = new ConfigValue();
        configValue.setModuleType("cyclecount");
        configValue.setWarehouseCode(ShiroUtils.getWarehouseCode());
        LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper = Wrappers.lambdaQuery(configValue);
        configValue = configValueService.getOne(configValueLambdaQueryWrapper);
102
        if (configValue == null) {
103
104
105
106
107
108
109
110
111
112
            throw new SecurityException("请先在配置中添加盘点配置");
        }
        String preferenceCode = configValue.getIdentifier();
        //获取已经存在的明细
        CycleCountDetail cycleCountDetail = new CycleCountDetail();
        cycleCountDetail.setWarehouseCode(cyclecountHeader.getWarehouseCode());
        cycleCountDetail.setCompanyCode(cyclecountHeader.getCompanyCode());
        cycleCountDetail.setCycleCountHeadCode(cyclecountHeader.getCode());
        LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambd = Wrappers.lambdaQuery(cycleCountDetail);
        List<CycleCountDetail> cyclecountDetailList = cycleCountDetailService.list(cycleCountDetailLambd);
113
        if (cyclecountDetailList == null) {
114
115
            cyclecountDetailList = new ArrayList<>();
        }
116
        for (int inventoryDetailId : inventoryDetailIdIds) {
117
            //当前有盘点明细时验证是否已经生成盘点细单,生成则跳出该条循环
118
            if (cyclecountDetailList.stream().anyMatch(t -> t.getInventoryDetailId() != null && t.getInventoryDetailId() == inventoryDetailId)) {
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
                continue;
            }
            //查询该条库存明细
            InventoryDetail inventoryDetail = inventoryDetailService.getById(inventoryDetailId);
            //写入盘点明细
            CycleCountDetail ccd = new CycleCountDetail();
            ccd.setPreferenceCode(preferenceCode);
            ccd.setCycleCountHeadCode(cyclecountHeader.getCode());
            ccd.setInventoryDetailId(inventoryDetailId);
            ccd.setWarehouseCode(inventoryDetail.getWarehouseCode());
            ccd.setCompanyCode(inventoryDetail.getCompanyCode());
            ccd.setInventorySts(inventoryDetail.getInventorySts());
            ccd.setCountId(inventoryDetail.getId());
            ccd.setLocationCode(inventoryDetail.getLocationCode());
            ccd.setContainerCode(inventoryDetail.getContainerCode());
134
            ccd.setVehicleCode(inventoryDetail.getVehicleCode());
135
136
137
138
            ccd.setMaterialCode(inventoryDetail.getMaterialCode());
            ccd.setMaterialName(inventoryDetail.getMaterialName());
            ccd.setMaterialSpec(inventoryDetail.getMaterialSpec());
            ccd.setMaterialUnit(inventoryDetail.getMaterialUnit());
139
140
            ccd.setWeight(inventoryDetail.getWeight());
            ccd.setSupplierCode(inventoryDetail.getSupplierCode());
141
142
143
144
            ccd.setSystemQty(inventoryDetail.getQty());
            ccd.setBatch(inventoryDetail.getBatch());
            ccd.setCountedBy(cyclecountHeader.getCreatedBy());
            ccd.setCountedAt(cyclecountHeader.getCreated());
145
146
147
148
            boolean success = cycleCountDetailService.save(ccd);
            if (!success) {
                throw new ServiceException("新增判单明细失败");
            }
149
150
151
152
153
        }
        return AjaxResult.success("生成盘点明细成功");
    }

}