|
@@ -4,10 +4,12 @@ import com.kmall.admin.dao.GoodsDao;
|
|
import com.kmall.admin.dao.MerchDao;
|
|
import com.kmall.admin.dao.MerchDao;
|
|
import com.kmall.admin.dao.ProductStoreRelaDao;
|
|
import com.kmall.admin.dao.ProductStoreRelaDao;
|
|
import com.kmall.admin.dao.StoreDao;
|
|
import com.kmall.admin.dao.StoreDao;
|
|
|
|
+import com.kmall.admin.dao.alarm.Mall2ReminderRulesConfigDao;
|
|
import com.kmall.admin.entity.GoodsEntity;
|
|
import com.kmall.admin.entity.GoodsEntity;
|
|
import com.kmall.admin.entity.MerchEntity;
|
|
import com.kmall.admin.entity.MerchEntity;
|
|
import com.kmall.admin.entity.ProductStoreRelaEntity;
|
|
import com.kmall.admin.entity.ProductStoreRelaEntity;
|
|
import com.kmall.admin.entity.StoreEntity;
|
|
import com.kmall.admin.entity.StoreEntity;
|
|
|
|
+import com.kmall.admin.entity.alarm.Mall2ReminderRulesConfigEntity;
|
|
import com.kmall.admin.entity.alarm.Mall2ShippingReminderAlarmEntity;
|
|
import com.kmall.admin.entity.alarm.Mall2ShippingReminderAlarmEntity;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -31,6 +33,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|
public class Mall2OrderingEarlyWarningRemindsServiceImpl implements Mall2OrderingEarlyWarningRemindsService {
|
|
public class Mall2OrderingEarlyWarningRemindsServiceImpl implements Mall2OrderingEarlyWarningRemindsService {
|
|
@Autowired
|
|
@Autowired
|
|
private Mall2OrderingEarlyWarningRemindsDao mall2OrderingEarlyWarningRemindsDao;
|
|
private Mall2OrderingEarlyWarningRemindsDao mall2OrderingEarlyWarningRemindsDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private Mall2ReminderRulesConfigDao mall2ReminderRulesConfigDao;
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private MerchDao merchDao; // 商户
|
|
private MerchDao merchDao; // 商户
|
|
@@ -85,6 +89,14 @@ public class Mall2OrderingEarlyWarningRemindsServiceImpl implements Mall2Orderin
|
|
|
|
|
|
// 遍历商户集合,查询商户下所有的门店
|
|
// 遍历商户集合,查询商户下所有的门店
|
|
for(MerchEntity merchEntity : merchEntities) {
|
|
for(MerchEntity merchEntity : merchEntities) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // 查询商户的出货预警规则,若无规则,则不继续进行
|
|
|
|
+ Mall2ReminderRulesConfigEntity rulesConfigEntity = mall2ReminderRulesConfigDao.queryByMerchSn(merchEntity.getMerchSn(),"1");
|
|
|
|
+ if(rulesConfigEntity == null){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
String merchSn = merchEntity.getMerchSn();
|
|
String merchSn = merchEntity.getMerchSn();
|
|
Map<String,Object> goodsParam = new HashMap<>();
|
|
Map<String,Object> goodsParam = new HashMap<>();
|
|
goodsParam.put("merchSn", merchSn);
|
|
goodsParam.put("merchSn", merchSn);
|
|
@@ -112,71 +124,63 @@ public class Mall2OrderingEarlyWarningRemindsServiceImpl implements Mall2Orderin
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
storeRelaParam = null;
|
|
storeRelaParam = null;
|
|
-
|
|
|
|
// 获取商品库存
|
|
// 获取商品库存
|
|
Integer goodsNumber = goodsEntity.getGoodsNumber();
|
|
Integer goodsNumber = goodsEntity.getGoodsNumber();
|
|
-
|
|
|
|
// 总库存
|
|
// 总库存
|
|
Integer totalNum = goodsNumber ;
|
|
Integer totalNum = goodsNumber ;
|
|
// 总平均销售量
|
|
// 总平均销售量
|
|
Integer totalSellVolumn = 0;
|
|
Integer totalSellVolumn = 0;
|
|
|
|
+ // 提醒类型 00.固定值 10.周期计算
|
|
|
|
+ String reminderType = rulesConfigEntity.getReminderType();
|
|
|
|
+ // 提醒值
|
|
|
|
+ Integer reminderValue = rulesConfigEntity.getReminderValue();
|
|
|
|
|
|
// 遍历商品集合,计算商品的平均库存
|
|
// 遍历商品集合,计算商品的平均库存
|
|
for(ProductStoreRelaEntity productStoreRelaEntity : productStoreRelaEntities){
|
|
for(ProductStoreRelaEntity productStoreRelaEntity : productStoreRelaEntities){
|
|
- // 商品id
|
|
|
|
- Long goodsId = productStoreRelaEntity.getGoodsId();
|
|
|
|
- // 该商品的销售量
|
|
|
|
- Integer sellVolume = productStoreRelaEntity.getSellVolume();
|
|
|
|
- // 获取当前时间
|
|
|
|
- Date date = new Date();
|
|
|
|
- // 获取该商品的创建时间
|
|
|
|
- Date createTime = productStoreRelaEntity.getCreateTime();
|
|
|
|
- // 相差的天数
|
|
|
|
- int days = (int) ((date.getTime() - createTime.getTime()) / (1000*3600*24));
|
|
|
|
- days = days == 0? 1 : days;
|
|
|
|
- // 一周平均销售量
|
|
|
|
- Integer avaerageSellVolume = new BigDecimal(sellVolume).divide(new BigDecimal(days),2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(7))
|
|
|
|
- .setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
|
|
|
|
- totalSellVolumn += avaerageSellVolume;
|
|
|
|
- // 该商品的库存
|
|
|
|
- Integer stockNum = productStoreRelaEntity.getStockNum();
|
|
|
|
- totalNum += stockNum;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- if(totalNum <= totalSellVolumn){
|
|
|
|
- Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
- if(orderingEarlyWarningRemindsEntity == null){
|
|
|
|
- orderingEarlyWarningRemindsEntity = new Mall2OrderingEarlyWarningRemindsEntity();
|
|
|
|
- orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(totalSellVolumn));
|
|
|
|
- orderingEarlyWarningRemindsEntity.setSku(goodsEntity.getGoodsSn());
|
|
|
|
- orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
- orderingEarlyWarningRemindsEntity.setGoodsId(goodsEntity.getId().intValue());
|
|
|
|
- orderingEarlyWarningRemindsEntity.setGoodsName(goodsEntity.getName());
|
|
|
|
- orderingEarlyWarningRemindsEntity.setAlarmType("00");
|
|
|
|
- orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
- orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
- orderingEarlyWarningRemindsEntity.setCreateTime(new Date());
|
|
|
|
-
|
|
|
|
- insertRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
- }else{
|
|
|
|
- orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
- orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(totalSellVolumn));
|
|
|
|
- orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
- orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
- orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
-
|
|
|
|
- updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
- }
|
|
|
|
|
|
+ if("00".equalsIgnoreCase(reminderType)){
|
|
|
|
+ // 商品id
|
|
|
|
+ Long goodsId = productStoreRelaEntity.getGoodsId();
|
|
|
|
+ // 该商品的库存
|
|
|
|
+ Integer stockNum = productStoreRelaEntity.getStockNum();
|
|
|
|
+ totalNum += stockNum;
|
|
|
|
|
|
- }else{
|
|
|
|
- Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
- if( orderingEarlyWarningRemindsEntity != null){
|
|
|
|
- orderingEarlyWarningRemindsEntity.setIsWarning(0);
|
|
|
|
- orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
- updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
|
|
+ }else if("10".equalsIgnoreCase(reminderType)){
|
|
|
|
+ // 商品id
|
|
|
|
+ Long goodsId = productStoreRelaEntity.getGoodsId();
|
|
|
|
+ // 该商品的销售量
|
|
|
|
+ Integer sellVolume = productStoreRelaEntity.getSellVolume();
|
|
|
|
+ // 获取当前时间
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ // 获取该商品的创建时间
|
|
|
|
+ Date createTime = productStoreRelaEntity.getCreateTime();
|
|
|
|
+ // 相差的天数
|
|
|
|
+ int days = (int) ((date.getTime() - createTime.getTime()) / (1000*3600*24));
|
|
|
|
+ days = days == 0? 1 : days;
|
|
|
|
+ // 一周平均销售量
|
|
|
|
+ Integer avaerageSellVolume = new BigDecimal(sellVolume).divide(new BigDecimal(days),2, BigDecimal.ROUND_HALF_UP)
|
|
|
|
+ .setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
|
|
|
|
+ if(days >= reminderValue){
|
|
|
|
+ avaerageSellVolume = avaerageSellVolume * reminderValue;
|
|
|
|
+ }
|
|
|
|
+ totalSellVolumn += avaerageSellVolume;
|
|
|
|
+ // 该商品的库存
|
|
|
|
+ Integer stockNum = productStoreRelaEntity.getStockNum();
|
|
|
|
+ totalNum += stockNum;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if("00".equalsIgnoreCase(reminderType)){
|
|
|
|
+ fixedValue(insertRemiderList, updateRemiderList, goodsEntity, totalNum, reminderValue);
|
|
|
|
+
|
|
|
|
+ }else if("10".equalsIgnoreCase(reminderType)){
|
|
|
|
+ averageCalculation(insertRemiderList, updateRemiderList, goodsEntity, totalNum, totalSellVolumn);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
if(insertRemiderList != null && insertRemiderList.size() > 0) {
|
|
if(insertRemiderList != null && insertRemiderList.size() > 0) {
|
|
mall2OrderingEarlyWarningRemindsDao.insertBatch(insertRemiderList);
|
|
mall2OrderingEarlyWarningRemindsDao.insertBatch(insertRemiderList);
|
|
@@ -189,4 +193,75 @@ public class Mall2OrderingEarlyWarningRemindsServiceImpl implements Mall2Orderin
|
|
updateRemiderList = null;
|
|
updateRemiderList = null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private void averageCalculation(List<Mall2OrderingEarlyWarningRemindsEntity> insertRemiderList, List<Mall2OrderingEarlyWarningRemindsEntity> updateRemiderList, GoodsEntity goodsEntity, Integer totalNum, Integer totalSellVolumn) {
|
|
|
|
+ if(totalNum <= totalSellVolumn){
|
|
|
|
+ Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
+ if(orderingEarlyWarningRemindsEntity == null){
|
|
|
|
+ orderingEarlyWarningRemindsEntity = new Mall2OrderingEarlyWarningRemindsEntity();
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(totalSellVolumn));
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setSku(goodsEntity.getGoodsSn());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setGoodsId(goodsEntity.getId().intValue());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setGoodsName(goodsEntity.getName());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmType("00");
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setCreateTime(new Date());
|
|
|
|
+
|
|
|
|
+ insertRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }else{
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(totalSellVolumn));
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
+
|
|
|
|
+ updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }else{
|
|
|
|
+ Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
+ if( orderingEarlyWarningRemindsEntity != null){
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(0);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
+ updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void fixedValue(List<Mall2OrderingEarlyWarningRemindsEntity> insertRemiderList, List<Mall2OrderingEarlyWarningRemindsEntity> updateRemiderList, GoodsEntity goodsEntity, Integer totalNum, Integer reminderValue) {
|
|
|
|
+ if(totalNum <= reminderValue){
|
|
|
|
+ Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
+ if(orderingEarlyWarningRemindsEntity == null){
|
|
|
|
+ orderingEarlyWarningRemindsEntity = new Mall2OrderingEarlyWarningRemindsEntity();
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(0));
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setSku(goodsEntity.getGoodsSn());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setGoodsId(goodsEntity.getId().intValue());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setGoodsName(goodsEntity.getName());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmType("00");
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setCreateTime(new Date());
|
|
|
|
+
|
|
|
|
+ insertRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }else{
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAlarmTime(new Date());
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setAverageSales(new BigDecimal(0));
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setTotalNum(totalNum);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(1);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
+
|
|
|
|
+ updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ Mall2OrderingEarlyWarningRemindsEntity orderingEarlyWarningRemindsEntity = mall2OrderingEarlyWarningRemindsDao.queryByGoodsId(goodsEntity.getId());
|
|
|
|
+ if( orderingEarlyWarningRemindsEntity != null){
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setIsWarning(0);
|
|
|
|
+ orderingEarlyWarningRemindsEntity.setModTime(new Date());
|
|
|
|
+ updateRemiderList.add(orderingEarlyWarningRemindsEntity);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|