mrzhssss
2022-05-06 3ca19bf8f8356440d4bede84cde8450327e189cb
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package zy.cloud.wms.manager.controller;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import zy.cloud.wms.common.entity.Parameter;
import zy.cloud.wms.common.model.BillDto;
import zy.cloud.wms.common.service.erp.ErpService;
import zy.cloud.wms.common.web.BaseController;
import zy.cloud.wms.manager.entity.LocSum;
import zy.cloud.wms.manager.entity.Pakin;
import zy.cloud.wms.manager.entity.WrkLocSync;
import zy.cloud.wms.manager.service.LocSyncService;
import zy.cloud.wms.manager.service.WrkLocSyncService;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
import static jdk.nashorn.api.scripting.ScriptUtils.convert;
 
@RestController
@Slf4j
public class LocSyncController extends BaseController {
    @Autowired
    private LocSyncService locSyncService;
    @Autowired
    private WrkLocSyncService wrkLocSyncService;
    @Autowired
    private ErpService erpService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
 
    @RequestMapping(value = "/locSync/queryLocSum")
    @ManagerAuth(memo = "获取总库存清单")
    public R queryLocSum() {
        return R.ok(locSyncService.queryLocSum());
    }
 
    @RequestMapping(value = "/locSync/syncLocWrkCount")
    @ManagerAuth(memo = "获取库存同步上传清单数量")
    public R getSyncLocWrkCount() {
        return R.ok(wrkLocSyncService.getSyncLocWrkCount());
    }
 
 
    @RequestMapping(value = "/locSync/insertWrklocSync")
    @ManagerAuth(memo = "同步上传清单数据插入")
    @Transactional
    public R insertWrklocSync(@RequestBody JSONObject param) {
        Date now = new Date();
        Long userId = getUserId();
        List<WrkLocSync> list = JSONObject.parseArray(param.getJSONArray("list").toJSONString(), WrkLocSync.class);
        for (WrkLocSync wrkLocSync : list) {
            WrkLocSync sync = new WrkLocSync();
            sync.setMatnr(wrkLocSync.getMatnr());
            sync.setQty(wrkLocSync.getQty());
            sync.setState("N");
            sync.setCreateTime(now);
            sync.setCreateBy(userId);
            sync.setUpdateBy(userId);
            sync.setUpdateTime(now);
            if (!wrkLocSyncService.insert(sync)) {
                throw new CoolException("同步失败");
            }
 
        }
        return R.ok(list.size());
    }
 
 
    @RequestMapping(value = "/locSync/updateWrklocSync")
    @ManagerAuth(memo = "清空同步上传清单数据,并插入")
    public R updateWrklocSync(@RequestBody JSONObject param) {
        // 清空同步上传清单数据
        if (!wrkLocSyncService.clearWrkLocSync()) {
            throw new CoolException("同步上传清单数据清空失败,请联系管理员");
        }
        ;
        List<WrkLocSync> list = JSONObject.parseArray(param.getJSONArray("list").toJSONString(), WrkLocSync.class);
        // 插入创建人员和创建时间
        if (list.size() > 0) {
            for (WrkLocSync elist : list) {
                elist.setCreateBy(getUserId());
                elist.setCreateTime(new Date());
            }
        }
        Integer result = 0;
        result = wrkLocSyncService.insertWrkLocSync(list);
        return R.ok(result);
    }
 
    /* 同步上传erp[uploadBill] 单据上传 */
    @Scheduled(cron = "0/2 * * * * ? ")
    public void execute() {
        if (!Cools.isEmpty(Parameter.get().getSyncSwitch()) && Parameter.get().getSyncSwitch().equals("Y")) {
            List<String> orderList = new ArrayList<>();
            orderList.add("state");
            orderList.add("create_time");
            List<WrkLocSync> syncList = wrkLocSyncService.selectList(new EntityWrapper<WrkLocSync>()
                    .eq("state", "N").orderDesc(orderList));
            // 同步上传清单处理,取第一条
            if (!Cools.isEmpty(syncList)) {
                WrkLocSync executeData = syncList.get(0);
                // 订单号
                String docNum = "PU-" + String.valueOf(snowflakeIdWorker.nextId()).substring(0, 15);
                // 订单类型 34采购单
                Integer docId = 34;
                List<BillDto> dtos = new ArrayList<BillDto>();
                BillDto res = new BillDto();
                res.setMatnr(executeData.getMatnr());
                res.setQty(executeData.getQty());
                dtos.add(res);
                if (erpService.uploadBill(dtos, docId, docNum).getSuccess()) {
                    // 成功后删除任务
                    if (!wrkLocSyncService.delete(new EntityWrapper<WrkLocSync>().eq("matnr", executeData.getMatnr()))) {
                        log.info("库存同步删除任务失败,任务matnr=" + executeData.getMatnr() + "时间=" + new Date());
                    }
                } else {
                    // 失败后将任务状态state更新为N
                    executeData.setState("X");
                    executeData.setUpdateBy(9527L);
                    executeData.setCreateTime(new Date());
                    if(!wrkLocSyncService.update(executeData, new EntityWrapper<WrkLocSync>().eq("matnr", executeData.getMatnr()))) {
                        log.info("库存同步更新任务失败,任务matnr=" + executeData.getMatnr() + "时间=" + new Date());
                    }
                }
            }
        }
 
    }
 
    @RequestMapping(value = "/locsync/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        List<LocSum> locSums = locSyncService.queryLocSum();
        return R.ok(exportSupport(locSums, fields));
    }
}