¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions are met: |
| | | * |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | * this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright |
| | | * notice, this list of conditions and the following disclaimer in the |
| | | * documentation and/or other materials provided with the distribution. |
| | | * Neither the name of the dreamlu.net developer nor the names of its |
| | | * contributors may be used to endorse or promote products derived from |
| | | * this software without specific prior written permission. |
| | | * Author: Chill åºéª (smallchill@163.com) |
| | | */ |
| | | package org.springblade.core.mp.base; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.SneakyThrows; |
| | | import org.springblade.core.secure.BladeUser; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.constant.BladeConstant; |
| | | import org.springblade.core.tool.utils.*; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import javax.validation.constraints.NotEmpty; |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ä¸å¡å°è£
åºç¡ç±» |
| | | * |
| | | * @param <M> mapper |
| | | * @param <T> model |
| | | * @author Chill |
| | | */ |
| | | @Validated |
| | | public class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseEntity> extends ServiceImpl<M, T> implements BaseService<T> { |
| | | |
| | | @Override |
| | | public boolean save(T entity) { |
| | | this.resolveEntity(entity); |
| | | return super.save(entity); |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveBatch(Collection<T> entityList, int batchSize) { |
| | | entityList.forEach(this::resolveEntity); |
| | | return super.saveBatch(entityList, batchSize); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateById(T entity) { |
| | | this.resolveEntity(entity); |
| | | return super.updateById(entity); |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateBatchById(Collection<T> entityList, int batchSize) { |
| | | entityList.forEach(this::resolveEntity); |
| | | return super.updateBatchById(entityList, batchSize); |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveOrUpdate(T entity) { |
| | | if (entity.getId() == null) { |
| | | return this.save(entity); |
| | | } else { |
| | | return this.updateById(entity); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize) { |
| | | entityList.forEach(this::resolveEntity); |
| | | return super.saveOrUpdateBatch(entityList, batchSize); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean deleteLogic(@NotEmpty List<Long> ids) { |
| | | BladeUser user = AuthUtil.getUser(); |
| | | List<T> list = new ArrayList<>(); |
| | | ids.forEach(id -> { |
| | | T entity = BeanUtil.newInstance(currentModelClass()); |
| | | if (user != null) { |
| | | entity.setUpdateUser(user.getUserId()); |
| | | } |
| | | entity.setUpdateTime(DateUtil.now()); |
| | | entity.setId(id); |
| | | list.add(entity); |
| | | }); |
| | | return super.updateBatchById(list) && super.removeByIds(ids); |
| | | } |
| | | |
| | | @Override |
| | | public boolean changeStatus(@NotEmpty List<Long> ids, Integer status) { |
| | | BladeUser user = AuthUtil.getUser(); |
| | | List<T> list = new ArrayList<>(); |
| | | ids.forEach(id -> { |
| | | T entity = BeanUtil.newInstance(currentModelClass()); |
| | | if (user != null) { |
| | | entity.setUpdateUser(user.getUserId()); |
| | | } |
| | | entity.setUpdateTime(DateUtil.now()); |
| | | entity.setId(id); |
| | | entity.setStatus(status); |
| | | list.add(entity); |
| | | }); |
| | | return super.updateBatchById(list); |
| | | } |
| | | |
| | | @SneakyThrows |
| | | private void resolveEntity(T entity) { |
| | | BladeUser user = AuthUtil.getUser(); |
| | | Date now = DateUtil.now(); |
| | | if (entity.getId() == null) { |
| | | // å¤çæ°å¢é»è¾ |
| | | if (user != null) { |
| | | entity.setCreateUser(user.getUserId()); |
| | | entity.setCreateDept(Func.firstLong(user.getDeptId())); |
| | | entity.setUpdateUser(user.getUserId()); |
| | | } |
| | | if (entity.getStatus() == null) { |
| | | entity.setStatus(BladeConstant.DB_STATUS_NORMAL); |
| | | } |
| | | entity.setCreateTime(now); |
| | | } else if (user != null) { |
| | | // å¤çä¿®æ¹é»è¾ |
| | | entity.setUpdateUser(user.getUserId()); |
| | | } |
| | | // å¤çéç¨é»è¾ |
| | | entity.setUpdateTime(now); |
| | | entity.setIsDeleted(BladeConstant.DB_NOT_DELETED); |
| | | // å¤çå¤ç§æ·é»è¾ï¼è¥å段å¼ä¸ºç©ºï¼åä¸è¿è¡æä½ |
| | | Field field = ReflectUtil.getField(entity.getClass(), BladeConstant.DB_TENANT_KEY); |
| | | if (ObjectUtil.isNotEmpty(field)) { |
| | | Method getTenantId = ClassUtil.getMethod(entity.getClass(), BladeConstant.DB_TENANT_KEY_GET_METHOD); |
| | | String tenantId = String.valueOf(getTenantId.invoke(entity)); |
| | | if (ObjectUtil.isEmpty(tenantId)) { |
| | | Method setTenantId = ClassUtil.getMethod(entity.getClass(), BladeConstant.DB_TENANT_KEY_SET_METHOD, String.class); |
| | | setTenantId.invoke(entity, (Object) null); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |