|
@@ -17,6 +17,7 @@ import com.fjhx.stock.mapper.StockBackMapper;
|
|
|
import com.fjhx.stock.service.StockBackDetailsService;
|
|
|
import com.fjhx.stock.service.StockBackService;
|
|
|
import com.fjhx.utils.Assert;
|
|
|
+import com.fjhx.utils.BigDecimalUtil;
|
|
|
import com.fjhx.utils.WrapperUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -215,24 +216,159 @@ public class StockBackServiceImpl extends ServiceImpl<StockBackMapper, StockBack
|
|
|
@Override
|
|
|
public Map<Integer, List<Map<String, Object>>> userStatistics(Map<String, String> condition) {
|
|
|
|
|
|
- QueryWrapper<Object> wrapper = createWrapper(condition);
|
|
|
+ String beginTimeStr = condition.get("beginTime");
|
|
|
+ Assert.notEmpty(beginTimeStr, "开始时间不能为空");
|
|
|
+ Date beginTime = DateUtil.beginOfDay(DateUtil.parse(beginTimeStr));
|
|
|
+
|
|
|
+ String endTimeStr = condition.get("endTime");
|
|
|
+ Assert.notEmpty(endTimeStr, "结束时间不能为空");
|
|
|
+ Date endTime = DateUtil.endOfDay(DateUtil.parse(endTimeStr));
|
|
|
+
|
|
|
+ QueryWrapper<Object> wrapper = Wrappers.query()
|
|
|
+ .between("swd.CreatedTime", beginTime, endTime)
|
|
|
+ .in("m.TechnologyType", 0, 1, 2);
|
|
|
|
|
|
List<Map<String, Object>> result = baseMapper.userStatistics(wrapper);
|
|
|
|
|
|
+ for (Map<String, Object> map : result) {
|
|
|
+
|
|
|
+ String jobNo = map.get("jobNo").toString();
|
|
|
+ String userId = map.get("userId").toString();
|
|
|
+ String technologyType = map.get("technologyType").toString();
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal scheduleArea = BigDecimalUtil.keepDecimals(
|
|
|
+ baseMapper.selectSchedule(null, technologyType, jobNo, beginTime, endTime));
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal pickingArea = baseMapper.selectPicking(technologyType, userId, beginTime, endTime).getPickingArea();
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal backArea = baseMapper.selectBack(null, technologyType, userId, beginTime, endTime).getBackArea();
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal correctArea = BigDecimalUtil.keepDecimals(
|
|
|
+ baseMapper.selectCorrect(null, technologyType, userId, beginTime, endTime));
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ BigDecimal value = BigDecimalUtil.init(scheduleArea).multiply(100).
|
|
|
+ divideTry(pickingArea.subtract(backArea).subtract(correctArea), 2).getValue();
|
|
|
+ map.put("useRate", value);
|
|
|
+ }
|
|
|
+
|
|
|
return result.stream().collect(Collectors.groupingBy(item -> (Integer) item.get("technologyType")));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public StatisticsResult statisticsDetails(Map<String, String> condition) {
|
|
|
+
|
|
|
+ StatisticsResult statisticsResult = new StatisticsResult();
|
|
|
|
|
|
- private QueryWrapper<Object> createWrapper(Map<String, String> condition) {
|
|
|
- String beginTime = condition.get("beginTime");
|
|
|
- Assert.notEmpty(beginTime, "开始时间不能为空");
|
|
|
+ String technologyType = condition.get("technologyType");
|
|
|
+ String jobNo = condition.get("jobNo");
|
|
|
+ String userId = condition.get("userId");
|
|
|
+
|
|
|
+ String beginTimeStr = condition.get("beginTime");
|
|
|
+ Assert.notEmpty(beginTimeStr, "开始时间不能为空");
|
|
|
+ Date beginTime = DateUtil.beginOfDay(DateUtil.parse(beginTimeStr));
|
|
|
|
|
|
- String endTime = condition.get("endTime");
|
|
|
- Assert.notEmpty(endTime, "结束时间不能为空");
|
|
|
+ String endTimeStr = condition.get("endTime");
|
|
|
+ Assert.notEmpty(endTimeStr, "结束时间不能为空");
|
|
|
+ Date endTime = DateUtil.endOfDay(DateUtil.parse(endTimeStr));
|
|
|
|
|
|
- return Wrappers.query().between("ss.create_time",
|
|
|
- DateUtil.beginOfDay(DateUtil.parse(beginTime)),
|
|
|
- DateUtil.endOfDay(DateUtil.parse(endTime)));
|
|
|
+
|
|
|
+ Thread selectScheduleThread = new Thread(() -> {
|
|
|
+ Double scheduleArea = baseMapper.selectSchedule(null, technologyType, jobNo, beginTime, endTime);
|
|
|
+ statisticsResult.setScheduleArea(BigDecimalUtil.keepDecimals(scheduleArea));
|
|
|
+ });
|
|
|
+ selectScheduleThread.start();
|
|
|
+
|
|
|
+
|
|
|
+ Thread selectPickingThread = new Thread(() -> {
|
|
|
+ StatisticsResult itemStatisticsResult = baseMapper.selectPicking(technologyType, userId, beginTime, endTime);
|
|
|
+ statisticsResult.setPickingArea(itemStatisticsResult.getPickingArea());
|
|
|
+ statisticsResult.setPickingMeters(itemStatisticsResult.getPickingMeters());
|
|
|
+ statisticsResult.setPickingMoney(itemStatisticsResult.getPickingMoney());
|
|
|
+ statisticsResult.setPickingNum(itemStatisticsResult.getPickingNum());
|
|
|
+ });
|
|
|
+ selectPickingThread.start();
|
|
|
+
|
|
|
+
|
|
|
+ Thread selectBackThread = new Thread(() -> {
|
|
|
+ StatisticsResult itemStatisticsResult = baseMapper.selectBack(null, technologyType, userId, beginTime, endTime);
|
|
|
+ statisticsResult.setBackArea(itemStatisticsResult.getBackArea());
|
|
|
+ statisticsResult.setBackMeters(itemStatisticsResult.getBackMeters());
|
|
|
+ statisticsResult.setBackMoney(itemStatisticsResult.getBackMoney());
|
|
|
+ statisticsResult.setBackNum(itemStatisticsResult.getBackNum());
|
|
|
+ });
|
|
|
+ selectBackThread.start();
|
|
|
+
|
|
|
+
|
|
|
+ Thread selectCorrectThread = new Thread(() -> {
|
|
|
+ Double correctArea = baseMapper.selectCorrect(null, technologyType, userId, beginTime, endTime);
|
|
|
+ statisticsResult.setCorrectArea(BigDecimalUtil.keepDecimals(correctArea));
|
|
|
+ });
|
|
|
+ selectCorrectThread.start();
|
|
|
+
|
|
|
+ try {
|
|
|
+ selectScheduleThread.join();
|
|
|
+ selectPickingThread.join();
|
|
|
+ selectBackThread.join();
|
|
|
+ selectCorrectThread.join();
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return statisticsResult;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Page<StatisticsResult> statisticsPage(Map<String, String> condition) {
|
|
|
+
|
|
|
+ String technologyType = condition.get("technologyType");
|
|
|
+ String jobNo = condition.get("jobNo");
|
|
|
+ String userId = condition.get("userId");
|
|
|
+
|
|
|
+ String beginTimeStr = condition.get("beginTime");
|
|
|
+ Assert.notEmpty(beginTimeStr, "开始时间不能为空");
|
|
|
+ Date beginTime = DateUtil.beginOfDay(DateUtil.parse(beginTimeStr));
|
|
|
+
|
|
|
+ String endTimeStr = condition.get("endTime");
|
|
|
+ Assert.notEmpty(endTimeStr, "结束时间不能为空");
|
|
|
+ Date endTime = DateUtil.endOfDay(DateUtil.parse(endTimeStr));
|
|
|
+
|
|
|
+ Page<StatisticsResult> result = baseMapper.selectPickingPage(createPage(condition), technologyType, userId, beginTime, endTime);
|
|
|
+
|
|
|
+ List<StatisticsResult> records = result.getRecords();
|
|
|
+
|
|
|
+ if (records.size() == 0) {
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (StatisticsResult record : records) {
|
|
|
+
|
|
|
+ String materialId = record.getMaterialId();
|
|
|
+ String materialCode = record.getMaterialCode();
|
|
|
+ String itemJobNo = record.getJobNo();
|
|
|
+ String itemUserId = record.getUserId();
|
|
|
+
|
|
|
+
|
|
|
+ Double scheduleArea = baseMapper.selectSchedule(materialCode, technologyType, itemJobNo, beginTime, endTime);
|
|
|
+ record.setScheduleArea(BigDecimalUtil.keepDecimals(scheduleArea));
|
|
|
+
|
|
|
+
|
|
|
+ StatisticsResult itemStatisticsResult = baseMapper.selectBack(materialCode, technologyType, itemUserId, beginTime, endTime);
|
|
|
+ record.setBackArea(itemStatisticsResult.getBackArea());
|
|
|
+
|
|
|
+
|
|
|
+ Double correctArea = baseMapper.selectCorrect(materialId, technologyType, itemUserId, beginTime, endTime);
|
|
|
+ record.setCorrectArea(BigDecimalUtil.keepDecimals(correctArea));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|