|
|
|
@ -1,8 +1,25 @@
|
|
|
|
|
package com.os.mes.record.service.impl;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
import com.os.common.utils.DateUtils;
|
|
|
|
|
import com.os.common.utils.uuid.PlanCodeUtils;
|
|
|
|
|
import com.os.mes.api.domain.ERPParamDto;
|
|
|
|
|
import com.os.mes.api.domain.LatestSalary;
|
|
|
|
|
import com.os.mes.api.service.IERPPortService;
|
|
|
|
|
import com.os.mes.base.domain.BaseStaffInfo;
|
|
|
|
|
import com.os.mes.base.domain.BaseTeamMembers;
|
|
|
|
|
import com.os.mes.base.mapper.BaseStaffInfoMapper;
|
|
|
|
|
import com.os.mes.base.mapper.BaseTeamMembersMapper;
|
|
|
|
|
import com.os.mes.prod.domain.ProdOrderDetail;
|
|
|
|
|
import com.os.mes.prod.domain.ProdOrderInfo;
|
|
|
|
|
import com.os.mes.prod.mapper.ProdOrderInfoMapper;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import com.os.mes.record.mapper.RecordStaffSalaryMapper;
|
|
|
|
@ -20,6 +37,18 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
|
|
|
|
|
@Autowired
|
|
|
|
|
private RecordStaffSalaryMapper recordStaffSalaryMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private BaseTeamMembersMapper baseTeamMembersMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private BaseStaffInfoMapper baseStaffInfoMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ProdOrderInfoMapper prodOrderInfoMapper;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IERPPortService portService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询员工工资记录
|
|
|
|
|
*
|
|
|
|
@ -86,4 +115,82 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
|
|
|
|
|
public int deleteRecordStaffSalaryByObjId(Long objId) {
|
|
|
|
|
return recordStaffSalaryMapper.deleteRecordStaffSalaryByObjId(objId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成班组员工工资
|
|
|
|
|
* @param recordStaffSalary
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public List<RecordStaffSalary> selectTeamEmployeesWages(RecordStaffSalary recordStaffSalary) {
|
|
|
|
|
List<RecordStaffSalary> result = new ArrayList<>();
|
|
|
|
|
BaseTeamMembers members = new BaseTeamMembers();
|
|
|
|
|
members.setTeamCode(recordStaffSalary.getGroupId());
|
|
|
|
|
List<BaseTeamMembers> membersList = baseTeamMembersMapper.selectBaseTeamMembersList(members);
|
|
|
|
|
//调用最新工资系数接口
|
|
|
|
|
LatestSalary salaryData = portService.getERPLatestSalaryData(new ERPParamDto());
|
|
|
|
|
|
|
|
|
|
ProdOrderInfo orderInfo = new ProdOrderInfo();
|
|
|
|
|
orderInfo.setParams(recordStaffSalary.getParams());
|
|
|
|
|
List<ProdOrderInfo> orderInfoList = prodOrderInfoMapper.selectProdOrderInfoList(orderInfo);
|
|
|
|
|
|
|
|
|
|
Long objId = 1L;
|
|
|
|
|
String taskCode = PlanCodeUtils.getTaskCode();
|
|
|
|
|
//按照班组 分工资;
|
|
|
|
|
for (BaseTeamMembers team : membersList) {
|
|
|
|
|
String processCode = team.getProcessCode();
|
|
|
|
|
//工序工资系数
|
|
|
|
|
BigDecimal coefficient = new BigDecimal(0);
|
|
|
|
|
//工序生产面积
|
|
|
|
|
BigDecimal totalArea = new BigDecimal(0);
|
|
|
|
|
|
|
|
|
|
//硫化工序 工序硫化的工资 = 硫化系数*硫化面积*(工资系数/参加该工序的所有人的工资系数的总和)
|
|
|
|
|
//硫化面积=硫化米数/客户要求总米数*硫化面积
|
|
|
|
|
if(processCode.equals("1002")){
|
|
|
|
|
coefficient = salaryData.getVulcanizationCoefficient();
|
|
|
|
|
totalArea = orderInfoList.stream().map(ProdOrderInfo::getOrderDetail)
|
|
|
|
|
.map(e -> e.getBeltRequiredLength().divide(e.getBeltRequiredLength(), 6, RoundingMode.HALF_UP)
|
|
|
|
|
.multiply(e.getSulfurizationArea()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
}
|
|
|
|
|
//成型工序
|
|
|
|
|
if(processCode.equals("1001")){
|
|
|
|
|
coefficient = salaryData.getFormingCoefficient();
|
|
|
|
|
totalArea = orderInfoList.stream().map(ProdOrderInfo::getOrderDetail)
|
|
|
|
|
.map(e -> e.getBeltRequiredLength().divide(e.getBeltRequiredLength(), 6, RoundingMode.HALF_UP)
|
|
|
|
|
.multiply(e.getFormingArea()))
|
|
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BaseStaffInfo selectStaffInfo = new BaseStaffInfo();
|
|
|
|
|
selectStaffInfo.setTeamCode(team.getTeamCode());
|
|
|
|
|
selectStaffInfo.setDelFlag("0");
|
|
|
|
|
List<BaseStaffInfo> staffInfoList = baseStaffInfoMapper.selectBaseStaffInfoList(selectStaffInfo);
|
|
|
|
|
BigDecimal totalWageCoefficient = staffInfoList.stream().map(BaseStaffInfo::getWageCoefficient)
|
|
|
|
|
.filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
|
|
|
|
|
|
for (BaseStaffInfo staffInfo : staffInfoList) {
|
|
|
|
|
RecordStaffSalary staffSalary = new RecordStaffSalary();
|
|
|
|
|
staffSalary.setObjId(objId++);
|
|
|
|
|
staffSalary.setTaskCode(taskCode);
|
|
|
|
|
staffSalary.setIdCard(staffInfo.getPassWord());
|
|
|
|
|
staffSalary.setGroupId(team.getTeamCode());
|
|
|
|
|
staffSalary.setEventDate(new Date());
|
|
|
|
|
staffSalary.setSalaryCategory("收入");
|
|
|
|
|
staffSalary.setRevenueClass("完成生产任务");
|
|
|
|
|
BigDecimal staffCoefficient = staffInfo.getWageCoefficient().divide(totalWageCoefficient, 6, RoundingMode.HALF_UP);
|
|
|
|
|
BigDecimal revenueAmount = coefficient.multiply(totalArea).multiply(staffCoefficient);
|
|
|
|
|
revenueAmount = revenueAmount.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
staffSalary.setRevenueAmount(revenueAmount);
|
|
|
|
|
staffSalary.setSalaryCoefficient(staffInfo.getWageCoefficient());
|
|
|
|
|
staffSalary.setStaffName(staffInfo.getStaffName());
|
|
|
|
|
staffSalary.setCardId(staffInfo.getCardId());
|
|
|
|
|
staffSalary.setTeamName(team.getTeamName());
|
|
|
|
|
result.add(staffSalary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|