Subversion Repositories SmartDukaan

Rev

Rev 33917 | Rev 33953 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 33917 Rev 33926
Line 1... Line 1...
1
package com.spice.profitmandi.service;
1
package com.spice.profitmandi.service;
2
 
2
 
3
import com.spice.profitmandi.common.model.ProfitMandiConstants;
3
import com.spice.profitmandi.common.model.ProfitMandiConstants;
-
 
4
import com.spice.profitmandi.dao.entity.inventory.RbmTargets;
4
import com.spice.profitmandi.dao.model.*;
5
import com.spice.profitmandi.dao.model.*;
-
 
6
import com.spice.profitmandi.dao.repository.catalog.RbmTargetsRepository;
5
import org.apache.logging.log4j.LogManager;
7
import org.apache.logging.log4j.LogManager;
6
import org.apache.logging.log4j.Logger;
8
import org.apache.logging.log4j.Logger;
7
import org.hibernate.Session;
9
import org.hibernate.Session;
8
import org.hibernate.SessionFactory;
10
import org.hibernate.SessionFactory;
9
import org.hibernate.query.NativeQuery;
11
import org.hibernate.query.NativeQuery;
10
import org.springframework.beans.factory.annotation.Autowired;
12
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.cache.annotation.Cacheable;
-
 
12
import org.springframework.stereotype.Component;
13
import org.springframework.stereotype.Component;
13
 
14
 
14
import javax.persistence.TypedQuery;
15
import javax.persistence.TypedQuery;
15
import java.time.LocalDate;
16
import java.time.LocalDate;
-
 
17
import java.time.LocalDateTime;
-
 
18
import java.time.LocalTime;
16
import java.util.ArrayList;
19
import java.util.ArrayList;
17
import java.util.List;
20
import java.util.List;
18
 
21
 
19
@Component
22
@Component
20
public class RbmTargetServiceImpl implements RbmTargetService {
23
public class RbmTargetServiceImpl implements RbmTargetService {
21
    private static final Logger LOGGER = LogManager.getLogger(RbmTargetServiceImpl.class);
24
    private static final Logger LOGGER = LogManager.getLogger(RbmTargetServiceImpl.class);
22
 
25
 
23
    @Autowired
26
    @Autowired
24
    SessionFactory sessionFactory;
27
    SessionFactory sessionFactory;
25
 
28
 
-
 
29
    @Autowired
-
 
30
    RbmTargetsRepository rbmTargetsRepository;
26
 
31
 
27
    @Override
32
    @Override
28
    public List<WarehouseRbmTargetModel> getWarehouseWiseRbmMonthlyTarget() {
33
    public List<WarehouseRbmTargetModel> getWarehouseWiseRbmMonthlyTarget() {
29
        Session session = sessionFactory.getCurrentSession();
34
        Session session = sessionFactory.getCurrentSession();
30
        final TypedQuery<WarehouseRbmTargetModel> typedQuerySimilar = session.createNamedQuery("RbmTarget.getWarehouseWiseMonthlyTarget", WarehouseRbmTargetModel.class);
35
        final TypedQuery<WarehouseRbmTargetModel> typedQuerySimilar = session.createNamedQuery("RbmTarget.getWarehouseWiseMonthlyTarget", WarehouseRbmTargetModel.class);
Line 53... Line 58...
53
        return typedQuerySimilar.getResultList();
58
        return typedQuerySimilar.getResultList();
54
 
59
 
55
    }
60
    }
56
 
61
 
57
    @Override
62
    @Override
58
    @Cacheable(value = "warehouseMobileStockByMovement", cacheManager = "oneDayCacheManager")
-
 
59
    public List<WarehouseMobileStockByMovementModel> getWarehouseMobileStockByMovement() {
63
    public List<WarehouseMobileStockByMovementModel> getWarehouseMobileStockByMovement() {
60
        Session session = sessionFactory.getCurrentSession();
64
        Session session = sessionFactory.getCurrentSession();
61
        final TypedQuery<WarehouseMobileStockByMovementModel> typedQuerySimilar = session.createNamedQuery("WarehouseStock.MovementWiseMobileStock", WarehouseMobileStockByMovementModel.class);
65
        final TypedQuery<WarehouseMobileStockByMovementModel> typedQuerySimilar = session.createNamedQuery("WarehouseStock.MovementWiseMobileStock", WarehouseMobileStockByMovementModel.class);
62
 
66
 
63
        return typedQuerySimilar.getResultList();
67
        return typedQuerySimilar.getResultList();
Line 101... Line 105...
101
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
105
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
102
 
106
 
103
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = this.getWarehouseWiseRbmMonthlyTarget();
107
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = this.getWarehouseWiseRbmMonthlyTarget();
104
 
108
 
105
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getTodayTargetByMovement(todayDate, todayDate.plusDays(1));
109
        List<TodayAchievedMovementModel> todayAchievedMovementModels = getTodayTargetByMovement(todayDate, todayDate.plusDays(1));
106
        // LOGGER.info("todayAchievedMovementModels {} ", todayAchievedMovementModels);
-
 
107
 
110
 
108
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
111
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
109
 
112
 
110
 
-
 
111
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
113
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
112
 
114
 
113
        List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
115
        List<RbmTargets> todayRbmTargetsList = rbmTargetsRepository.selectTargetsByDates(todayDate.atStartOfDay(), todayDate.atTime(LocalTime.MAX));
114
        // LOGGER.info("warehouseMobileStockByMovementModels {}",warehouseMobileStockByMovementModels);
-
 
115
 
116
 
-
 
117
        LOGGER.info("todayRbmTargetsList {}", todayRbmTargetsList);
116
 
118
 
117
        List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
119
        List<RbmArrViewModel> rbmArrViewModels = new ArrayList<>();
118
 
120
 
119
        for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
121
        for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
120
            // LOGGER.info("rbmTarget {}",rbmTarget);
-
 
121
 
122
 
122
            float monthlyTarget = rbmTarget.getMonthlyTarget();
123
            float monthlyTarget = rbmTarget.getMonthlyTarget();
123
            float achievedSoFar = (float) mtdAchievedTargetModels.stream()
124
            float achievedSoFar = (float) mtdAchievedTargetModels.stream()
124
                    .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
125
                    .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
125
                    .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
126
                    .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
126
                    .sum();
127
                    .sum();
127
 
128
 
128
 
-
 
129
            float remainingTarget = monthlyTarget - achievedSoFar;
129
            float remainingTarget = monthlyTarget - achievedSoFar;
130
            float todayTarget = remainingWorkingDaysCount > 0 ? remainingTarget / remainingWorkingDaysCount : 0;
130
            float todayTarget = remainingWorkingDaysCount > 0 ? remainingTarget / remainingWorkingDaysCount : 0;
131
 
131
 
132
            // Get the warehouse stock data
-
 
133
            WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseMobileStockByMovementModels.stream()
-
 
134
                    .filter(x -> x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().orElse(null);
-
 
135
 
-
 
136
 
-
 
137
            if (warehouseMobileStockByMovementModel != null) {
-
 
138
 
-
 
139
                // Total stock value for this warehouse
-
 
140
                float totalStockValue = warehouseMobileStockByMovementModel.getTotalAvailabilityPrice();
-
 
141
 
-
 
142
                // Calculate target allocation based on stock value proportion
-
 
143
                float hidTarget = (warehouseMobileStockByMovementModel.getTotalHidCatalogPrice() / totalStockValue) * todayTarget;
-
 
144
                float fastMovingTarget = (warehouseMobileStockByMovementModel.getTotalFastMovingCatalogPrice() / totalStockValue) * todayTarget;
-
 
145
                float slowMovingTarget = (warehouseMobileStockByMovementModel.getTotalSlowMovingCatalogPrice() / totalStockValue) * todayTarget;
-
 
146
                float eolTarget = (warehouseMobileStockByMovementModel.getTotalEolCatalogPrice() / totalStockValue) * todayTarget;
-
 
147
                float otherTarget = (warehouseMobileStockByMovementModel.getTotalOtherCategoryCatalogPrice() / totalStockValue) * todayTarget;
-
 
148
 
-
 
149
 
-
 
150
//                set all realated value in view model for dashboard
-
 
151
 
-
 
152
                String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
132
                String warehouseName = ProfitMandiConstants.WAREHOUSE_MAP.getOrDefault(rbmTarget.getWarehouseId(), "Unknown");
153
 
133
 
154
                TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMovementModels.stream().filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().get();
134
                TodayAchievedMovementModel todayAchievedMovementModel = todayAchievedMovementModels.stream().filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().get();
-
 
135
 
-
 
136
            RbmTargets todayRbmTargets = todayRbmTargetsList.stream().filter(x -> x.getRbmAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().get();
155
                //  LOGGER.info("todayAchievedMovementModel {}",todayAchievedMovementModel);
137
            LOGGER.info("todayRbmTargets {}", todayRbmTargets);
-
 
138
 
156
                RbmArrViewModel viewModel = new RbmArrViewModel();
139
                RbmArrViewModel viewModel = new RbmArrViewModel();
157
 
140
 
158
                viewModel.setAuthId(rbmTarget.getAuthId());
141
                viewModel.setAuthId(rbmTarget.getAuthId());
159
                viewModel.setRbmName(rbmTarget.getRbmName());
142
                viewModel.setRbmName(rbmTarget.getRbmName());
160
                viewModel.setWarehouseName(warehouseName);
143
                viewModel.setWarehouseName(warehouseName);
161
                viewModel.setTodayTarget(Math.round(todayTarget));
144
                viewModel.setTodayTarget(Math.round(todayTarget));
162
                viewModel.setMonthlyTarget(Math.round(monthlyTarget));
145
                viewModel.setMonthlyTarget(Math.round(monthlyTarget));
163
                viewModel.setMtdAchievedTarget(Math.round(achievedSoFar));
146
                viewModel.setMtdAchievedTarget(Math.round(achievedSoFar));
-
 
147
 
164
                viewModel.setTodayHidTarget(Math.round((hidTarget)));
148
            viewModel.setTodayHidTarget(Math.round((todayRbmTargets.getHidTarget())));
165
                viewModel.setTodayFastMovingTarget(Math.round(fastMovingTarget));
149
            viewModel.setTodayFastMovingTarget(Math.round(todayRbmTargets.getFastMovingTarget()));
166
                viewModel.setTodaySlowMovingTarget(Math.round(slowMovingTarget));
150
            viewModel.setTodaySlowMovingTarget(Math.round(todayRbmTargets.getSlowMovingTarget()));
167
                viewModel.setTodayEolTarget(Math.round(eolTarget));
151
            viewModel.setTodayEolTarget(Math.round(todayRbmTargets.getEolTarget()));
168
                viewModel.setTodayOtherMovingTarget(Math.round(otherTarget));
152
            viewModel.setTodayOtherMovingTarget(Math.round(todayRbmTargets.getOtherTarget()));
-
 
153
 
169
                viewModel.setTodayAchievedHidTarget(Math.round(todayAchievedMovementModel.getHidBilled()));
154
                viewModel.setTodayAchievedHidTarget(Math.round(todayAchievedMovementModel.getHidBilled()));
170
                viewModel.setTodayAchievedFastMovingTarget(Math.round(todayAchievedMovementModel.getFastMovingBilled()));
155
                viewModel.setTodayAchievedFastMovingTarget(Math.round(todayAchievedMovementModel.getFastMovingBilled()));
171
                viewModel.setTodayAchievedSlowMovingTarget(Math.round(todayAchievedMovementModel.getSlowMovingBilled()));
156
                viewModel.setTodayAchievedSlowMovingTarget(Math.round(todayAchievedMovementModel.getSlowMovingBilled()));
172
                viewModel.setTodayAchievedEolTarget(Math.round(todayAchievedMovementModel.getEolBilled()));
157
                viewModel.setTodayAchievedEolTarget(Math.round(todayAchievedMovementModel.getEolBilled()));
173
                viewModel.setTodayAchievedOtherMovingTarget(Math.round(todayAchievedMovementModel.getOtherBilled()));
158
                viewModel.setTodayAchievedOtherMovingTarget(Math.round(todayAchievedMovementModel.getOtherBilled()));
174
                viewModel.setTotalAchievedTarget(Math.round(todayAchievedMovementModel.getHidBilled() + todayAchievedMovementModel.getFastMovingBilled() + todayAchievedMovementModel.getSlowMovingBilled() + todayAchievedMovementModel.getEolBilled() + todayAchievedMovementModel.getOtherBilled()));
159
                viewModel.setTotalAchievedTarget(Math.round(todayAchievedMovementModel.getHidBilled() + todayAchievedMovementModel.getFastMovingBilled() + todayAchievedMovementModel.getSlowMovingBilled() + todayAchievedMovementModel.getEolBilled() + todayAchievedMovementModel.getOtherBilled()));
175
 
160
 
176
                rbmArrViewModels.add(viewModel);
161
                rbmArrViewModels.add(viewModel);
177
 
162
 
178
            }
163
 
179
        }
164
        }
180
 
165
 
181
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
166
        LOGGER.info("rbmArrViewModels {}", rbmArrViewModels);
182
        return rbmArrViewModels;
167
        return rbmArrViewModels;
183
    }
168
    }
184
 
169
 
-
 
170
    @Override
-
 
171
    public void setMovementWiseRbmTargets() {
-
 
172
        LocalDate todayDate = LocalDate.now();
-
 
173
 
-
 
174
        LocalDate startDateOfMonthDay1 = LocalDate.now().withDayOfMonth(1);
-
 
175
 
-
 
176
        List<WarehouseRbmTargetModel> warehouseRbmTargetModels = this.getWarehouseWiseRbmMonthlyTarget();
-
 
177
 
-
 
178
        List<MTDAchievedTargetModel> mtdAchievedTargetModels = getDateWiseAchievedTargetOfRbm(startDateOfMonthDay1, todayDate);
-
 
179
 
-
 
180
 
-
 
181
        int remainingWorkingDaysCount = getWorkingDaysCount(todayDate);
-
 
182
 
-
 
183
        List<WarehouseMobileStockByMovementModel> warehouseMobileStockByMovementModels = getWarehouseMobileStockByMovement();
-
 
184
 
-
 
185
        for (WarehouseRbmTargetModel rbmTarget : warehouseRbmTargetModels) {
-
 
186
 
-
 
187
            float monthlyTarget = rbmTarget.getMonthlyTarget();
-
 
188
            float achievedSoFar = (float) mtdAchievedTargetModels.stream()
-
 
189
                    .filter(x -> x.getAuthId() == rbmTarget.getAuthId() && x.getWarehouseId() == rbmTarget.getWarehouseId())
-
 
190
                    .mapToDouble(MTDAchievedTargetModel::getAcheivedMonthlyTarget)
-
 
191
                    .sum();
-
 
192
 
-
 
193
 
-
 
194
            float remainingTarget = monthlyTarget - achievedSoFar;
-
 
195
            float todayTarget = remainingWorkingDaysCount > 0 ? remainingTarget / remainingWorkingDaysCount : 0;
-
 
196
 
-
 
197
            // Get the warehouse stock data
-
 
198
            WarehouseMobileStockByMovementModel warehouseMobileStockByMovementModel = warehouseMobileStockByMovementModels.stream()
-
 
199
                    .filter(x -> x.getWarehouseId() == rbmTarget.getWarehouseId()).findFirst().orElse(null);
-
 
200
 
-
 
201
 
-
 
202
            if (warehouseMobileStockByMovementModel != null) {
-
 
203
 
-
 
204
                // Total stock value for this warehouse
-
 
205
                float totalStockValue = warehouseMobileStockByMovementModel.getTotalAvailabilityPrice();
-
 
206
 
-
 
207
                // Calculate target allocation based on stock value proportion
-
 
208
                float hidTarget = (warehouseMobileStockByMovementModel.getTotalHidCatalogPrice() / totalStockValue) * todayTarget;
-
 
209
                float fastMovingTarget = (warehouseMobileStockByMovementModel.getTotalFastMovingCatalogPrice() / totalStockValue) * todayTarget;
-
 
210
                float slowMovingTarget = (warehouseMobileStockByMovementModel.getTotalSlowMovingCatalogPrice() / totalStockValue) * todayTarget;
-
 
211
                float eolTarget = (warehouseMobileStockByMovementModel.getTotalEolCatalogPrice() / totalStockValue) * todayTarget;
-
 
212
                float otherTarget = (warehouseMobileStockByMovementModel.getTotalOtherCategoryCatalogPrice() / totalStockValue) * todayTarget;
-
 
213
 
-
 
214
                RbmTargets rbmTargets = new RbmTargets();
-
 
215
                rbmTargets.setWarehouseId(rbmTarget.getWarehouseId());
-
 
216
                rbmTargets.setRbmAuthId(rbmTarget.getAuthId());
-
 
217
                rbmTargets.setRbmName(rbmTarget.getRbmName());
-
 
218
                rbmTargets.setEolTarget(eolTarget);
-
 
219
                rbmTargets.setHidTarget(hidTarget);
-
 
220
                rbmTargets.setFastMovingTarget(fastMovingTarget);
-
 
221
                rbmTargets.setSlowMovingTarget(slowMovingTarget);
-
 
222
                rbmTargets.setOtherTarget(otherTarget);
-
 
223
                rbmTargets.setCreateTimestamp(LocalDateTime.now());
-
 
224
 
-
 
225
                rbmTargetsRepository.persist(rbmTargets);
-
 
226
 
-
 
227
            }
-
 
228
        }
-
 
229
 
-
 
230
    }
-
 
231
 
185
 
232
 
186
}
233
}