From 736d6e18ed21c7649831bd8704379a055dfd8e92 Mon Sep 17 00:00:00 2001 From: yinq Date: Thu, 4 Jul 2024 10:28:35 +0800 Subject: [PATCH] =?UTF-8?q?change=20-=20=E9=80=9A=E8=BF=87=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=94=9F=E6=88=90=E5=91=98=E5=B7=A5=E5=B7=A5=E8=B5=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../os/common/utils/uuid/PlanCodeUtils.java | 27 +++++ .../api/service/impl/ERPPortServiceImpl.java | 11 ++ .../RecordStaffSalaryController.java | 13 +++ .../mes/record/domain/RecordStaffSalary.java | 93 +++++++++++++-- .../service/IRecordStaffSalaryService.java | 7 ++ .../impl/RecordStaffSalaryServiceImpl.java | 107 ++++++++++++++++++ .../mapper/mes/prod/ProdOrderInfoMapper.xml | 3 + .../mes/record/RecordStaffSalaryMapper.xml | 14 ++- 8 files changed, 262 insertions(+), 13 deletions(-) diff --git a/os-common/src/main/java/com/os/common/utils/uuid/PlanCodeUtils.java b/os-common/src/main/java/com/os/common/utils/uuid/PlanCodeUtils.java index 53f30b4..2414d94 100644 --- a/os-common/src/main/java/com/os/common/utils/uuid/PlanCodeUtils.java +++ b/os-common/src/main/java/com/os/common/utils/uuid/PlanCodeUtils.java @@ -53,5 +53,32 @@ public class PlanCodeUtils { return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000; } + /** + * 工资生产任务编号 + * @return + */ + public static String getTaskCode() { + LocalDate date = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMMdd"); + String format = "task_code:" + date.format(formatter); + //以当日日期作为key + if (!SpringUtils.getBean(RedisCache.class).hasKey(format)) { + SpringUtils.getBean(RedisCache.class).setCacheObject(format, 1); + SpringUtils.getBean(RedisCache.class).expire(format, getSecondsNextEarlyMorning(), TimeUnit.SECONDS); + } else { + //获取当前的value在+1 + Object cacheObject = SpringUtils.getBean(RedisCache.class).getCacheObject(format); + String value = String.valueOf(cacheObject); + Integer integer = Integer.parseInt(value) + 1; + SpringUtils.getBean(RedisCache.class).setCacheObject(format, integer); + SpringUtils.getBean(RedisCache.class).expire(format, getSecondsNextEarlyMorning(), TimeUnit.SECONDS); + } + Object cacheObject = SpringUtils.getBean(RedisCache.class).getCacheObject(format); + //转成string在转成int + String code = String.format("%04d", Integer.valueOf(String.valueOf(cacheObject))); + + return "T" + date.format(formatter) + code; + } + } diff --git a/os-mes/src/main/java/com/os/mes/api/service/impl/ERPPortServiceImpl.java b/os-mes/src/main/java/com/os/mes/api/service/impl/ERPPortServiceImpl.java index a5f599f..9906846 100644 --- a/os-mes/src/main/java/com/os/mes/api/service/impl/ERPPortServiceImpl.java +++ b/os-mes/src/main/java/com/os/mes/api/service/impl/ERPPortServiceImpl.java @@ -3,6 +3,7 @@ package com.os.mes.api.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.os.common.utils.StringUtils; import com.os.mes.api.domain.ERPParamDto; import com.os.mes.api.domain.LatestSalary; import com.os.mes.api.domain.RecordData; @@ -121,6 +122,16 @@ public class ERPPortServiceImpl implements IERPPortService { LatestSalary latestSalary = null; String requestParam = null; String result = null; + + if (StringUtils.isEmpty(paramDto.getAppCode())){ + paramDto.setAppCode(ERPConstants.salaryAppCode); + } + if (StringUtils.isEmpty(paramDto.getController())){ + paramDto.setController(ERPConstants.salaryController); + } + if (StringUtils.isEmpty(paramDto.getActionName())){ + paramDto.setActionName(ERPConstants.salaryActionName); + } try { // 创建ObjectMapper实例 对象转JSON字符串 ObjectMapper objectMapper = new ObjectMapper(); diff --git a/os-mes/src/main/java/com/os/mes/record/controller/RecordStaffSalaryController.java b/os-mes/src/main/java/com/os/mes/record/controller/RecordStaffSalaryController.java index 84b698b..33cd8ab 100644 --- a/os-mes/src/main/java/com/os/mes/record/controller/RecordStaffSalaryController.java +++ b/os-mes/src/main/java/com/os/mes/record/controller/RecordStaffSalaryController.java @@ -97,4 +97,17 @@ public class RecordStaffSalaryController extends BaseController { public AjaxResult remove(@PathVariable Long[] objIds) { return toAjax(recordStaffSalaryService.deleteRecordStaffSalaryByObjIds(objIds)); } + + + /** + * 生成班组员工工资 + * @param recordStaffSalary + * @return + */ + @GetMapping("/selectTeamEmployeesWages") + public AjaxResult selectTeamEmployeesWages(RecordStaffSalary recordStaffSalary) { + List list = recordStaffSalaryService.selectTeamEmployeesWages(recordStaffSalary); + return success(list); + } + } diff --git a/os-mes/src/main/java/com/os/mes/record/domain/RecordStaffSalary.java b/os-mes/src/main/java/com/os/mes/record/domain/RecordStaffSalary.java index c9df660..6f9609b 100644 --- a/os-mes/src/main/java/com/os/mes/record/domain/RecordStaffSalary.java +++ b/os-mes/src/main/java/com/os/mes/record/domain/RecordStaffSalary.java @@ -1,5 +1,6 @@ package com.os.mes.record.domain; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -29,8 +30,8 @@ public class RecordStaffSalary extends BaseEntity private String groupId; /** 事件日期 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "事件日期", width = 30, dateFormat = "yyyy-MM-dd") private Date eventDate; /** 薪资类别 */ @@ -43,7 +44,7 @@ public class RecordStaffSalary extends BaseEntity /** 收入金额 */ @Excel(name = "收入金额") - private Long revenueAmount; + private BigDecimal revenueAmount; /** 收入理由 */ @Excel(name = "收入理由") @@ -55,7 +56,7 @@ public class RecordStaffSalary extends BaseEntity /** 扣罚金额 */ @Excel(name = "扣罚金额") - private Long fineAmount; + private BigDecimal fineAmount; /** 扣罚理由 */ @Excel(name = "扣罚理由") @@ -67,9 +68,77 @@ public class RecordStaffSalary extends BaseEntity /** 工资系数 */ @Excel(name = "工资系数") - private Long salaryCoefficient; + private BigDecimal salaryCoefficient; - public void setObjId(Long objId) + /** + * 员工名称 + */ + @Excel(name = "员工名称") + private String staffName; + + /** + * 员工卡号 + */ + @Excel(name = "员工卡号") + private String cardId; + + /** + * 班组名称 + */ + @Excel(name = "班组名称") + private String teamName; + + /** 开始日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开始日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date beginDate; + + /** 结束日期 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "结束日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date endDate; + + public Date getBeginDate() { + return beginDate; + } + + public void setBeginDate(Date beginDate) { + this.beginDate = beginDate; + } + + public Date getEndDate() { + return endDate; + } + + public void setEndDate(Date endDate) { + this.endDate = endDate; + } + + public String getStaffName() { + return staffName; + } + + public void setStaffName(String staffName) { + this.staffName = staffName; + } + + public String getCardId() { + return cardId; + } + + public void setCardId(String cardId) { + this.cardId = cardId; + } + + public String getTeamName() { + return teamName; + } + + public void setTeamName(String teamName) { + this.teamName = teamName; + } + + public void setObjId(Long objId) { this.objId = objId; } @@ -123,12 +192,12 @@ public class RecordStaffSalary extends BaseEntity { return revenueClass; } - public void setRevenueAmount(Long revenueAmount) + public void setRevenueAmount(BigDecimal revenueAmount) { this.revenueAmount = revenueAmount; } - public Long getRevenueAmount() + public BigDecimal getRevenueAmount() { return revenueAmount; } @@ -150,12 +219,12 @@ public class RecordStaffSalary extends BaseEntity { return fineClass; } - public void setFineAmount(Long fineAmount) + public void setFineAmount(BigDecimal fineAmount) { this.fineAmount = fineAmount; } - public Long getFineAmount() + public BigDecimal getFineAmount() { return fineAmount; } @@ -177,12 +246,12 @@ public class RecordStaffSalary extends BaseEntity { return taskCode; } - public void setSalaryCoefficient(Long salaryCoefficient) + public void setSalaryCoefficient(BigDecimal salaryCoefficient) { this.salaryCoefficient = salaryCoefficient; } - public Long getSalaryCoefficient() + public BigDecimal getSalaryCoefficient() { return salaryCoefficient; } diff --git a/os-mes/src/main/java/com/os/mes/record/service/IRecordStaffSalaryService.java b/os-mes/src/main/java/com/os/mes/record/service/IRecordStaffSalaryService.java index 34f853d..6617ce2 100644 --- a/os-mes/src/main/java/com/os/mes/record/service/IRecordStaffSalaryService.java +++ b/os-mes/src/main/java/com/os/mes/record/service/IRecordStaffSalaryService.java @@ -58,4 +58,11 @@ public interface IRecordStaffSalaryService { * @return 结果 */ public int deleteRecordStaffSalaryByObjId(Long objId); + + /** + * 生成班组员工工资 + * @param recordStaffSalary + * @return + */ + List selectTeamEmployeesWages(RecordStaffSalary recordStaffSalary); } 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 b602280..8333b53 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 @@ -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 selectTeamEmployeesWages(RecordStaffSalary recordStaffSalary) { + List result = new ArrayList<>(); + BaseTeamMembers members = new BaseTeamMembers(); + members.setTeamCode(recordStaffSalary.getGroupId()); + List membersList = baseTeamMembersMapper.selectBaseTeamMembersList(members); + //调用最新工资系数接口 + LatestSalary salaryData = portService.getERPLatestSalaryData(new ERPParamDto()); + + ProdOrderInfo orderInfo = new ProdOrderInfo(); + orderInfo.setParams(recordStaffSalary.getParams()); + List 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 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; + } + } diff --git a/os-mes/src/main/resources/mapper/mes/prod/ProdOrderInfoMapper.xml b/os-mes/src/main/resources/mapper/mes/prod/ProdOrderInfoMapper.xml index e32497c..f645311 100644 --- a/os-mes/src/main/resources/mapper/mes/prod/ProdOrderInfoMapper.xml +++ b/os-mes/src/main/resources/mapper/mes/prod/ProdOrderInfoMapper.xml @@ -245,6 +245,9 @@ and poi.created_time = #{createdTime} and poi.updated_by = #{updatedBy} and poi.updated_time = #{updatedTime} + + and pod.OrderDate between #{params.beginOrderDate} and #{params.endOrderDate} + diff --git a/os-mes/src/main/resources/mapper/mes/record/RecordStaffSalaryMapper.xml b/os-mes/src/main/resources/mapper/mes/record/RecordStaffSalaryMapper.xml index 779010c..f3dc41e 100644 --- a/os-mes/src/main/resources/mapper/mes/record/RecordStaffSalaryMapper.xml +++ b/os-mes/src/main/resources/mapper/mes/record/RecordStaffSalaryMapper.xml @@ -19,6 +19,8 @@ + + @@ -35,7 +37,9 @@ fine_reason, create_time, task_code, - salary_coefficient + salary_coefficient, + begin_date, + end_date from record_staff_salary @@ -56,6 +60,8 @@ and fine_reason = #{fineReason} and task_code = #{taskCode} and salary_coefficient = #{salaryCoefficient} + and begin_date = #{beginDate} + and end_date = #{endDate} @@ -80,6 +86,8 @@ create_time, task_code, salary_coefficient, + begin_date, + end_date, #{idCard}, @@ -95,6 +103,8 @@ #{createTime}, #{taskCode}, #{salaryCoefficient}, + #{beginDate}, + #{endDate}, @@ -114,6 +124,8 @@ create_time = #{createTime}, task_code = #{taskCode}, salary_coefficient = #{salaryCoefficient}, + begin_date = #{beginDate}, + end_date = #{endDate}, where obj_id = #{objId}