futian.liu
2023-11-13 11f925fdce0f58d1f321f3a13a3f3e84221c6912
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.consum.base.service;
 
import com.consum.base.core.utils.LockManage;
import com.consum.model.po.LGoodsUserRecord;
import com.consum.model.po.LWhFormTransfer;
import com.consum.model.po.LWhProcureModelUser;
import com.consum.model.po.LWhProcureModelUserRecord;
import com.walker.infrastructure.utils.NumberGenerator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils;
 
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
 
/**
 * @ClassName LGoodsUserRecordCoreService
 * @Date 2023/11/2
 * @Description
 * @Version 1.0
 **/
@Service
@Transactional(rollbackFor = Exception.class)
public class LGoodsUserRecordCoreService {
    @Resource
    private GoodsBaseServiceImpl goodsBaseService;
    @Resource
    private LWhGoodsService lWhGoodsService;
    @Resource
    private LGoodsUserRecordServiceImpl lGoodsUserRecordService;
 
    /**
     * 通过新旧 物品使用人修改记录【L_WH_PROCURE_MODEL_USER_RECORD】中的ID , 来修改物品使用人
     *
     * @param oldProcureModelUserRecordId
     * @param newProcureModelUserRecordId
     * @return
     */
    public boolean modifyGoodsUser(Long oldProcureModelUserRecordId, Long newProcureModelUserRecordId) {
        LWhProcureModelUserRecord lWhProcureModelUserRecord = goodsBaseService.get(new LWhProcureModelUserRecord(newProcureModelUserRecordId));
        if (lWhProcureModelUserRecord == null) {
            return false;
        }
        Long dealTime = lWhProcureModelUserRecord.getDealTime();
        Long operatorId = lWhProcureModelUserRecord.getOperatorId();
        String operatorName = lWhProcureModelUserRecord.getOperatorName();
        // 调拨单id
        Long transBusinessId = lWhProcureModelUserRecord.getTransBusinessId();
 
        LWhFormTransfer whFormTransfer = goodsBaseService.get(new LWhFormTransfer(transBusinessId));
        Integer inWarehouseType = whFormTransfer.getInWarehouseType();
        Long inWarehouseId = whFormTransfer.getInWarehouseId();
        // 将所有物品设置为未分发
        List<Long> srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, null, null, null);
        lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, (short) 3);
        // 设置旧的LAST_RECORD= 0
        lGoodsUserRecordService.updSetNotLast(srappedGoodsIds);
        //插入新的
        LWhProcureModelUser modelUser = new LWhProcureModelUser();
        modelUser.setProcureModelUserRecordId(newProcureModelUserRecordId);
        List<LWhProcureModelUser> modelUserList = goodsBaseService.select(modelUser);
        if (CollectionUtils.isEmpty(modelUserList)) {
            return true;
        }
        ArrayList<LGoodsUserRecord> goodsUserRecords = new ArrayList<>();
        for (LWhProcureModelUser lWhProcureModelUser : modelUserList) {
            Long baseGoodsModelsId = lWhProcureModelUser.getBaseGoodsModelsId();
            Integer goodsNum = lWhProcureModelUser.getGoodsNum();
            //通过LockManage获得锁
            Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId);
            synchronized (warehouseModelLockObj) {
                List<Long> toUserGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, baseGoodsModelsId, (short) 1, goodsNum);
                if (CollectionUtils.isEmpty(toUserGoodsIds)) {
                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    throw new RuntimeException("操作失败!型号数量不足");
                }
                for (Long toUserGoodsId : toUserGoodsIds) {
                    LGoodsUserRecord tmp = new LGoodsUserRecord();
                    tmp.setId(NumberGenerator.getLongSequenceNumber());
                    tmp.setWhGoodsId(toUserGoodsId);
                    tmp.setRecordType(1);
                    tmp.setTransBusinessId(transBusinessId);
                    tmp.setNowUserName(lWhProcureModelUser.getNowUserName());
                    tmp.setNowUserPhone(lWhProcureModelUser.getNowUserPhone());
                    tmp.setOperatorId(operatorId);
                    tmp.setOperatorName(operatorName);
                    tmp.setDealTime(dealTime);
                    tmp.setLastRecord(1);
                    goodsUserRecords.add(tmp);
                }
                lWhGoodsService.modGoodsTransfering(toUserGoodsIds, null, null, null, (short) 2);
                lGoodsUserRecordService.insertBatch(goodsUserRecords);
            }
        }
        return true;
    }
 
}