Browse Source

重新生成工时表

master
陈裕财 4 years ago
parent
commit
d8cbcf9157
  1. 23
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java
  2. 19
      xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java
  3. 31
      xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java
  4. 16
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml

23
xm-core/src/main/java/com/xm/core/ctrl/XmTaskSbillController.java

@ -219,14 +219,15 @@ public class XmTaskSbillController {
BatchJoinToSbillVo batchJoinToSbillQuery=new BatchJoinToSbillVo();
batchJoinToSbillQuery.setUserTasks(batchJoinToSbill.getUserTasks());
List<XmTaskSbillDetail> details=xmTaskSbillDetailService.selectListByUserTasks(batchJoinToSbillQuery);
List<XmTaskSbillDetail> othSbillDetails=details.stream().filter(i->sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList());
List<XmTaskSbillDetail> sameSbillDetails=details.stream().filter(i->sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList());
List<XmTaskSbillDetail> othSbillDetails=details.stream().filter(i->!sbillDb.getId().equals(i.getSbillId())).collect(Collectors.toList());
for (XmTaskSbillDetail i : othSbillDetails) {
if(!"4".equals(i.getSstatus())){
return ResponseHelper.failed("user-task-exists-not-4",String.format("任务【%s】,人员【%s】存在未完成的结算单【%s】,暂时不允许发起结算。",i.getName(),i.getUsername(),i.getSbillId()));
return ResponseHelper.failed("user-task-exists-not-4",String.format("任务【%s】,人员【%s】存在未完成的结算单【%s】,暂时不允许发起结算。",i.getTaskName(),i.getUsername(),i.getSbillId()));
}
}
if(details!=null && details.size()>0){
for (XmTaskSbillDetail detail : details) {
if(sameSbillDetails!=null && sameSbillDetails.size()>0){
for (XmTaskSbillDetail detail : sameSbillDetails) {
//进行合并操作
for (Map<String, Object> toSetUserTask : toSetUserTasks) {
if(detail.getUserid().equals(toSetUserTask.get("userid")) && detail.getTaskId().equals(toSetUserTask.get("taskId"))){
@ -240,7 +241,7 @@ public class XmTaskSbillController {
List<XmTaskSbillDetail> canAdd=new ArrayList<>();
for (Map<String,Object> userTask : toSetUserTasks) {
XmTaskSbillDetail detail= BaseUtils.fromMap(userTask,XmTaskSbillDetail.class);
if(details.stream().filter(i->i.getTaskId().equals(detail.getTaskId()) && i.getUserid().equals(detail.getUserid())).findAny().isPresent()){
if(sameSbillDetails.stream().filter(i->i.getTaskId().equals(detail.getTaskId()) && i.getUserid().equals(detail.getUserid())).findAny().isPresent()){
continue;
}
detail.setId(this.xmTaskSbillDetailService.createKey("id"));
@ -249,10 +250,18 @@ public class XmTaskSbillController {
detail.setSbillId(batchJoinToSbill.getSbillId());
detail.setProjectId(projectId);
detail.setCtime(new Date());
this.xmTaskSbillDetailService.preCalcSamt(detail);
canAdd.add(detail);
}
this.xmTaskSbillService.batchJoinToSbill(canAdd,details);
for (XmTaskSbillDetail d : canAdd) {
List<XmTaskSbillDetail> othDetails=othSbillDetails.stream().filter(i->i.getTaskId().equals(d.getTaskId()) && i.getUserid().equals(d.getUserid())).collect(Collectors.toList());
BigDecimal tactAt=BigDecimal.ZERO;
for (XmTaskSbillDetail othDetail : othDetails) {
tactAt=tactAt.add(othDetail.getAmt());
}
d.setTactAt(tactAt);
this.xmTaskSbillDetailService.preCalcSamt(d);
}
this.xmTaskSbillService.batchJoinToSbill(canAdd,sameSbillDetails);
}catch (BizException e) {

19
xm-core/src/main/java/com/xm/core/entity/XmTaskSbillDetail.java

@ -8,9 +8,9 @@ import java.math.BigDecimal;
/**
* 组织 com 顶级模块 xm 大模块 core 小模块 <br>
* 实体 XmTaskSbillDetail所有属性名: <br>
* userid,username,ctime,taskId,bizDate,remark,id,sbillId,stime,sstatus,amt,samt,workload,projectId,sworkload,bizMonth,budgetAt,budgetWorkload,initWorkload,quoteAt,quoteWorkload,sschemel,uniPrice,qendTime,qstartTime,actEndTime,actStartTime,oshare,shareFee,sfee,sfeeRate,cpId,cpName,cpType,distUserid,distUsername,shareKey,taskOut,crowd,othFee,feeRemark,tactAt;<br>
* userid,username,ctime,taskId,bizDate,remark,id,sbillId,stime,sstatus,amt,samt,workload,projectId,sworkload,bizMonth,budgetAt,budgetWorkload,initWorkload,quoteAt,quoteWorkload,sschemel,uniPrice,qendTime,qstartTime,actEndTime,actStartTime,oshare,shareFee,sfee,sfeeRate,cpId,cpName,cpType,distUserid,distUsername,shareKey,taskOut,crowd,othFee,feeRemark,tactAt,taskName;<br>
* xm_task_sbill_detail 工时登记表的所有字段名: <br>
* userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at;<br>
* userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at,task_name;<br>
* 当前主键(包括多主键):<br>
* id;<br>
*/
@ -145,6 +145,9 @@ public class XmTaskSbillDetail implements java.io.Serializable {
@ApiModelProperty(notes="该任务在本次结算前已结算的金额",allowEmptyValue=true,example="",allowableValues="")
BigDecimal tactAt;
@ApiModelProperty(notes="任务名称",allowEmptyValue=true,example="",allowableValues="")
String taskName;
/**主键**/
public XmTaskSbillDetail(String id) {
@ -407,6 +410,12 @@ public class XmTaskSbillDetail implements java.io.Serializable {
public void setTactAt(BigDecimal tactAt) {
this.tactAt = tactAt;
}
/**
* 任务名称
**/
public void setTaskName(String taskName) {
this.taskName = taskName;
}
/**
* 员工编号
@ -660,5 +669,11 @@ public class XmTaskSbillDetail implements java.io.Serializable {
public BigDecimal getTactAt() {
return this.tactAt;
}
/**
* 任务名称
**/
public String getTaskName() {
return this.taskName;
}
}

31
xm-core/src/main/java/com/xm/core/service/XmTaskSbillDetailService.java

@ -66,28 +66,39 @@ public class XmTaskSbillDetailService extends BaseService {
*/
public void preCalcSamt(XmTaskSbillDetail detail) {
if(detail.getQuoteAt()!=null){
detail.setAmt(detail.getQuoteAt());
if(detail.getTactAt()!=null){
detail.setAmt(detail.getQuoteAt().subtract(detail.getTactAt()));
}else{
detail.setAmt(detail.getQuoteAt());
}
if(detail.getAmt().compareTo(BigDecimal.ZERO)==0){
detail.setSamt(BigDecimal.ZERO);
return;
}
}else{
detail.setAmt(BigDecimal.ZERO);
detail.setSamt(BigDecimal.ZERO);
return;
}
if("1".equals(detail.getOshare()) && detail.getShareFee()!=null && detail.getShareFee().compareTo(BigDecimal.ZERO)>0 ){
}else{
if("0".equals(detail.getOshare()) || detail.getShareFee()==null || detail.getShareFee().compareTo(BigDecimal.ZERO)<=0 ){
detail.setShareFee(BigDecimal.ZERO);
}
if(detail.getSfeeRate()!=null && detail.getSfeeRate()>0){
if(detail.getAmt()!=null){
detail.setSfee(detail.getAmt().multiply(BigDecimal.valueOf(detail.getSfeeRate()/100)));
}else{
detail.setSfee(BigDecimal.ZERO);
}
detail.setSfee(detail.getAmt().multiply(BigDecimal.valueOf(detail.getSfeeRate()/100)));
}else{
detail.setSfee(BigDecimal.ZERO);
}
if(detail.getOthFee()==null){
detail.setOthFee(BigDecimal.ZERO);
}else if(detail.getOthFee().compareTo(BigDecimal.ZERO)<0){
detail.setOthFee(BigDecimal.ZERO);
}
detail.setSamt(detail.getAmt().subtract(detail.getShareFee()).subtract(detail.getSfee()).subtract(detail.getOthFee()));
if(detail.getTactAt()!=null && detail.getTactAt().compareTo(BigDecimal.ZERO)>0){
detail.setSamt(detail.getAmt().subtract(detail.getSfee()).subtract(detail.getOthFee()));
}else{
detail.setSamt(detail.getAmt().subtract(detail.getShareFee()).subtract(detail.getSfee()).subtract(detail.getOthFee()));
}
}
}

16
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskSbillDetailMapper.xml

@ -16,7 +16,9 @@
<select id="selectListByUserTasks" parameterType="com.xm.core.vo.BatchJoinToSbillVo" resultType="com.xm.core.entity.XmTaskSbillDetail">
select * from xm_task_sbill_detail res
<where>
and res.sbill_id=#{sbillId}
<if test="sbillId!=null and sbillId!=''">
and res.sbill_id=#{sbillId}
</if>
and (res.userid,res.task_id) in
<foreach collection="userTasks" item="item" index="index" open="(" separator="," close=")" >
( #{item.userid},#{item.taskId})
@ -76,7 +78,7 @@
insert into xm_task_sbill_detail(
<include refid="columns"/>
) values (
#{userid},#{username},#{ctime},#{taskId},#{bizDate},#{remark},#{id},#{sbillId},#{stime},#{sstatus},#{amt},#{samt},#{workload},#{projectId},#{sworkload},#{bizMonth},#{budgetAt},#{budgetWorkload},#{initWorkload},#{quoteAt},#{quoteWorkload},#{sschemel},#{uniPrice},#{qendTime},#{qstartTime},#{actEndTime},#{actStartTime},#{oshare},#{shareFee},#{sfee},#{sfeeRate},#{cpId},#{cpName},#{cpType},#{distUserid},#{distUsername},#{shareKey},#{taskOut},#{crowd},#{othFee},#{feeRemark},#{tactAt}
#{userid},#{username},#{ctime},#{taskId},#{bizDate},#{remark},#{id},#{sbillId},#{stime},#{sstatus},#{amt},#{samt},#{workload},#{projectId},#{sworkload},#{bizMonth},#{budgetAt},#{budgetWorkload},#{initWorkload},#{quoteAt},#{quoteWorkload},#{sschemel},#{uniPrice},#{qendTime},#{qstartTime},#{actEndTime},#{actStartTime},#{oshare},#{shareFee},#{sfee},#{sfeeRate},#{cpId},#{cpName},#{cpType},#{distUserid},#{distUsername},#{shareKey},#{taskOut},#{crowd},#{othFee},#{feeRemark},#{tactAt},#{taskName}
)
</insert>
@ -151,7 +153,7 @@
<!--sql片段 列-->
<sql id="columns">
userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at
userid,username,ctime,task_id,biz_date,remark,id,sbill_id,stime,sstatus,amt,samt,workload,project_id,sworkload,biz_month,budget_at,budget_workload,init_workload,quote_at,quote_workload,sschemel,uni_price,qend_time,qstart_time,act_end_time,act_start_time,oshare,share_fee,sfee,sfee_rate,cp_id,cp_name,cp_type,dist_userid,dist_username,share_key,task_out,crowd,oth_fee,fee_remark,tact_at,task_name
</sql>
<!--sql片段 动态条件 YYYY-MM-DD HH24:MI:SS-->
@ -198,6 +200,7 @@
<if test="othFee != null and othFee != ''"> and res.oth_fee = #{othFee} </if>
<if test="feeRemark != null and feeRemark != ''"> and res.fee_remark = #{feeRemark} </if>
<if test="tactAt != null and tactAt != ''"> and res.tact_at = #{tactAt} </if>
<if test="taskName != null and taskName != ''"> and res.task_name = #{taskName} </if>
</sql>
<!--sql片段 更新字段 -->
<sql id="set">
@ -241,7 +244,8 @@
crowd = #{crowd},
oth_fee = #{othFee},
fee_remark = #{feeRemark},
tact_at = #{tactAt}
tact_at = #{tactAt},
task_name = #{taskName}
</sql>
<sql id="someFieldSet">
<if test="userid != null and userid != ''"> userid = #{userid}, </if>
@ -285,6 +289,7 @@
<if test="othFee != null and othFee != ''"> oth_fee = #{othFee}, </if>
<if test="feeRemark != null and feeRemark != ''"> fee_remark = #{feeRemark}, </if>
<if test="tactAt != null and tactAt != ''"> tact_at = #{tactAt}, </if>
<if test="taskName != null and taskName != ''"> task_name = #{taskName}, </if>
</sql>
<!--sql片段 批量更新 -->
<sql id="batchSet">
@ -328,6 +333,7 @@
crowd = #{item.crowd},
oth_fee = #{item.othFee},
fee_remark = #{item.feeRemark},
tact_at = #{item.tactAt}
tact_at = #{item.tactAt},
task_name = #{item.taskName}
</sql>
</mapper>
Loading…
Cancel
Save