增加套餐绑定用户功能

This commit is contained in:
wuweihua
2026-10-19 11:59:44 +08:00
parent 69852907f3
commit 374c8b8bbb
13 changed files with 467 additions and 0 deletions
@@ -42,6 +42,8 @@ public class PrcPriceSet extends BaseEntity
private List<PrcPriceSetDetail> details;
private List<PrcPriceSetVersion> versions;
private List<PrcCustomerPriceSet> customers;
/** viewers explicitly bound to this package */
private List<PrcPriceSetUser> viewers;
/** async save task id (not persisted) */
private String saveTaskId;
/** Y: ignored on save; library pull only via /detail/pullFromLibrary */
@@ -0,0 +1,21 @@
package com.bms.price.domain;
import com.bms.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/** Package viewer bind: prc_price_set_user */
@Data
@EqualsAndHashCode(callSuper = true)
public class PrcPriceSetUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long psuId;
private Long priceSetId;
private Long userId;
/** login account */
private String userName;
/** display only, not a table column */
private String nickName;
}
@@ -0,0 +1,20 @@
package com.bms.price.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.bms.price.domain.PrcPriceSetUser;
public interface PrcPriceSetUserMapper
{
PrcPriceSetUser selectPrcPriceSetUserById(Long psuId);
List<PrcPriceSetUser> selectPrcPriceSetUserList(PrcPriceSetUser query);
int insertPrcPriceSetUser(PrcPriceSetUser row);
int deletePrcPriceSetUserByIds(Long[] psuIds);
int deleteByPriceSetId(Long priceSetId);
int countBySetAndUser(@Param("priceSetId") Long priceSetId, @Param("userId") Long userId);
}
@@ -9,6 +9,7 @@ import com.bms.price.domain.PrcPriceSet;
import com.bms.price.domain.PrcPriceSetCheckItem;
import com.bms.price.domain.PrcPriceSetDetail;
import com.bms.price.domain.PrcPriceSetSaveTask;
import com.bms.price.domain.PrcPriceSetUser;
/**
* 价格套餐 服务层
@@ -91,6 +92,12 @@ public interface IPrcPriceSetService
public int deleteCustomerByIds(Long[] customerPricesetIds);
public List<PrcPriceSetUser> selectViewerList(PrcPriceSetUser query);
public int insertViewer(PrcPriceSetUser row);
public int deleteViewerByIds(Long[] psuIds);
/** chain expire_time = next version effective_time, then refresh 0/3/1/2 */
public int refreshAllVersionStatus();
@@ -18,6 +18,7 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import com.bms.common.annotation.DataScope;
import com.bms.common.exception.ServiceException;
import com.bms.common.utils.DateUtils;
import com.bms.common.utils.MessageUtils;
@@ -29,6 +30,7 @@ import com.bms.price.domain.BmsProductCountry;
import com.bms.price.domain.PrcCustomerPriceSet;
import com.bms.price.domain.PrcPriceExcelFile;
import com.bms.price.domain.PrcPriceSet;
import com.bms.price.domain.PrcPriceSetUser;
import com.bms.price.domain.PrcPriceSetCheckItem;
import com.bms.price.domain.PrcPriceSetDetail;
import com.bms.price.domain.PrcPriceSetProduct;
@@ -42,9 +44,12 @@ import com.bms.price.mapper.PrcCustomerPriceSetMapper;
import com.bms.price.mapper.PrcPriceSetDetailMapper;
import com.bms.price.mapper.PrcPriceSetMapper;
import com.bms.price.mapper.PrcPriceSetProductMapper;
import com.bms.price.mapper.PrcPriceSetUserMapper;
import com.bms.price.mapper.PrcPriceSetVersionMapper;
import com.bms.price.mapper.PrcSurchargeMapper;
import com.bms.price.mapper.PrcSurchargeRelMapper;
import com.bms.common.core.domain.entity.SysUser;
import com.bms.system.mapper.SysUserMapper;
import com.bms.price.service.IBmsProductService;
import com.bms.price.service.IPrcPriceExcelFileService;
import com.bms.price.service.IPrcPriceSetService;
@@ -98,6 +103,12 @@ public class PrcPriceSetServiceImpl implements IPrcPriceSetService
@Autowired
private PrcCustomerPriceSetMapper customerMapper;
@Autowired
private PrcPriceSetUserMapper priceSetUserMapper;
@Autowired
private SysUserMapper sysUserMapper;
@Autowired
private BmsProductCountryMapper productCountryMapper;
@@ -132,9 +143,19 @@ public class PrcPriceSetServiceImpl implements IPrcPriceSetService
return set;
}
/**
* Price-set list data scope: bound customer's sales user (same as customer list),
* package creator, or explicit viewer bind. Super admin skips filter in DataScopeAspect.
*/
@Override
@DataScope(deptAlias = "su", deptField = "dept_id", userAlias = "su", userField = "user_id",
permission = "price:set:list")
public List<PrcPriceSet> selectPrcPriceSetList(PrcPriceSet set)
{
if (set != null)
{
set.getParams().put("viewerUserId", SecurityUtils.getUserId());
}
List<PrcPriceSet> list = setMapper.selectPrcPriceSetList(set);
for (PrcPriceSet item : list)
{
@@ -2223,6 +2244,49 @@ public class PrcPriceSetServiceImpl implements IPrcPriceSetService
return customerMapper.deletePrcCustomerPriceSetByIds(customerPricesetIds);
}
@Override
public List<PrcPriceSetUser> selectViewerList(PrcPriceSetUser query)
{
return priceSetUserMapper.selectPrcPriceSetUserList(query);
}
@Override
@Transactional
public int insertViewer(PrcPriceSetUser row)
{
if (row == null || row.getPriceSetId() == null || row.getUserId() == null)
{
throw new ServiceException("price set user bind requires priceSetId and userId");
}
requireSet(row.getPriceSetId());
if (priceSetUserMapper.countBySetAndUser(row.getPriceSetId(), row.getUserId()) > 0)
{
throw new ServiceException("user already bound to this price set");
}
SysUser user = sysUserMapper.selectUserById(row.getUserId());
if (user == null)
{
throw new ServiceException("user not found");
}
row.setUserName(user.getUserName());
if (StringUtils.isEmpty(row.getCreateBy()))
{
row.setCreateBy(SecurityUtils.getUsername());
}
return priceSetUserMapper.insertPrcPriceSetUser(row);
}
@Override
@Transactional
public int deleteViewerByIds(Long[] psuIds)
{
if (psuIds == null || psuIds.length == 0)
{
return 0;
}
return priceSetUserMapper.deletePrcPriceSetUserByIds(psuIds);
}
private void replaceChildren(PrcPriceSet set)
{
saveOrUpdateVersion(set);
@@ -2989,6 +3053,9 @@ public class PrcPriceSetServiceImpl implements IPrcPriceSetService
PrcCustomerPriceSet cquery = new PrcCustomerPriceSet();
cquery.setPriceSetId(priceSetId);
set.setCustomers(customerMapper.selectPrcCustomerPriceSetList(cquery));
PrcPriceSetUser uquery = new PrcPriceSetUser();
uquery.setPriceSetId(priceSetId);
set.setViewers(priceSetUserMapper.selectPrcPriceSetUserList(uquery));
}
private void fillVersionChildren(PrcPriceSetVersion version)