diff --git a/os-mes/src/main/java/com/os/mes/prod/domain/ProdPlanExecuteUser.java b/os-mes/src/main/java/com/os/mes/prod/domain/ProdPlanExecuteUser.java
index 08b17bd..0752c44 100644
--- a/os-mes/src/main/java/com/os/mes/prod/domain/ProdPlanExecuteUser.java
+++ b/os-mes/src/main/java/com/os/mes/prod/domain/ProdPlanExecuteUser.java
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.os.common.annotation.Excel;
@@ -116,6 +117,104 @@ public class ProdPlanExecuteUser extends BaseEntity {
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
+ /**
+ * 工资系数
+ */
+ @Excel(name = "工资系数")
+ private BigDecimal wageCoefficient;
+
+ /**
+ * 客户要求输送带长度(m)
+ */
+ @Excel(name = "客户要求输送带长度(m)")
+ private BigDecimal BeltRequiredLength;
+
+ /**
+ * 成型面积
+ */
+ @Excel(name = "成型面积")
+ @JsonProperty(value = "FormingArea")
+ private BigDecimal FormingArea;
+
+ /**
+ * 硫化面积
+ */
+ @Excel(name = "硫化面积")
+ @JsonProperty(value = "SulfurizationArea")
+ private BigDecimal SulfurizationArea;
+
+ /** 身份证 */
+ @Excel(name = "身份证")
+ private String idCard;
+
+ /**
+ * 班组编号
+ */
+ @Excel(name = "班组编号")
+ private String teamCode;
+
+ /**
+ * 班组名称
+ */
+ @Excel(name = "班组名称")
+ private String teamName;
+
+ public String getIdCard() {
+ return idCard;
+ }
+
+ public void setIdCard(String idCard) {
+ this.idCard = idCard;
+ }
+
+ public String getTeamCode() {
+ return teamCode;
+ }
+
+ public void setTeamCode(String teamCode) {
+ this.teamCode = teamCode;
+ }
+
+ public String getTeamName() {
+ return teamName;
+ }
+
+ public void setTeamName(String teamName) {
+ this.teamName = teamName;
+ }
+
+ public BigDecimal getBeltRequiredLength() {
+ return BeltRequiredLength;
+ }
+
+ public void setBeltRequiredLength(BigDecimal beltRequiredLength) {
+ BeltRequiredLength = beltRequiredLength;
+ }
+
+ public BigDecimal getFormingArea() {
+ return FormingArea;
+ }
+
+ public void setFormingArea(BigDecimal formingArea) {
+ FormingArea = formingArea;
+ }
+
+ public BigDecimal getSulfurizationArea() {
+ return SulfurizationArea;
+ }
+
+ public void setSulfurizationArea(BigDecimal sulfurizationArea) {
+ SulfurizationArea = sulfurizationArea;
+ }
+
+ public BigDecimal getWageCoefficient() {
+ return wageCoefficient;
+ }
+
+ public void setWageCoefficient(BigDecimal wageCoefficient) {
+ this.wageCoefficient = wageCoefficient;
+ }
+
public String getStationName() {
return stationName;
}
diff --git a/os-mes/src/main/java/com/os/mes/record/service/impl/RecordStaffSalaryServiceImpl.java b/os-mes/src/main/java/com/os/mes/record/service/impl/RecordStaffSalaryServiceImpl.java
index c7afc75..02538f2 100644
--- a/os-mes/src/main/java/com/os/mes/record/service/impl/RecordStaffSalaryServiceImpl.java
+++ b/os-mes/src/main/java/com/os/mes/record/service/impl/RecordStaffSalaryServiceImpl.java
@@ -3,6 +3,7 @@ package com.os.mes.record.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
+import java.util.stream.Collectors;
import com.os.common.exception.ServiceException;
import com.os.common.utils.DateUtils;
@@ -19,8 +20,10 @@ import com.os.mes.base.mapper.BaseStaffInfoMapper;
import com.os.mes.base.mapper.BaseTeamMembersMapper;
import com.os.mes.prod.domain.ProdOrderInfo;
import com.os.mes.prod.domain.ProdPlanDetail;
+import com.os.mes.prod.domain.ProdPlanExecuteUser;
import com.os.mes.prod.domain.ProdPlanInfo;
import com.os.mes.prod.mapper.ProdOrderInfoMapper;
+import com.os.mes.prod.mapper.ProdPlanExecuteUserMapper;
import com.os.mes.prod.mapper.ProdPlanInfoMapper;
import com.os.mes.record.domain.RecordStaffCommute;
import com.os.mes.record.domain.StaffSalaryVo;
@@ -60,7 +63,7 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
private BaseProcessInfoMapper baseProcessInfoMapper;
@Autowired
- private RecordStaffCommuteMapper recordStaffCommuteMapper;
+ private ProdPlanExecuteUserMapper prodPlanExecuteUserMapper;
@Autowired
private IERPPortService portService;
@@ -134,12 +137,12 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
/**
* 生成班组员工工资
- * (工序硫化的工资计算方法 = 硫化系数*硫化面积*(工资系数/参加该工序的所有人的工资系数的总和)
- * 这里的硫化面积=硫化米数/客户要求总米数*硫化面积)
- *
+ * (工序硫化的工资计算方法 = 硫化系数*硫化面积*(工资系数/参加该工序的所有人的工资系数的总和)
+ * 这里的硫化面积=硫化米数/客户要求总米数*硫化面积)
+ *
* 1、需知道每个员工在时间范围内的上班天数
* 2、需要知道时间范围内生产工单生产完成多少米
- * 3、工序硫化员工工资 = 硫化系数 * (每个工单的实际硫化米数/客户要求总米数*硫化面积) * (员工的工资系数/参加该工序的所有人的工资系数的总和) * (当前员工在班时长/该工序的所有人在班时长)
+ * 3、工序硫化员工工资 = 硫化系数 * (每个工单的实际硫化米数/客户要求总米数*硫化面积) * (员工的工资系数/参加该工序的所有人的工资系数的总和)
*
* @param recordStaffSalary
* @return
@@ -150,14 +153,12 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
//调用最新工资系数接口
LatestSalary salaryData = portService.getERPLatestSalaryData(new ERPParamDto());
- //遍历工序
- BaseProcessInfo selectProcessInfo = new BaseProcessInfo();
- selectProcessInfo.setProcessCode(recordStaffSalary.getProcessCode());
- List processInfoList = baseProcessInfoMapper.selectBaseProcessInfoList(selectProcessInfo);
+ List teamMembers = baseTeamMembersMapper.selectBaseTeamMembersList(new BaseTeamMembers());
- ProdPlanInfo planInfo = new ProdPlanInfo();
Map params = recordStaffSalary.getParams();
- planInfo.setParams(params);
+ ProdPlanExecuteUser selectExecuteUser = new ProdPlanExecuteUser();
+ selectExecuteUser.setParams(params); //beginOrderDate、endOrderDate
+ List planUserList = prodPlanExecuteUserMapper.selectProdPlanExecuteUserList(selectExecuteUser);
Date beginOrderDate = null;
Date endOrderDate = null;
@@ -170,14 +171,85 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
long objId = 1L;
String taskCode = PlanCodeUtils.getTaskCode();
+ Map> orderCodeMap = planUserList.stream().collect(Collectors.groupingBy(ProdPlanExecuteUser::getOrderCode));
+ for (String planCode : orderCodeMap.keySet()) {
+ List orderCodeUserList = orderCodeMap.get(planCode);
+ for (ProdPlanExecuteUser prodPlanExecuteUser : orderCodeUserList) {
+ //工序工资系数
+ BigDecimal coefficient = new BigDecimal(0);
+ //工序生产面积
+ BigDecimal totalArea = new BigDecimal(0);
+ ///参加该工序的所有人的工资系数的总和
+ BigDecimal wageCoefficientSum = new BigDecimal(0);
+ //硫化工序 工序硫化的工资 = 硫化系数*硫化面积*(工资系数/参加该工序的所有人的工资系数的总和)
+ //硫化面积=硫化米数/客户要求总米数*硫化面积
+ if (prodPlanExecuteUser.getProcessCode().equals("1002")) {
+ coefficient = salaryData.getVulcanizationCoefficient();
+ totalArea = orderCodeUserList.stream().filter(e -> e.getProcessCode().equals("1002"))
+ .map(e -> e.getCompleteAmount().divide(e.getBeltRequiredLength(), 6, RoundingMode.HALF_UP)
+ .multiply(e.getSulfurizationArea())).reduce(BigDecimal.ZERO, BigDecimal::add);
+ wageCoefficientSum = orderCodeUserList.stream().filter(e -> e.getProcessCode().equals("1002"))
+ .map(ProdPlanExecuteUser::getWageCoefficient).reduce(BigDecimal.ZERO, BigDecimal::add);
+ }
+ //成型工序
+ if (prodPlanExecuteUser.getProcessCode().equals("1001")) {
+ coefficient = salaryData.getFormingCoefficient();
+ totalArea = orderCodeUserList.stream().filter(e -> e.getProcessCode().equals("1001"))
+ .map(e -> e.getCompleteAmount().divide(e.getBeltRequiredLength(), 6, RoundingMode.HALF_UP)
+ .multiply(e.getFormingArea())).reduce(BigDecimal.ZERO, BigDecimal::add);
+ wageCoefficientSum = orderCodeUserList.stream().filter(e -> e.getProcessCode().equals("1001"))
+ .map(ProdPlanExecuteUser::getWageCoefficient).reduce(BigDecimal.ZERO, BigDecimal::add);
+ }
- //(每个工单的实际硫化米数/客户要求总米数*硫化面积)
- for (BaseProcessInfo processInfo : processInfoList) {
- List salaryVoList = selectSumEmployeeSalary(processInfo.getProcessCode());
- for (StaffSalaryVo staffSalaryVo : salaryVoList) {
+ BigDecimal revenueAmount = new BigDecimal(0);//员工收入
+ if (wageCoefficientSum.compareTo(BigDecimal.ZERO) > 0){
+ BigDecimal staffCoefficient = prodPlanExecuteUser.getWageCoefficient().divide(wageCoefficientSum, 6, RoundingMode.HALF_UP);
+ revenueAmount = coefficient.multiply(totalArea).multiply(staffCoefficient).setScale(2, RoundingMode.HALF_UP);
+ }
+ if (StringUtils.isNotEmpty(prodPlanExecuteUser.getTeamCode())) {
+ for (BaseTeamMembers teamMember : teamMembers) {
+ if (prodPlanExecuteUser.getTeamCode().contains(teamMember.getTeamCode())) {
+ if (StringUtils.isEmpty(prodPlanExecuteUser.getTeamName())) {
+ prodPlanExecuteUser.setTeamName(teamMember.getTeamName());
+ } else {
+ prodPlanExecuteUser.setTeamName(prodPlanExecuteUser.getTeamName() + "," + teamMember.getTeamName());
+ }
+ }
+ }
+ }
+ String teamCode = prodPlanExecuteUser.getTeamCode();
+ String teamName = prodPlanExecuteUser.getTeamName();
+ String idCard = prodPlanExecuteUser.getIdCard();
+ RecordStaffSalary staffSalary = new RecordStaffSalary();
+ for (RecordStaffSalary staff : result) {
+ if (staff.getCardId().equals(idCard) && staff.getGroupId().equals(prodPlanExecuteUser.getTeamCode())) {
+ staffSalary = staff;
+ }
+ }
+ if (StringUtils.isEmpty(staffSalary.getCardId())) {
+ staffSalary.setObjId(objId++);
+ staffSalary.setTaskCode(taskCode);
+ staffSalary.setIdCard(prodPlanExecuteUser.getIdCard());
+ staffSalary.setGroupId(teamCode);
+ staffSalary.setEventDate(new Date());
+ staffSalary.setSalaryCategory("收入");
+ staffSalary.setRevenueClass("完成生产任务");
+ revenueAmount = revenueAmount.setScale(2, RoundingMode.HALF_UP);
+ staffSalary.setRevenueAmount(revenueAmount);
+ staffSalary.setSalaryCoefficient(prodPlanExecuteUser.getWageCoefficient());
+ staffSalary.setStaffName(prodPlanExecuteUser.getStaffName());
+ staffSalary.setCardId(idCard);
+ staffSalary.setTeamName(teamName);
+ staffSalary.setBeginDate(beginOrderDate);
+ staffSalary.setEndDate(endOrderDate);
+ result.add(staffSalary);
+ } else {
+ staffSalary.setRevenueAmount(staffSalary.getRevenueAmount().add(revenueAmount));
+ staffSalary.setGroupId(teamCode);
+ staffSalary.setTeamName(teamName);
+ }
}
-
}
return result;
@@ -186,6 +258,7 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
/**
* 该工序所有员工的工序工资系数
+ *
* @param processCode
* @return
*/
@@ -208,12 +281,12 @@ public class RecordStaffSalaryServiceImpl implements IRecordStaffSalaryService {
sumSalaryCoefficient = sumSalaryCoefficient.add(baseStaffInfo.getWageCoefficient());
boolean isRepeat = true;
for (StaffSalaryVo salaryVo : employeeList) {
- if (salaryVo.getStaffId().equals(baseStaffInfo.getStaffId())){
+ if (salaryVo.getStaffId().equals(baseStaffInfo.getStaffId())) {
salaryVo.setSalaryCoefficient(salaryVo.getSumSalaryCoefficient().add(sumSalaryCoefficient));
isRepeat = false;
}
}
- if (isRepeat){
+ if (isRepeat) {
employeeList.add(salary);
}
}
diff --git a/os-mes/src/main/resources/mapper/mes/prod/ProdPlanExecuteUserMapper.xml b/os-mes/src/main/resources/mapper/mes/prod/ProdPlanExecuteUserMapper.xml
index 4059c1b..0a7c436 100644
--- a/os-mes/src/main/resources/mapper/mes/prod/ProdPlanExecuteUserMapper.xml
+++ b/os-mes/src/main/resources/mapper/mes/prod/ProdPlanExecuteUserMapper.xml
@@ -21,6 +21,12 @@
+
+
+
+
+
+
@@ -39,29 +45,35 @@
ppeu.updated_by,
ppeu.updated_time,
bsi.staff_name,
- bpl.product_line_name station_name
+ bsi.wage_coefficient,
+ bpl.product_line_name station_name,
+ pod.BeltRequiredLength,
+ pod.SulfurizationArea,
+ pod.FormingArea,
+ bsi.pass_word,
+ bsi.team_code
from prod_plan_execute_user ppeu
left join base_staff_info bsi on bsi.staff_id = ppeu.staff_id
left join base_product_line bpl on bpl.product_line_code = ppeu.station_code
+ left join prod_order_detail pod on ppeu.order_code = pod.SeqNo