package doumeemes.service.business.impl;
|
|
import doumeemes.core.constants.ResponseStatus;
|
import doumeemes.core.exception.BusinessException;
|
import doumeemes.core.model.LoginUserInfo;
|
import doumeemes.core.model.PageData;
|
import doumeemes.core.model.PageWrap;
|
import doumeemes.core.utils.Constants;
|
import doumeemes.core.utils.Utils;
|
import doumeemes.core.utils.excel.EasyExcelUtil;
|
import doumeemes.dao.business.DepartmentMapper;
|
import doumeemes.dao.business.MaterialMapper;
|
import doumeemes.dao.business.ProceduresMapper;
|
import doumeemes.dao.business.SalaryParamMapper;
|
import doumeemes.dao.business.model.*;
|
import doumeemes.dao.business.vo.SalaryParamVO;
|
import doumeemes.dao.ext.dto.SalaryParamDTO;
|
import doumeemes.dao.ext.dto.SalaryParamImportDTO;
|
import doumeemes.service.business.DepartmentService;
|
import doumeemes.service.business.SalaryParamService;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import org.apache.shiro.SecurityUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
/**
|
* 设置类-绩效工资配置表Service实现
|
* @author 江蹄蹄
|
* @date 2023/08/11 15:29
|
*/
|
@Service
|
public class SalaryParamServiceImpl implements SalaryParamService {
|
|
@Autowired
|
private SalaryParamMapper salaryParamMapper;
|
|
@Autowired
|
private DepartmentMapper departmentMapper;
|
|
@Autowired
|
private MaterialMapper materialMapper;
|
|
@Autowired
|
private ProceduresMapper proceduresMapper;
|
|
@Override
|
public Integer create(SalaryParam salaryParam) {
|
|
|
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
|
SalaryParam insert = new SalaryParam();
|
insert.setRootDepartId(salaryParam.getRootDepartId());
|
insert.setDepartId(salaryParam.getDepartId());
|
insert.setProcedureId(salaryParam.getProcedureId());
|
insert.setMaterialId(salaryParam.getMaterialId());
|
insert.setDeleted((byte) Constants.ZERO);
|
if(findOne(insert) != null){
|
throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"同一个物料在相同工序不能重复配置哦!");
|
}
|
insert.setCreateUser(principal.getId());
|
insert.setCreateTime(new Date());
|
insert.setUpdateUser(principal.getId());
|
insert.setUpdateTime(new Date());
|
insert.setRemark(salaryParam.getRemark());
|
insert.setSalary(salaryParam.getSalary());
|
insert.setNum(salaryParam.getNum());
|
insert.setTimes(salaryParam.getTimes());
|
insert.setUnqualified(salaryParam.getUnqualified());
|
insert.setType(salaryParam.getType());
|
salaryParamMapper.insert(insert);
|
return salaryParam.getId();
|
}
|
|
@Override
|
public void deleteById(Integer id) {
|
salaryParamMapper.deleteById(id);
|
}
|
|
@Override
|
public void delete(SalaryParam salaryParam) {
|
UpdateWrapper<SalaryParam> deleteWrapper = new UpdateWrapper<>(salaryParam);
|
salaryParamMapper.delete(deleteWrapper);
|
}
|
|
@Override
|
public void deleteByIdInBatch(List<Integer> ids) {
|
if (CollectionUtils.isEmpty(ids)) {
|
return;
|
}
|
salaryParamMapper.deleteBatchIds(ids);
|
}
|
|
@Override
|
public void updateById(SalaryParam salaryParam) {
|
salaryParamMapper.updateById(salaryParam);
|
}
|
|
@Override
|
public void update(SalaryParam salaryParam) {
|
LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
UpdateWrapper<SalaryParam> wrapper = new UpdateWrapper<>();
|
wrapper.lambda()
|
.eq(SalaryParam::getId,salaryParam.getId())
|
.set(SalaryParam::getUpdateTime,new Date())
|
.set(SalaryParam::getUpdateUser,principal.getId())
|
.set(SalaryParam::getType,salaryParam.getType())
|
// .set(SalaryParam::getDepartId,salaryParam.getDepartId())
|
// .set(SalaryParam::getMaterialId,salaryParam.getMaterialId())
|
// .set(SalaryParam::getProcedureId,salaryParam.getProcedureId())
|
.set(SalaryParam::getSalary,salaryParam.getSalary())
|
.set(SalaryParam::getNum,salaryParam.getNum())
|
.set(SalaryParam::getTimes,salaryParam.getTimes())
|
.set(SalaryParam::getUnqualified,salaryParam.getUnqualified());
|
salaryParamMapper.update(null,wrapper);
|
}
|
|
@Override
|
public void updateByIdInBatch(List<SalaryParam> salaryParams) {
|
if (CollectionUtils.isEmpty(salaryParams)) {
|
return;
|
}
|
for (SalaryParam salaryParam: salaryParams) {
|
this.updateById(salaryParam);
|
}
|
}
|
|
@Override
|
public SalaryParam findById(Integer id) {
|
return salaryParamMapper.selectById(id);
|
}
|
|
@Override
|
public SalaryParam findOne(SalaryParam salaryParam) {
|
QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam);
|
wrapper.last("limit 1");
|
return salaryParamMapper.selectOne(wrapper);
|
}
|
|
@Override
|
public List<SalaryParam> findList(SalaryParam salaryParam) {
|
QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam);
|
return salaryParamMapper.selectList(wrapper);
|
}
|
|
@Override
|
public PageData<SalaryParamVO> findPage(PageWrap<SalaryParamDTO> pageWrap) {
|
IPage<SalaryParam> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
|
SalaryParamDTO model = pageWrap.getModel();
|
return PageData.from(salaryParamMapper.selectPage(page, model));
|
}
|
|
@Override
|
public long count(SalaryParam salaryParam) {
|
QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam);
|
return salaryParamMapper.selectCount(wrapper);
|
}
|
|
@Transactional(rollbackFor = {Exception.class,BusinessException.class})
|
@Override
|
public void importPlans(MultipartFile file) {
|
|
LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
|
if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){
|
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!");
|
}
|
//解析excel
|
List<SalaryParamImportDTO> plansList = EasyExcelUtil.importExcel(file, 1, 1, SalaryParamImportDTO.class);
|
if(plansList == null || plansList.size()==0){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!");
|
}
|
|
plansList.forEach(s->{
|
if (Objects.isNull(s.getType())
|
|| Objects.isNull(s.getDepartName())
|
|| Objects.isNull(s.getMaterialCode())
|
|| Objects.isNull(s.getProcedureName())
|
|| Objects.isNull(s.getNum())){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容有误!");
|
}
|
});
|
|
|
for (int i = 0; i < plansList.size(); i++) {
|
SalaryParamImportDTO salaryParamImportDTO = plansList.get(i);
|
|
QueryWrapper<Department> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.eq(Department::getName,salaryParamImportDTO.getDepartName())
|
.eq(Department::getType,Constants.DEPART_TYPE.factory)
|
.last("limit 1");
|
Department department = departmentMapper.selectOne(wrapper);
|
if (Objects.isNull(department)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容【公司名称】有误!");
|
}
|
|
QueryWrapper<Material> materialWrapper = new QueryWrapper<>();
|
materialWrapper.lambda()
|
.eq(Material::getCode,salaryParamImportDTO.getMaterialCode())
|
.eq(Material::getRootDepartId,department.getRootId())
|
.last("limit 1");
|
Material material = materialMapper.selectOne(materialWrapper);
|
|
if (Objects.isNull(material)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容【产品编码】有误!");
|
}
|
if (Objects.nonNull(material) && Objects.equals(material.getName(),salaryParamImportDTO.getMaterialName())){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容【产品名称】有误!");
|
}
|
QueryWrapper<Procedures> proceduresWrapper = new QueryWrapper<>();
|
proceduresWrapper.lambda()
|
.eq(Procedures::getName,salaryParamImportDTO.getProcedureName())
|
.eq(Procedures::getRootDepartId,department.getRootId())
|
.eq(Procedures::getOrgId,department.getId())
|
.last("limit 1");
|
Procedures procedures = proceduresMapper.selectOne(proceduresWrapper);
|
if (Objects.isNull(procedures)){
|
throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "导入数据内容【工序名称】有误!");
|
}
|
SalaryParam salaryParam = new SalaryParam();
|
salaryParam.setRootDepartId(department.getRootId());
|
salaryParam.setDepartId(department.getId());
|
salaryParam.setProcedureId(procedures.getId());
|
salaryParam.setMaterialId(material.getId());
|
salaryParam.setSalary(salaryParamImportDTO.getSalary());
|
salaryParam.setNum(new BigDecimal(salaryParamImportDTO.getNum()));
|
salaryParam.setTimes(getIntegerTimes(salaryParamImportDTO.getTimesName()));
|
Integer unqualified = Optional.ofNullable(salaryParamImportDTO.getUnqualified()).map(s -> {
|
if ("否".equals(s)) {
|
return 0;
|
} else {
|
return 1;
|
}
|
}).orElse(0);
|
salaryParam.setUnqualified(unqualified);
|
|
Integer type = Optional.ofNullable(salaryParamImportDTO.getUnqualified()).map(s -> {
|
if ("计件".equals(s)) {
|
return 0;
|
} else {
|
return 1;
|
}
|
}).orElse(0);
|
salaryParam.setType(type);
|
create(salaryParam);
|
}
|
|
}
|
|
private Integer getIntegerTimes(String a) {
|
int h =0,m=0,s=0;
|
try{
|
int hIndex =a.lastIndexOf("小时");
|
int mIndex=a.lastIndexOf("分钟");
|
int sIndex =a.lastIndexOf("秒");
|
if( hIndex>0){
|
h = Integer.parseInt(a.substring(0,hIndex));
|
}
|
if(mIndex > hIndex){
|
m = Integer.parseInt(a.substring(hIndex >=0?hIndex+2:0,mIndex));
|
}
|
if(sIndex > mIndex){
|
s = Integer.parseInt(a.substring(mIndex >= 0 ? mIndex+2 : 0, sIndex));
|
}
|
return h*3600+m*60+s;
|
}catch (Exception e){
|
throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,时长【"+a+"】格式不正确!" );
|
}
|
|
}
|
}
|