package com.ibeetl.admin.console.service; import com.fasterxml.jackson.annotation.JsonFormat; import com.google.gson.Gson; import com.ibeetl.admin.console.dao.SettingConsoleDao; import com.ibeetl.admin.console.model.BannerModel; import com.ibeetl.admin.console.model.ItemModel; import com.ibeetl.admin.console.model.StorageModel; import com.ibeetl.admin.console.model.XzxAccountLogModel; import com.ibeetl.admin.console.rabbitmq.MqConstants; import com.ibeetl.admin.console.rabbitmq.MqUtil; import com.ibeetl.admin.core.entity.CoreSetMoney; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.XzxAccountInfo; import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.web.JsonResult; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tomcat.util.json.JSONParser; import org.beetl.sql.core.engine.PageQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.configurationprocessor.json.JSONArray; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; @Service @Transactional public class SettingConsoleService extends CoreBaseService { Logger log = LoggerFactory.getLogger(this.getClass()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Autowired SettingConsoleDao settingConsoleDao; @Autowired RedisService redisService; /*@Autowired MqUtil mqUtil;*/ @Autowired XzxAccountInfoService xzxAccountInfoService; @Autowired CorePlatformService platformService; /** * 根据条件查询 * * @param query */ public void queryByCondtion(PageQuery query) { PageQuery ret = settingConsoleDao.queryByCondtion(query); queryListAfter(ret.getList()); } /** * 更新字典表 config_type_name 为 金额类型 的值 * @param money */ @Transactional(rollbackFor = {}) public void updateMoney(CoreSetMoney money){ if(!StringUtils.isEmpty(money.getAgentPrice())) {settingConsoleDao.updateAgentPrice(money);} if(!StringUtils.isEmpty(money.getTimeInterval())) {settingConsoleDao.updateTimeInterval(money);} if(!StringUtils.isEmpty(money.getStartTime())) {settingConsoleDao.updateStratTime(money);} if(!StringUtils.isEmpty(money.getEndTime())) {settingConsoleDao.updateEndTime(money);} if(!StringUtils.isEmpty(money.getOverdrawPrice())){ Map m = settingConsoleDao.queryOverdrawPrice(); settingConsoleDao.updateOverdrawPrice(money); // 需要更新所有account表的透支额度,但是不更新已经修改过的用户额度 List orderIds = settingConsoleDao.queryRKOrderIds(null,null); settingConsoleDao.updateAccountOverdrawPrice(money.getOverdrawPrice(), m.get("configValue").toString(),orderIds,"1"); } if(!StringUtils.isEmpty(money.getRechargePrice())){settingConsoleDao.updateRechargePrice(money);} if(!StringUtils.isEmpty(money.getOrderTimeout())){ settingConsoleDao.updateOrderTimeout(money); } if(!StringUtils.isEmpty(money.getOrderTotal())){ settingConsoleDao.updateOrderTotal(money); } } /* * ====商品分类=============================================================== */ public Map querIteml(ItemModel item){ Map map = new HashMap<>(); List list = settingConsoleDao.querIteml(item); map.put("data", list); map.put("count", settingConsoleDao.queryItemCount(item)); map.put("code", 0); return map; } @Transactional(rollbackFor = RollbackException.class) public int insertItem(ItemModel item){ item.setItemType(System.currentTimeMillis() + "" + (int) (Math.random()*(10000-10)+10)); item.setCreateTime(sdf.format(new Date())); // 对排序字段进行处理 setSort(item); int i = settingConsoleDao.insertItem(item); setSortAggin(item); // updateItemForRedis(); redisService.remove("environmentalInfoList"); redisService.remove("environmentalInfoListNew"); redisService.remove("xzx:sys:category"); return i; } public int delItem(ItemModel item){ ItemModel im = new ItemModel(); im.setLimit(10); im.setParentId(item.getId()); List list = settingConsoleDao.querIteml(im); if(list.size() > 0){ return 0; } int i = settingConsoleDao.delItem(item); // updateItemForRedis(); redisService.remove("environmentalInfoList"); redisService.remove("environmentalInfoListNew"); redisService.remove("xzx:sys:category"); return i; } /** * 更新 * @param item * @return */ @Transactional(rollbackFor = RollbackException.class) public int updateItem(ItemModel item){ // 对排序字段进行处理 setSort(item); int i = settingConsoleDao.updateItem(item); setSortAggin(item); redisService.remove("environmentalInfoList"); redisService.remove("environmentalInfoListNew"); redisService.remove("xzx:sys:category"); // updateItemForRedis(); return i; } /** * 对排序字段进行处理,排序字段不能出现重复的 * 当排序字段更新或插入时,后面的需要往下排 * 处理不好,够用 * @param item 传入对象 */ void setSort(ItemModel item){ ItemModel im = new ItemModel(); im.setLimit(1000); im.setParentId(item.getParentId()); List list = settingConsoleDao.querIteml(im); log.info("------list.size() : {} -----", list.size()); // 找到原始的sort数据 int originalSort = item.getSort(); for(ItemModel imx : list){ if(originalSort <= imx.getSort()){ imx.setSort(imx.getSort()+1); } } for(ItemModel imx: list){ settingConsoleDao.updateItem(imx); } } void setSortAggin(ItemModel item){ ItemModel im = new ItemModel(); im.setLimit(1000); im.setParentId(item.getParentId()); List list = settingConsoleDao.querIteml(im); list.sort((x, y)->Integer.compare(x.getSort(), y.getSort())); int f = 1; for(ItemModel itemModel : list){ itemModel.setSort(f++); } for(ItemModel itemModel : list){ settingConsoleDao.updateItem(itemModel); } } /** * 更新redis里面的数据 */ public void updateItemForRedis(){ List list = settingConsoleDao.queryItemAll(); list = parentUtils(list); Gson gson = new Gson(); String str = gson.toJson(list); redisService.set("environmentalInfoList", str); } // 递归操作父子结构数据 List parentUtils(List parentlist){ List list = new ArrayList<>(); for(ItemModel itemModel :parentlist){ if(itemModel.getParentId() == null){ itemModel.setList(childUtils(parentlist, itemModel.getId())); list.add(itemModel); } } log.info("----更新redis里面的分类数据:{}", list); return list; } List childUtils(List childlist , Long id){ List list = new ArrayList<>(); for(ItemModel itemModel : childlist){ if(itemModel.getParentId() == id){ itemModel.setList(childUtils(childlist, itemModel.getId())); list.add(itemModel); } } return list; } class RollbackException extends RuntimeException { public RollbackException(String message) { super(message); } } // ------仓库管理------------------------------------------ /** * 查询仓库列表 * @param storageModel * @return */ public Map queryStorageList(StorageModel storageModel){ Map m = new HashMap<>(); m.put("data", settingConsoleDao.queryStorageList(storageModel)); m.put("count", settingConsoleDao.queryStorageListCount(storageModel)); m.put("code", 0); return m; } public List> queryAllStorage(){ return settingConsoleDao.queryAllStorage(); } /** * 添加仓库 * @param storageModel * @return */ public int addStorage(StorageModel storageModel){ storageModel.setCreateTime(sdf.format(new Date())); return settingConsoleDao.addStorage(storageModel); } /** * 更新仓库 * @param storageModel * @return */ public int updateStorage(StorageModel storageModel){ return settingConsoleDao.updateStorage(storageModel); } /** * 删除仓库 * @param storageModel * @return */ public int delStorage(StorageModel storageModel){ return settingConsoleDao.delStorage(storageModel); } // ----banner管理--------------------------------------------- /** * 查询 * @param bannerModel * @return */ public Map queryBannerList(BannerModel bannerModel){ Map map = new HashMap<>(); map.put("data", settingConsoleDao.queryBannerList(bannerModel)); map.put("count", settingConsoleDao.queryBannerListCount(bannerModel)); map.put("code", 0); return map; } /** * 添加 * @param bannerModel * @return */ public JsonResult insertBanner(BannerModel bannerModel){ bannerModel.setCreateTime(sdf.format(new Date())); if(settingConsoleDao.insertBanner(bannerModel) > 0){ return JsonResult.success(); }else { return JsonResult.failMessage("保存失败"); } } /** * 更新 * @param bannerModel * @return */ public int updateBanner(BannerModel bannerModel){ return settingConsoleDao.updateBanner(bannerModel); } /** * 删除 * @param id * @return */ public int delBanner(String id){ return settingConsoleDao.delBanner(id); } public void updateOverdrawPriceByUserId(String accountId,String money){ //修改账户推送队列 XzxAccountInfo accountInfo = xzxAccountInfoService.queryById(accountId); XzxAccountLogModel getAccountLog=getAccountLog(accountInfo,money); //mqUtil.send(MqConstants.ACCOUNT_LOG_QUEUE,getAccountLog); settingConsoleDao.updateOverdrawPriceByUserId(accountId,money); } private XzxAccountLogModel getAccountLog(XzxAccountInfo accountInfo,String money){ XzxAccountLogModel model = new XzxAccountLogModel(); model.setOrderId(""); model.setChannelType(9); model.setCreateTime(sdf.format(new Date())); CoreUser user = platformService.getCurrentUser(); model.setCreateUserId(Long.toString(user.getId())); model.setAccountId(accountInfo.getAccountId()); model.setOldMoney(accountInfo.getMoney()); model.setNewMoney(accountInfo.getMoney()); model.setOldLimit(accountInfo.getOverdraftLimit()); model.setNewLimit(new BigDecimal(accountInfo.getOverdraftLimit()).add(new BigDecimal(money)).toString()); model.setOldFixedLimit(accountInfo.getFixedLimit()); model.setNewFixedLimit(new BigDecimal(accountInfo.getFixedLimit()).add(new BigDecimal(money)).toString()); return model; } public void updateLimitByUserId(String accountId,String money){ //修改账户推送队列 XzxAccountInfo accountInfo = xzxAccountInfoService.queryById(accountId); XzxAccountLogModel getAccountLog=getAccountLog(accountInfo,money); //mqUtil.send(MqConstants.ACCOUNT_LOG_QUEUE,getAccountLog); settingConsoleDao.updateLimitByUserId(accountId,money); } }