浏览代码

员工排班信息

wukai 6 月之前
父节点
当前提交
f95a185bdf
共有 25 个文件被更改,包括 1978 次插入0 次删除
  1. 113 0
      jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpCalcController.java
  2. 113 0
      jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpConfigController.java
  3. 113 0
      jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpController.java
  4. 113 0
      jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpDetailController.java
  5. 47 0
      jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmp.java
  6. 92 0
      jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpCalc.java
  7. 39 0
      jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpConfig.java
  8. 94 0
      jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpDetail.java
  9. 62 0
      jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpCalcMapper.java
  10. 62 0
      jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpConfigMapper.java
  11. 62 0
      jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpDetailMapper.java
  12. 90 0
      jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpMapper.java
  13. 60 0
      jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpCalcService.java
  14. 60 0
      jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpConfigService.java
  15. 60 0
      jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpDetailService.java
  16. 60 0
      jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpService.java
  17. 86 0
      jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpCalcServiceImpl.java
  18. 86 0
      jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpConfigServiceImpl.java
  19. 86 0
      jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpDetailServiceImpl.java
  20. 134 0
      jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpServiceImpl.java
  21. 111 0
      jjt-biz/src/main/resources/mapper/emp/TwinEmpCalcMapper.xml
  22. 61 0
      jjt-biz/src/main/resources/mapper/emp/TwinEmpConfigMapper.xml
  23. 76 0
      jjt-biz/src/main/resources/mapper/emp/TwinEmpDetailMapper.xml
  24. 94 0
      jjt-biz/src/main/resources/mapper/emp/TwinEmpMapper.xml
  25. 4 0
      jjt-common/src/main/java/com/jjt/common/utils/DateUtils.java

+ 113 - 0
jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpCalcController.java

@@ -0,0 +1,113 @@
+package com.jjt.emp.controller;
+
+import java.util.List;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.jjt.common.annotation.Log;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.AjaxResult;
+import com.jjt.common.enums.BusinessType;
+import com.jjt.emp.domain.TwinEmpCalc;
+import com.jjt.emp.service.ITwinEmpCalcService;
+import com.jjt.common.utils.poi.ExcelUtil;
+import com.jjt.common.core.page.TableDataInfo;
+
+/**
+ * 员工产量统计Controller
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Api(tags="员工产量统计")
+@RestController
+@RequestMapping("/emp/empCalc")
+public class TwinEmpCalcController extends BaseController{
+    @Resource
+    private ITwinEmpCalcService twinEmpCalcService;
+
+    /**
+     * 查询员工产量统计列表
+     */
+    @ApiOperation("查询员工产量统计列表")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TwinEmpCalc twinEmpCalc)
+    {
+        startPage();
+        List<TwinEmpCalc> list = twinEmpCalcService.selectTwinEmpCalcList(twinEmpCalc);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工产量统计列表
+     */
+    @ApiOperation("导出员工产量统计列表")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:export')")
+    @Log(title = "员工产量统计", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TwinEmpCalc twinEmpCalc)
+    {
+        List<TwinEmpCalc> list = twinEmpCalcService.selectTwinEmpCalcList(twinEmpCalc);
+        ExcelUtil<TwinEmpCalc> util = new ExcelUtil<TwinEmpCalc>(TwinEmpCalc.class);
+        util.exportExcel(response, list, "员工产量统计数据");
+    }
+
+    /**
+     * 获取员工产量统计详细信息
+     */
+    @ApiOperation("获取员工产量统计详细信息")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:query')")
+    @GetMapping(value = "/{calcId}")
+    public AjaxResult getInfo(@PathVariable("calcId") Long calcId)
+    {
+        return success(twinEmpCalcService.selectTwinEmpCalcByCalcId(calcId));
+    }
+
+    /**
+     * 新增员工产量统计
+     */
+    @ApiOperation("新增员工产量统计")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:add')")
+    @Log(title = "员工产量统计", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TwinEmpCalc twinEmpCalc)
+    {
+        return toAjax(twinEmpCalcService.insertTwinEmpCalc(twinEmpCalc));
+    }
+
+    /**
+     * 修改员工产量统计
+     */
+    @ApiOperation("修改员工产量统计")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:edit')")
+    @Log(title = "员工产量统计", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TwinEmpCalc twinEmpCalc)
+    {
+        return toAjax(twinEmpCalcService.updateTwinEmpCalc(twinEmpCalc));
+    }
+
+    /**
+     * 删除员工产量统计
+     */
+    @ApiOperation("删除员工产量统计")
+    @PreAuthorize("@ss.hasPermi('emp:empCalc:remove')")
+    @Log(title = "员工产量统计", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{calcIds}")
+    public AjaxResult remove(@PathVariable Long[] calcIds)
+    {
+        return toAjax(twinEmpCalcService.deleteTwinEmpCalcByCalcIds(calcIds));
+    }
+}

+ 113 - 0
jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpConfigController.java

@@ -0,0 +1,113 @@
+package com.jjt.emp.controller;
+
+import java.util.List;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.jjt.common.annotation.Log;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.AjaxResult;
+import com.jjt.common.enums.BusinessType;
+import com.jjt.emp.domain.TwinEmpConfig;
+import com.jjt.emp.service.ITwinEmpConfigService;
+import com.jjt.common.utils.poi.ExcelUtil;
+import com.jjt.common.core.page.TableDataInfo;
+
+/**
+ * 密度价格配置Controller
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Api(tags="密度价格配置")
+@RestController
+@RequestMapping("/emp/empConfig")
+public class TwinEmpConfigController extends BaseController{
+    @Resource
+    private ITwinEmpConfigService twinEmpConfigService;
+
+    /**
+     * 查询密度价格配置列表
+     */
+    @ApiOperation("查询密度价格配置列表")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TwinEmpConfig twinEmpConfig)
+    {
+        startPage();
+        List<TwinEmpConfig> list = twinEmpConfigService.selectTwinEmpConfigList(twinEmpConfig);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出密度价格配置列表
+     */
+    @ApiOperation("导出密度价格配置列表")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:export')")
+    @Log(title = "密度价格配置", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TwinEmpConfig twinEmpConfig)
+    {
+        List<TwinEmpConfig> list = twinEmpConfigService.selectTwinEmpConfigList(twinEmpConfig);
+        ExcelUtil<TwinEmpConfig> util = new ExcelUtil<TwinEmpConfig>(TwinEmpConfig.class);
+        util.exportExcel(response, list, "密度价格配置数据");
+    }
+
+    /**
+     * 获取密度价格配置详细信息
+     */
+    @ApiOperation("获取密度价格配置详细信息")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:query')")
+    @GetMapping(value = "/{configId}")
+    public AjaxResult getInfo(@PathVariable("configId") Long configId)
+    {
+        return success(twinEmpConfigService.selectTwinEmpConfigByConfigId(configId));
+    }
+
+    /**
+     * 新增密度价格配置
+     */
+    @ApiOperation("新增密度价格配置")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:add')")
+    @Log(title = "密度价格配置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TwinEmpConfig twinEmpConfig)
+    {
+        return toAjax(twinEmpConfigService.insertTwinEmpConfig(twinEmpConfig));
+    }
+
+    /**
+     * 修改密度价格配置
+     */
+    @ApiOperation("修改密度价格配置")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:edit')")
+    @Log(title = "密度价格配置", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TwinEmpConfig twinEmpConfig)
+    {
+        return toAjax(twinEmpConfigService.updateTwinEmpConfig(twinEmpConfig));
+    }
+
+    /**
+     * 删除密度价格配置
+     */
+    @ApiOperation("删除密度价格配置")
+    @PreAuthorize("@ss.hasPermi('emp:empConfig:remove')")
+    @Log(title = "密度价格配置", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{configIds}")
+    public AjaxResult remove(@PathVariable Long[] configIds)
+    {
+        return toAjax(twinEmpConfigService.deleteTwinEmpConfigByConfigIds(configIds));
+    }
+}

+ 113 - 0
jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpController.java

@@ -0,0 +1,113 @@
+package com.jjt.emp.controller;
+
+import com.jjt.common.annotation.Log;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.AjaxResult;
+import com.jjt.common.core.page.TableDataInfo;
+import com.jjt.common.enums.BusinessType;
+import com.jjt.common.utils.DateUtils;
+import com.jjt.common.utils.StringUtils;
+import com.jjt.common.utils.poi.ExcelUtil;
+import com.jjt.emp.domain.TwinEmp;
+import com.jjt.emp.service.ITwinEmpService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 员工排班Controller
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Api(tags = "员工排班")
+@RestController
+@RequestMapping("/emp/emp")
+public class TwinEmpController extends BaseController {
+    @Resource
+    private ITwinEmpService twinEmpService;
+
+    /**
+     * 查询员工排班列表
+     */
+    @ApiOperation("查询员工排班列表")
+    @PreAuthorize("@ss.hasPermi('emp:emp:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TwinEmp twinEmp) {
+        startPage();
+        List<TwinEmp> list = twinEmpService.selectTwinEmpList(twinEmp);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工排班列表
+     */
+    @ApiOperation("导出员工排班列表")
+    @PreAuthorize("@ss.hasPermi('emp:emp:export')")
+    @Log(title = "员工排班", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TwinEmp twinEmp) {
+        List<TwinEmp> list = twinEmpService.selectTwinEmpList(twinEmp);
+        ExcelUtil<TwinEmp> util = new ExcelUtil<TwinEmp>(TwinEmp.class);
+        util.exportExcel(response, list, "员工排班数据");
+    }
+
+    /**
+     * 获取员工排班详细信息
+     */
+    @ApiOperation("获取员工排班详细信息")
+    @PreAuthorize("@ss.hasPermi('emp:emp:query')")
+    @GetMapping(value = "/{empId}")
+    public AjaxResult getInfo(@PathVariable("empId") Long empId) {
+        return success(twinEmpService.selectTwinEmpByEmpId(empId));
+    }
+
+    /**
+     * 新增员工排班
+     */
+    @ApiOperation("新增员工排班")
+    @PreAuthorize("@ss.hasPermi('emp:emp:add')")
+    @Log(title = "员工排班", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TwinEmp twinEmp) {
+        TwinEmp search = new TwinEmp();
+        search.setEmpDate(twinEmp.getEmpDate());
+        List list = twinEmpService.selectTwinEmpList(search);
+        if (list.size() > 0) {
+            return AjaxResult.error("已经有\"" + DateUtils.parseDateToStr(twinEmp.getEmpDate()) + "\"排班,请到对应排班日期修改");
+        } else {
+            if (StringUtils.isNull(twinEmp.getTwinEmpDetailListA()) || StringUtils.isNull(twinEmp.getTwinEmpDetailListB())) {
+                return AjaxResult.error("AB班员工排班明细不能为空");
+            } else {
+                return toAjax(twinEmpService.insertTwinEmp(twinEmp));
+            }
+        }
+    }
+
+    /**
+     * 修改员工排班
+     */
+    @ApiOperation("修改员工排班")
+    @PreAuthorize("@ss.hasPermi('emp:emp:edit')")
+    @Log(title = "员工排班", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TwinEmp twinEmp) {
+        return toAjax(twinEmpService.updateTwinEmp(twinEmp));
+    }
+
+    /**
+     * 删除员工排班
+     */
+    @ApiOperation("删除员工排班")
+    @PreAuthorize("@ss.hasPermi('emp:emp:remove')")
+    @Log(title = "员工排班", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{empIds}")
+    public AjaxResult remove(@PathVariable Long[] empIds) {
+        return toAjax(twinEmpService.deleteTwinEmpByEmpIds(empIds));
+    }
+}

+ 113 - 0
jjt-biz/src/main/java/com/jjt/emp/controller/TwinEmpDetailController.java

@@ -0,0 +1,113 @@
+package com.jjt.emp.controller;
+
+import java.util.List;
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.jjt.common.annotation.Log;
+import com.jjt.common.core.controller.BaseController;
+import com.jjt.common.core.domain.AjaxResult;
+import com.jjt.common.enums.BusinessType;
+import com.jjt.emp.domain.TwinEmpDetail;
+import com.jjt.emp.service.ITwinEmpDetailService;
+import com.jjt.common.utils.poi.ExcelUtil;
+import com.jjt.common.core.page.TableDataInfo;
+
+/**
+ * 员工排班明细Controller
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Api(tags="员工排班明细")
+@RestController
+@RequestMapping("/emp/empDetail")
+public class TwinEmpDetailController extends BaseController{
+    @Resource
+    private ITwinEmpDetailService twinEmpDetailService;
+
+    /**
+     * 查询员工排班明细列表
+     */
+    @ApiOperation("查询员工排班明细列表")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TwinEmpDetail twinEmpDetail)
+    {
+        startPage();
+        List<TwinEmpDetail> list = twinEmpDetailService.selectTwinEmpDetailList(twinEmpDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出员工排班明细列表
+     */
+    @ApiOperation("导出员工排班明细列表")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:export')")
+    @Log(title = "员工排班明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TwinEmpDetail twinEmpDetail)
+    {
+        List<TwinEmpDetail> list = twinEmpDetailService.selectTwinEmpDetailList(twinEmpDetail);
+        ExcelUtil<TwinEmpDetail> util = new ExcelUtil<TwinEmpDetail>(TwinEmpDetail.class);
+        util.exportExcel(response, list, "员工排班明细数据");
+    }
+
+    /**
+     * 获取员工排班明细详细信息
+     */
+    @ApiOperation("获取员工排班明细详细信息")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:query')")
+    @GetMapping(value = "/{detailId}")
+    public AjaxResult getInfo(@PathVariable("detailId") Long detailId)
+    {
+        return success(twinEmpDetailService.selectTwinEmpDetailByDetailId(detailId));
+    }
+
+    /**
+     * 新增员工排班明细
+     */
+    @ApiOperation("新增员工排班明细")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:add')")
+    @Log(title = "员工排班明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TwinEmpDetail twinEmpDetail)
+    {
+        return toAjax(twinEmpDetailService.insertTwinEmpDetail(twinEmpDetail));
+    }
+
+    /**
+     * 修改员工排班明细
+     */
+    @ApiOperation("修改员工排班明细")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:edit')")
+    @Log(title = "员工排班明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TwinEmpDetail twinEmpDetail)
+    {
+        return toAjax(twinEmpDetailService.updateTwinEmpDetail(twinEmpDetail));
+    }
+
+    /**
+     * 删除员工排班明细
+     */
+    @ApiOperation("删除员工排班明细")
+    @PreAuthorize("@ss.hasPermi('emp:empDetail:remove')")
+    @Log(title = "员工排班明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{detailIds}")
+    public AjaxResult remove(@PathVariable Long[] detailIds)
+    {
+        return toAjax(twinEmpDetailService.deleteTwinEmpDetailByDetailIds(detailIds));
+    }
+}

+ 47 - 0
jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmp.java

@@ -0,0 +1,47 @@
+package com.jjt.emp.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jjt.common.annotation.Excel;
+import com.jjt.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 员工排班对象 TWIN_EMP
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@ApiModel(value = "TwinEmp", description = "员工排班")
+@Data
+public class TwinEmp extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 排班ID
+     */
+    @ApiModelProperty("排班ID")
+    @TableId
+    private Long empId;
+
+    /**
+     * 时间
+     */
+    @ApiModelProperty("时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date empDate;
+
+    /**
+     * 员工排班明细信息
+     */
+    private List<TwinEmpDetail> twinEmpDetailList;
+    private List<TwinEmpDetail> twinEmpDetailListA;
+    private List<TwinEmpDetail> twinEmpDetailListB;
+
+}

+ 92 - 0
jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpCalc.java

@@ -0,0 +1,92 @@
+package com.jjt.emp.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.jjt.common.annotation.Excel;
+import com.jjt.common.core.domain.BaseEntity;
+
+/**
+ * 员工产量统计对象 TWIN_EMP_CALC
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@ApiModel(value = "TwinEmpCalc", description = "员工产量统计")
+@Data
+public class TwinEmpCalc extends BaseEntity{
+    private static final long serialVersionUID = 1L;
+
+    /** 统计ID */
+    @ApiModelProperty("统计ID")
+    @TableId
+    private Long calcId;
+
+    /** 姓名 */
+    @ApiModelProperty("姓名")
+    @Excel(name = "姓名")
+    private String empName;
+
+    /** 时间 */
+    @ApiModelProperty("时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date empDate;
+
+    /** 班组 */
+    @ApiModelProperty("班组")
+    @Excel(name = "班组")
+    private String empTeam;
+
+    /** 机台号 */
+    @ApiModelProperty("机台号")
+    @Excel(name = "机台号")
+    private Long deviceId;
+
+    /** 稼动率 */
+    @ApiModelProperty("稼动率")
+    @Excel(name = "稼动率")
+    private BigDecimal efficiency;
+
+    /** 规格 */
+    @ApiModelProperty("规格")
+    @Excel(name = "规格")
+    private String spec;
+
+    /** 米克重 */
+    @ApiModelProperty("米克重")
+    @Excel(name = "米克重")
+    private Long mick;
+
+    /** 密度 */
+    @ApiModelProperty("密度")
+    @Excel(name = "密度")
+    private BigDecimal density;
+
+    /** 产量 */
+    @ApiModelProperty("产量")
+    @Excel(name = "产量")
+    private BigDecimal length;
+
+    /** 毛高 */
+    @ApiModelProperty("毛高")
+    @Excel(name = "毛高")
+    private BigDecimal height;
+
+    /** 单价 */
+    @ApiModelProperty("单价")
+    @Excel(name = "单价")
+    private BigDecimal price;
+
+    /** 总价 */
+    @ApiModelProperty("总价")
+    @Excel(name = "总价")
+    private BigDecimal totalPrice;
+
+}

+ 39 - 0
jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpConfig.java

@@ -0,0 +1,39 @@
+package com.jjt.emp.domain;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.jjt.common.annotation.Excel;
+import com.jjt.common.core.domain.BaseEntity;
+
+/**
+ * 密度价格配置对象 TWIN_EMP_CONFIG
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@ApiModel(value = "TwinEmpConfig", description = "密度价格配置")
+@Data
+public class TwinEmpConfig extends BaseEntity{
+    private static final long serialVersionUID = 1L;
+
+    /** 排班ID */
+    @ApiModelProperty("排班ID")
+    @TableId
+    private Long configId;
+
+    /** 密度 */
+    @ApiModelProperty("密度")
+    @Excel(name = "密度")
+    private BigDecimal density;
+
+    /** 单价 */
+    @ApiModelProperty("单价")
+    @Excel(name = "单价")
+    private BigDecimal price;
+
+}

+ 94 - 0
jjt-biz/src/main/java/com/jjt/emp/domain/TwinEmpDetail.java

@@ -0,0 +1,94 @@
+package com.jjt.emp.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.jjt.common.annotation.Excel;
+import com.jjt.common.core.domain.BaseEntity;
+
+/**
+ * 员工排班明细对象 TWIN_EMP_DETAIL
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public class TwinEmpDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 明细ID */
+    private Long detailId;
+
+    /** 排班ID */
+    @Excel(name = "排班ID")
+    private Long empId;
+
+    /** 姓名 */
+    @Excel(name = "姓名")
+    private String empName;
+
+    /** 班组 */
+    @Excel(name = "班组")
+    private String empTeam;
+
+    /** 机台号 */
+    @Excel(name = "机台号")
+    private String devices;
+
+    public void setDetailId(Long detailId)
+    {
+        this.detailId = detailId;
+    }
+
+    public Long getDetailId()
+    {
+        return detailId;
+    }
+    public void setEmpId(Long empId)
+    {
+        this.empId = empId;
+    }
+
+    public Long getEmpId()
+    {
+        return empId;
+    }
+    public void setEmpName(String empName)
+    {
+        this.empName = empName;
+    }
+
+    public String getEmpName()
+    {
+        return empName;
+    }
+    public void setEmpTeam(String empTeam)
+    {
+        this.empTeam = empTeam;
+    }
+
+    public String getEmpTeam()
+    {
+        return empTeam;
+    }
+    public void setDevices(String devices)
+    {
+        this.devices = devices;
+    }
+
+    public String getDevices()
+    {
+        return devices;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("detailId", getDetailId())
+            .append("empId", getEmpId())
+            .append("empName", getEmpName())
+            .append("empTeam", getEmpTeam())
+            .append("devices", getDevices())
+            .append("remark", getRemark())
+            .toString();
+    }
+}

+ 62 - 0
jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpCalcMapper.java

@@ -0,0 +1,62 @@
+package com.jjt.emp.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jjt.emp.domain.TwinEmpCalc;
+
+/**
+ * 员工产量统计Mapper接口
+ * 
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface TwinEmpCalcMapper extends BaseMapper<TwinEmpCalc>
+{
+    /**
+     * 查询员工产量统计
+     * 
+     * @param calcId 员工产量统计主键
+     * @return 员工产量统计
+     */
+    public TwinEmpCalc selectTwinEmpCalcByCalcId(Long calcId);
+
+    /**
+     * 查询员工产量统计列表
+     * 
+     * @param twinEmpCalc 员工产量统计
+     * @return 员工产量统计集合
+     */
+    public List<TwinEmpCalc> selectTwinEmpCalcList(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 新增员工产量统计
+     * 
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    public int insertTwinEmpCalc(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 修改员工产量统计
+     * 
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    public int updateTwinEmpCalc(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 删除员工产量统计
+     * 
+     * @param calcId 员工产量统计主键
+     * @return 结果
+     */
+    public int deleteTwinEmpCalcByCalcId(Long calcId);
+
+    /**
+     * 批量删除员工产量统计
+     * 
+     * @param calcIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpCalcByCalcIds(Long[] calcIds);
+}

+ 62 - 0
jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpConfigMapper.java

@@ -0,0 +1,62 @@
+package com.jjt.emp.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jjt.emp.domain.TwinEmpConfig;
+
+/**
+ * 密度价格配置Mapper接口
+ * 
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface TwinEmpConfigMapper extends BaseMapper<TwinEmpConfig>
+{
+    /**
+     * 查询密度价格配置
+     * 
+     * @param configId 密度价格配置主键
+     * @return 密度价格配置
+     */
+    public TwinEmpConfig selectTwinEmpConfigByConfigId(Long configId);
+
+    /**
+     * 查询密度价格配置列表
+     * 
+     * @param twinEmpConfig 密度价格配置
+     * @return 密度价格配置集合
+     */
+    public List<TwinEmpConfig> selectTwinEmpConfigList(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 新增密度价格配置
+     * 
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    public int insertTwinEmpConfig(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 修改密度价格配置
+     * 
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    public int updateTwinEmpConfig(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 删除密度价格配置
+     * 
+     * @param configId 密度价格配置主键
+     * @return 结果
+     */
+    public int deleteTwinEmpConfigByConfigId(Long configId);
+
+    /**
+     * 批量删除密度价格配置
+     * 
+     * @param configIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpConfigByConfigIds(Long[] configIds);
+}

+ 62 - 0
jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpDetailMapper.java

@@ -0,0 +1,62 @@
+package com.jjt.emp.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jjt.emp.domain.TwinEmpDetail;
+
+/**
+ * 员工排班明细Mapper接口
+ * 
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface TwinEmpDetailMapper extends BaseMapper<TwinEmpDetail>
+{
+    /**
+     * 查询员工排班明细
+     * 
+     * @param detailId 员工排班明细主键
+     * @return 员工排班明细
+     */
+    public TwinEmpDetail selectTwinEmpDetailByDetailId(Long detailId);
+
+    /**
+     * 查询员工排班明细列表
+     * 
+     * @param twinEmpDetail 员工排班明细
+     * @return 员工排班明细集合
+     */
+    public List<TwinEmpDetail> selectTwinEmpDetailList(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 新增员工排班明细
+     * 
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    public int insertTwinEmpDetail(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 修改员工排班明细
+     * 
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    public int updateTwinEmpDetail(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 删除员工排班明细
+     * 
+     * @param detailId 员工排班明细主键
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByDetailId(Long detailId);
+
+    /**
+     * 批量删除员工排班明细
+     * 
+     * @param detailIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByDetailIds(Long[] detailIds);
+}

+ 90 - 0
jjt-biz/src/main/java/com/jjt/emp/mapper/TwinEmpMapper.java

@@ -0,0 +1,90 @@
+package com.jjt.emp.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jjt.emp.domain.TwinEmp;
+import com.jjt.emp.domain.TwinEmpDetail;
+import org.apache.ibatis.annotations.Options;
+
+/**
+ * 员工排班Mapper接口
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface TwinEmpMapper extends BaseMapper<TwinEmp>
+{
+    /**
+     * 查询员工排班
+     *
+     * @param empId 员工排班主键
+     * @return 员工排班
+     */
+    public TwinEmp selectTwinEmpByEmpId(Long empId);
+
+    /**
+     * 查询员工排班列表
+     *
+     * @param twinEmp 员工排班
+     * @return 员工排班集合
+     */
+    public List<TwinEmp> selectTwinEmpList(TwinEmp twinEmp);
+
+    /**
+     * 新增员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    @Options(useGeneratedKeys = true, keyProperty = "empId")
+    public int insertTwinEmp(TwinEmp twinEmp);
+
+    /**
+     * 修改员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    public int updateTwinEmp(TwinEmp twinEmp);
+
+    /**
+     * 删除员工排班
+     *
+     * @param empId 员工排班主键
+     * @return 结果
+     */
+    public int deleteTwinEmpByEmpId(Long empId);
+
+    /**
+     * 批量删除员工排班
+     *
+     * @param empIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpByEmpIds(Long[] empIds);
+
+    /**
+     * 批量删除员工排班明细
+     *
+     * @param empIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByEmpIds(Long[] empIds);
+
+    /**
+     * 批量新增员工排班明细
+     *
+     * @param twinEmpDetailList 员工排班明细列表
+     * @return 结果
+     */
+    public int batchTwinEmpDetail(List<TwinEmpDetail> twinEmpDetailList);
+
+
+    /**
+     * 通过员工排班主键删除员工排班明细信息
+     *
+     * @param empId 员工排班ID
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByEmpId(Long empId);
+}

+ 60 - 0
jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpCalcService.java

@@ -0,0 +1,60 @@
+package com.jjt.emp.service;
+
+import java.util.List;
+import com.jjt.emp.domain.TwinEmpCalc;
+
+/**
+ * 员工产量统计Service接口
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface ITwinEmpCalcService {
+    /**
+     * 查询员工产量统计
+     *
+     * @param calcId 员工产量统计主键
+     * @return 员工产量统计
+     */
+    public TwinEmpCalc selectTwinEmpCalcByCalcId(Long calcId);
+
+    /**
+     * 查询员工产量统计列表
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 员工产量统计集合
+     */
+    public List<TwinEmpCalc> selectTwinEmpCalcList(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 新增员工产量统计
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    public int insertTwinEmpCalc(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 修改员工产量统计
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    public int updateTwinEmpCalc(TwinEmpCalc twinEmpCalc);
+
+    /**
+     * 批量删除员工产量统计
+     *
+     * @param calcIds 需要删除的员工产量统计主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpCalcByCalcIds(Long[] calcIds);
+
+    /**
+     * 删除员工产量统计信息
+     *
+     * @param calcId 员工产量统计主键
+     * @return 结果
+     */
+    public int deleteTwinEmpCalcByCalcId(Long calcId);
+}

+ 60 - 0
jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpConfigService.java

@@ -0,0 +1,60 @@
+package com.jjt.emp.service;
+
+import java.util.List;
+import com.jjt.emp.domain.TwinEmpConfig;
+
+/**
+ * 密度价格配置Service接口
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface ITwinEmpConfigService {
+    /**
+     * 查询密度价格配置
+     *
+     * @param configId 密度价格配置主键
+     * @return 密度价格配置
+     */
+    public TwinEmpConfig selectTwinEmpConfigByConfigId(Long configId);
+
+    /**
+     * 查询密度价格配置列表
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 密度价格配置集合
+     */
+    public List<TwinEmpConfig> selectTwinEmpConfigList(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 新增密度价格配置
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    public int insertTwinEmpConfig(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 修改密度价格配置
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    public int updateTwinEmpConfig(TwinEmpConfig twinEmpConfig);
+
+    /**
+     * 批量删除密度价格配置
+     *
+     * @param configIds 需要删除的密度价格配置主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpConfigByConfigIds(Long[] configIds);
+
+    /**
+     * 删除密度价格配置信息
+     *
+     * @param configId 密度价格配置主键
+     * @return 结果
+     */
+    public int deleteTwinEmpConfigByConfigId(Long configId);
+}

+ 60 - 0
jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpDetailService.java

@@ -0,0 +1,60 @@
+package com.jjt.emp.service;
+
+import java.util.List;
+import com.jjt.emp.domain.TwinEmpDetail;
+
+/**
+ * 员工排班明细Service接口
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface ITwinEmpDetailService {
+    /**
+     * 查询员工排班明细
+     *
+     * @param detailId 员工排班明细主键
+     * @return 员工排班明细
+     */
+    public TwinEmpDetail selectTwinEmpDetailByDetailId(Long detailId);
+
+    /**
+     * 查询员工排班明细列表
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 员工排班明细集合
+     */
+    public List<TwinEmpDetail> selectTwinEmpDetailList(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 新增员工排班明细
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    public int insertTwinEmpDetail(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 修改员工排班明细
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    public int updateTwinEmpDetail(TwinEmpDetail twinEmpDetail);
+
+    /**
+     * 批量删除员工排班明细
+     *
+     * @param detailIds 需要删除的员工排班明细主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByDetailIds(Long[] detailIds);
+
+    /**
+     * 删除员工排班明细信息
+     *
+     * @param detailId 员工排班明细主键
+     * @return 结果
+     */
+    public int deleteTwinEmpDetailByDetailId(Long detailId);
+}

+ 60 - 0
jjt-biz/src/main/java/com/jjt/emp/service/ITwinEmpService.java

@@ -0,0 +1,60 @@
+package com.jjt.emp.service;
+
+import java.util.List;
+import com.jjt.emp.domain.TwinEmp;
+
+/**
+ * 员工排班Service接口
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+public interface ITwinEmpService {
+    /**
+     * 查询员工排班
+     *
+     * @param empId 员工排班主键
+     * @return 员工排班
+     */
+    public TwinEmp selectTwinEmpByEmpId(Long empId);
+
+    /**
+     * 查询员工排班列表
+     *
+     * @param twinEmp 员工排班
+     * @return 员工排班集合
+     */
+    public List<TwinEmp> selectTwinEmpList(TwinEmp twinEmp);
+
+    /**
+     * 新增员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    public int insertTwinEmp(TwinEmp twinEmp);
+
+    /**
+     * 修改员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    public int updateTwinEmp(TwinEmp twinEmp);
+
+    /**
+     * 批量删除员工排班
+     *
+     * @param empIds 需要删除的员工排班主键集合
+     * @return 结果
+     */
+    public int deleteTwinEmpByEmpIds(Long[] empIds);
+
+    /**
+     * 删除员工排班信息
+     *
+     * @param empId 员工排班主键
+     * @return 结果
+     */
+    public int deleteTwinEmpByEmpId(Long empId);
+}

+ 86 - 0
jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpCalcServiceImpl.java

@@ -0,0 +1,86 @@
+package com.jjt.emp.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.jjt.emp.mapper.TwinEmpCalcMapper;
+import com.jjt.emp.domain.TwinEmpCalc;
+import com.jjt.emp.service.ITwinEmpCalcService;
+import javax.annotation.Resource;
+
+/**
+ * 员工产量统计Service业务层处理
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Service
+public class TwinEmpCalcServiceImpl implements ITwinEmpCalcService {
+    @Resource
+    private TwinEmpCalcMapper twinEmpCalcMapper;
+
+    /**
+     * 查询员工产量统计
+     *
+     * @param calcId 员工产量统计主键
+     * @return 员工产量统计
+     */
+    @Override
+    public TwinEmpCalc selectTwinEmpCalcByCalcId(Long calcId) {
+        return twinEmpCalcMapper.selectTwinEmpCalcByCalcId(calcId);
+    }
+
+    /**
+     * 查询员工产量统计列表
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 员工产量统计
+     */
+    @Override
+    public List<TwinEmpCalc> selectTwinEmpCalcList(TwinEmpCalc twinEmpCalc) {
+        return twinEmpCalcMapper.selectTwinEmpCalcList(twinEmpCalc);
+    }
+
+    /**
+     * 新增员工产量统计
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    @Override
+    public int insertTwinEmpCalc(TwinEmpCalc twinEmpCalc) {
+            return twinEmpCalcMapper.insertTwinEmpCalc(twinEmpCalc);
+    }
+
+    /**
+     * 修改员工产量统计
+     *
+     * @param twinEmpCalc 员工产量统计
+     * @return 结果
+     */
+    @Override
+    public int updateTwinEmpCalc(TwinEmpCalc twinEmpCalc) {
+        return twinEmpCalcMapper.updateTwinEmpCalc(twinEmpCalc);
+    }
+
+    /**
+     * 批量删除员工产量统计
+     *
+     * @param calcIds 需要删除的员工产量统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpCalcByCalcIds(Long[] calcIds) {
+        return twinEmpCalcMapper.deleteTwinEmpCalcByCalcIds(calcIds);
+    }
+
+    /**
+     * 删除员工产量统计信息
+     *
+     * @param calcId 员工产量统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpCalcByCalcId(Long calcId) {
+        return twinEmpCalcMapper.deleteTwinEmpCalcByCalcId(calcId);
+    }
+}

+ 86 - 0
jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpConfigServiceImpl.java

@@ -0,0 +1,86 @@
+package com.jjt.emp.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.jjt.emp.mapper.TwinEmpConfigMapper;
+import com.jjt.emp.domain.TwinEmpConfig;
+import com.jjt.emp.service.ITwinEmpConfigService;
+import javax.annotation.Resource;
+
+/**
+ * 密度价格配置Service业务层处理
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Service
+public class TwinEmpConfigServiceImpl implements ITwinEmpConfigService {
+    @Resource
+    private TwinEmpConfigMapper twinEmpConfigMapper;
+
+    /**
+     * 查询密度价格配置
+     *
+     * @param configId 密度价格配置主键
+     * @return 密度价格配置
+     */
+    @Override
+    public TwinEmpConfig selectTwinEmpConfigByConfigId(Long configId) {
+        return twinEmpConfigMapper.selectTwinEmpConfigByConfigId(configId);
+    }
+
+    /**
+     * 查询密度价格配置列表
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 密度价格配置
+     */
+    @Override
+    public List<TwinEmpConfig> selectTwinEmpConfigList(TwinEmpConfig twinEmpConfig) {
+        return twinEmpConfigMapper.selectTwinEmpConfigList(twinEmpConfig);
+    }
+
+    /**
+     * 新增密度价格配置
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    @Override
+    public int insertTwinEmpConfig(TwinEmpConfig twinEmpConfig) {
+            return twinEmpConfigMapper.insertTwinEmpConfig(twinEmpConfig);
+    }
+
+    /**
+     * 修改密度价格配置
+     *
+     * @param twinEmpConfig 密度价格配置
+     * @return 结果
+     */
+    @Override
+    public int updateTwinEmpConfig(TwinEmpConfig twinEmpConfig) {
+        return twinEmpConfigMapper.updateTwinEmpConfig(twinEmpConfig);
+    }
+
+    /**
+     * 批量删除密度价格配置
+     *
+     * @param configIds 需要删除的密度价格配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpConfigByConfigIds(Long[] configIds) {
+        return twinEmpConfigMapper.deleteTwinEmpConfigByConfigIds(configIds);
+    }
+
+    /**
+     * 删除密度价格配置信息
+     *
+     * @param configId 密度价格配置主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpConfigByConfigId(Long configId) {
+        return twinEmpConfigMapper.deleteTwinEmpConfigByConfigId(configId);
+    }
+}

+ 86 - 0
jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpDetailServiceImpl.java

@@ -0,0 +1,86 @@
+package com.jjt.emp.service.impl;
+
+import java.util.List;
+import org.springframework.stereotype.Service;
+import com.jjt.emp.mapper.TwinEmpDetailMapper;
+import com.jjt.emp.domain.TwinEmpDetail;
+import com.jjt.emp.service.ITwinEmpDetailService;
+import javax.annotation.Resource;
+
+/**
+ * 员工排班明细Service业务层处理
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Service
+public class TwinEmpDetailServiceImpl implements ITwinEmpDetailService {
+    @Resource
+    private TwinEmpDetailMapper twinEmpDetailMapper;
+
+    /**
+     * 查询员工排班明细
+     *
+     * @param detailId 员工排班明细主键
+     * @return 员工排班明细
+     */
+    @Override
+    public TwinEmpDetail selectTwinEmpDetailByDetailId(Long detailId) {
+        return twinEmpDetailMapper.selectTwinEmpDetailByDetailId(detailId);
+    }
+
+    /**
+     * 查询员工排班明细列表
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 员工排班明细
+     */
+    @Override
+    public List<TwinEmpDetail> selectTwinEmpDetailList(TwinEmpDetail twinEmpDetail) {
+        return twinEmpDetailMapper.selectTwinEmpDetailList(twinEmpDetail);
+    }
+
+    /**
+     * 新增员工排班明细
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    @Override
+    public int insertTwinEmpDetail(TwinEmpDetail twinEmpDetail) {
+            return twinEmpDetailMapper.insertTwinEmpDetail(twinEmpDetail);
+    }
+
+    /**
+     * 修改员工排班明细
+     *
+     * @param twinEmpDetail 员工排班明细
+     * @return 结果
+     */
+    @Override
+    public int updateTwinEmpDetail(TwinEmpDetail twinEmpDetail) {
+        return twinEmpDetailMapper.updateTwinEmpDetail(twinEmpDetail);
+    }
+
+    /**
+     * 批量删除员工排班明细
+     *
+     * @param detailIds 需要删除的员工排班明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpDetailByDetailIds(Long[] detailIds) {
+        return twinEmpDetailMapper.deleteTwinEmpDetailByDetailIds(detailIds);
+    }
+
+    /**
+     * 删除员工排班明细信息
+     *
+     * @param detailId 员工排班明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTwinEmpDetailByDetailId(Long detailId) {
+        return twinEmpDetailMapper.deleteTwinEmpDetailByDetailId(detailId);
+    }
+}

+ 134 - 0
jjt-biz/src/main/java/com/jjt/emp/service/impl/TwinEmpServiceImpl.java

@@ -0,0 +1,134 @@
+package com.jjt.emp.service.impl;
+
+import com.jjt.common.utils.StringUtils;
+import com.jjt.emp.domain.TwinEmp;
+import com.jjt.emp.domain.TwinEmpDetail;
+import com.jjt.emp.mapper.TwinEmpMapper;
+import com.jjt.emp.service.ITwinEmpService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 员工排班Service业务层处理
+ *
+ * @author wukai
+ * @date 2025-01-18
+ */
+@Service
+public class TwinEmpServiceImpl implements ITwinEmpService {
+    @Resource
+    private TwinEmpMapper twinEmpMapper;
+
+    /**
+     * 查询员工排班
+     *
+     * @param empId 员工排班主键
+     * @return 员工排班
+     */
+    @Override
+    public TwinEmp selectTwinEmpByEmpId(Long empId) {
+        TwinEmp twinEmp = twinEmpMapper.selectTwinEmpByEmpId(empId);
+        List<TwinEmpDetail> listA = twinEmp.getTwinEmpDetailList().stream().filter(d -> "A".equals(d.getEmpTeam())).collect(Collectors.toList());
+        List<TwinEmpDetail> listB = twinEmp.getTwinEmpDetailList().stream().filter(d -> "B".equals(d.getEmpTeam())).collect(Collectors.toList());
+        twinEmp.setTwinEmpDetailListA(listA);
+        twinEmp.setTwinEmpDetailListB(listB);
+        return twinEmp;
+    }
+
+    /**
+     * 查询员工排班列表
+     *
+     * @param twinEmp 员工排班
+     * @return 员工排班
+     */
+    @Override
+    public List<TwinEmp> selectTwinEmpList(TwinEmp twinEmp) {
+        return twinEmpMapper.selectTwinEmpList(twinEmp);
+    }
+
+    /**
+     * 新增员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int insertTwinEmp(TwinEmp twinEmp) {
+        int rows = twinEmpMapper.insertTwinEmp(twinEmp);
+        insertTwinEmpDetail(twinEmp);
+        return rows;
+    }
+
+    /**
+     * 修改员工排班
+     *
+     * @param twinEmp 员工排班
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int updateTwinEmp(TwinEmp twinEmp) {
+        twinEmpMapper.deleteTwinEmpDetailByEmpId(twinEmp.getEmpId())
+        ;
+        insertTwinEmpDetail(twinEmp);
+        return twinEmpMapper.updateTwinEmp(twinEmp);
+    }
+
+    /**
+     * 批量删除员工排班
+     *
+     * @param empIds 需要删除的员工排班主键
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int deleteTwinEmpByEmpIds(Long[] empIds) {
+        twinEmpMapper.deleteTwinEmpDetailByEmpIds(empIds);
+        return twinEmpMapper.deleteTwinEmpByEmpIds(empIds);
+    }
+
+    /**
+     * 删除员工排班信息
+     *
+     * @param empId 员工排班主键
+     * @return 结果
+     */
+    @Transactional
+    @Override
+    public int deleteTwinEmpByEmpId(Long empId) {
+        twinEmpMapper.deleteTwinEmpDetailByEmpId(empId);
+        return twinEmpMapper.deleteTwinEmpByEmpId(empId);
+    }
+
+    /**
+     * 新增员工排班明细信息
+     *
+     * @param twinEmp 员工排班对象
+     */
+    public void insertTwinEmpDetail(TwinEmp twinEmp) {
+        List<TwinEmpDetail> twinEmpDetailList = new ArrayList<>();
+        twinEmp.getTwinEmpDetailListA().forEach(d -> {
+            twinEmpDetailList.add(d);
+        });
+        twinEmp.getTwinEmpDetailListB().forEach(d -> {
+            twinEmpDetailList.add(d);
+        });
+        Long empId = twinEmp.getEmpId();
+        if (StringUtils.isNotNull(twinEmpDetailList)) {
+            List<TwinEmpDetail> list = new ArrayList<TwinEmpDetail>();
+            for (TwinEmpDetail twinEmpDetail : twinEmpDetailList) {
+                twinEmpDetail.setEmpId(empId);
+                list.add(twinEmpDetail);
+            }
+            if (list.size() > 0) {
+                twinEmpMapper.batchTwinEmpDetail(list);
+            }
+        }
+    }
+}

+ 111 - 0
jjt-biz/src/main/resources/mapper/emp/TwinEmpCalcMapper.xml

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jjt.emp.mapper.TwinEmpCalcMapper">
+    
+    <resultMap type="TwinEmpCalc" id="TwinEmpCalcResult">
+        <result property="calcId"    column="CALC_ID"    />
+        <result property="empName"    column="EMP_NAME"    />
+        <result property="empDate"    column="EMP_DATE"    />
+        <result property="empTeam"    column="EMP_TEAM"    />
+        <result property="deviceId"    column="DEVICE_ID"    />
+        <result property="efficiency"    column="EFFICIENCY"    />
+        <result property="spec"    column="SPEC"    />
+        <result property="mick"    column="MICK"    />
+        <result property="density"    column="DENSITY"    />
+        <result property="length"    column="LENGTH"    />
+        <result property="height"    column="HEIGHT"    />
+        <result property="price"    column="PRICE"    />
+        <result property="totalPrice"    column="TOTAL_PRICE"    />
+    </resultMap>
+
+    <sql id="selectTwinEmpCalcVo">
+        select CALC_ID, EMP_NAME, EMP_DATE, EMP_TEAM, DEVICE_ID, EFFICIENCY, SPEC, MICK, DENSITY, LENGTH, HEIGHT, PRICE, TOTAL_PRICE from TWIN_EMP_CALC
+    </sql>
+
+    <select id="selectTwinEmpCalcList" parameterType="TwinEmpCalc" resultMap="TwinEmpCalcResult">
+        <include refid="selectTwinEmpCalcVo"/>
+        <where>  
+            <if test="empName != null  and empName != ''"> and EMP_NAME like concat('%', #{empName}, '%')</if>
+            <if test="empDate != null "> and EMP_DATE = #{empDate}</if>
+            <if test="empTeam != null  and empTeam != ''"> and EMP_TEAM = #{empTeam}</if>
+            <if test="deviceId != null "> and DEVICE_ID = #{deviceId}</if>
+            <if test="efficiency != null "> and EFFICIENCY = #{efficiency}</if>
+            <if test="spec != null  and spec != ''"> and SPEC = #{spec}</if>
+            <if test="mick != null "> and MICK = #{mick}</if>
+            <if test="density != null "> and DENSITY = #{density}</if>
+            <if test="length != null "> and LENGTH = #{length}</if>
+            <if test="height != null "> and HEIGHT = #{height}</if>
+            <if test="price != null "> and PRICE = #{price}</if>
+            <if test="totalPrice != null "> and TOTAL_PRICE = #{totalPrice}</if>
+        </where>
+    </select>
+    
+    <select id="selectTwinEmpCalcByCalcId" parameterType="Long" resultMap="TwinEmpCalcResult">
+        <include refid="selectTwinEmpCalcVo"/>
+        where CALC_ID = #{calcId}
+    </select>
+
+    <insert id="insertTwinEmpCalc" parameterType="TwinEmpCalc" useGeneratedKeys="true" keyProperty="calcId">
+        insert into TWIN_EMP_CALC
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="empName != null">EMP_NAME,</if>
+            <if test="empDate != null">EMP_DATE,</if>
+            <if test="empTeam != null">EMP_TEAM,</if>
+            <if test="deviceId != null">DEVICE_ID,</if>
+            <if test="efficiency != null">EFFICIENCY,</if>
+            <if test="spec != null">SPEC,</if>
+            <if test="mick != null">MICK,</if>
+            <if test="density != null">DENSITY,</if>
+            <if test="length != null">LENGTH,</if>
+            <if test="height != null">HEIGHT,</if>
+            <if test="price != null">PRICE,</if>
+            <if test="totalPrice != null">TOTAL_PRICE,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="empName != null">#{empName},</if>
+            <if test="empDate != null">#{empDate},</if>
+            <if test="empTeam != null">#{empTeam},</if>
+            <if test="deviceId != null">#{deviceId},</if>
+            <if test="efficiency != null">#{efficiency},</if>
+            <if test="spec != null">#{spec},</if>
+            <if test="mick != null">#{mick},</if>
+            <if test="density != null">#{density},</if>
+            <if test="length != null">#{length},</if>
+            <if test="height != null">#{height},</if>
+            <if test="price != null">#{price},</if>
+            <if test="totalPrice != null">#{totalPrice},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTwinEmpCalc" parameterType="TwinEmpCalc">
+        update TWIN_EMP_CALC
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="empName != null">EMP_NAME = #{empName},</if>
+            <if test="empDate != null">EMP_DATE = #{empDate},</if>
+            <if test="empTeam != null">EMP_TEAM = #{empTeam},</if>
+            <if test="deviceId != null">DEVICE_ID = #{deviceId},</if>
+            <if test="efficiency != null">EFFICIENCY = #{efficiency},</if>
+            <if test="spec != null">SPEC = #{spec},</if>
+            <if test="mick != null">MICK = #{mick},</if>
+            <if test="density != null">DENSITY = #{density},</if>
+            <if test="length != null">LENGTH = #{length},</if>
+            <if test="height != null">HEIGHT = #{height},</if>
+            <if test="price != null">PRICE = #{price},</if>
+            <if test="totalPrice != null">TOTAL_PRICE = #{totalPrice},</if>
+        </trim>
+        where CALC_ID = #{calcId}
+    </update>
+
+    <delete id="deleteTwinEmpCalcByCalcId" parameterType="Long">
+        delete from TWIN_EMP_CALC where CALC_ID = #{calcId}
+    </delete>
+
+    <delete id="deleteTwinEmpCalcByCalcIds" parameterType="String">
+        delete from TWIN_EMP_CALC where CALC_ID in 
+        <foreach item="calcId" collection="array" open="(" separator="," close=")">
+            #{calcId}
+        </foreach>
+    </delete>
+</mapper>

+ 61 - 0
jjt-biz/src/main/resources/mapper/emp/TwinEmpConfigMapper.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jjt.emp.mapper.TwinEmpConfigMapper">
+    
+    <resultMap type="TwinEmpConfig" id="TwinEmpConfigResult">
+        <result property="configId"    column="CONFIG_ID"    />
+        <result property="density"    column="DENSITY"    />
+        <result property="price"    column="PRICE"    />
+    </resultMap>
+
+    <sql id="selectTwinEmpConfigVo">
+        select CONFIG_ID, DENSITY, PRICE from TWIN_EMP_CONFIG
+    </sql>
+
+    <select id="selectTwinEmpConfigList" parameterType="TwinEmpConfig" resultMap="TwinEmpConfigResult">
+        <include refid="selectTwinEmpConfigVo"/>
+        <where>  
+            <if test="density != null "> and DENSITY = #{density}</if>
+            <if test="price != null "> and PRICE = #{price}</if>
+        </where>
+    </select>
+    
+    <select id="selectTwinEmpConfigByConfigId" parameterType="Long" resultMap="TwinEmpConfigResult">
+        <include refid="selectTwinEmpConfigVo"/>
+        where CONFIG_ID = #{configId}
+    </select>
+
+    <insert id="insertTwinEmpConfig" parameterType="TwinEmpConfig" useGeneratedKeys="true" keyProperty="configId">
+        insert into TWIN_EMP_CONFIG
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="density != null">DENSITY,</if>
+            <if test="price != null">PRICE,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="density != null">#{density},</if>
+            <if test="price != null">#{price},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTwinEmpConfig" parameterType="TwinEmpConfig">
+        update TWIN_EMP_CONFIG
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="density != null">DENSITY = #{density},</if>
+            <if test="price != null">PRICE = #{price},</if>
+        </trim>
+        where CONFIG_ID = #{configId}
+    </update>
+
+    <delete id="deleteTwinEmpConfigByConfigId" parameterType="Long">
+        delete from TWIN_EMP_CONFIG where CONFIG_ID = #{configId}
+    </delete>
+
+    <delete id="deleteTwinEmpConfigByConfigIds" parameterType="String">
+        delete from TWIN_EMP_CONFIG where CONFIG_ID in 
+        <foreach item="configId" collection="array" open="(" separator="," close=")">
+            #{configId}
+        </foreach>
+    </delete>
+</mapper>

+ 76 - 0
jjt-biz/src/main/resources/mapper/emp/TwinEmpDetailMapper.xml

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jjt.emp.mapper.TwinEmpDetailMapper">
+    
+    <resultMap type="TwinEmpDetail" id="TwinEmpDetailResult">
+        <result property="detailId"    column="DETAIL_ID"    />
+        <result property="empId"    column="EMP_ID"    />
+        <result property="empName"    column="EMP_NAME"    />
+        <result property="empTeam"    column="EMP_TEAM"    />
+        <result property="devices"    column="DEVICES"    />
+        <result property="remark"    column="REMARK"    />
+    </resultMap>
+
+    <sql id="selectTwinEmpDetailVo">
+        select DETAIL_ID, EMP_ID, EMP_NAME, EMP_TEAM, DEVICES, REMARK from TWIN_EMP_DETAIL
+    </sql>
+
+    <select id="selectTwinEmpDetailList" parameterType="TwinEmpDetail" resultMap="TwinEmpDetailResult">
+        <include refid="selectTwinEmpDetailVo"/>
+        <where>  
+            <if test="empId != null "> and EMP_ID = #{empId}</if>
+            <if test="empName != null  and empName != ''"> and EMP_NAME like concat('%', #{empName}, '%')</if>
+            <if test="empTeam != null  and empTeam != ''"> and EMP_TEAM = #{empTeam}</if>
+            <if test="devices != null  and devices != ''"> and DEVICES = #{devices}</if>
+            <if test="remark != null  and remark != ''"> and REMARK = #{remark}</if>
+        </where>
+    </select>
+    
+    <select id="selectTwinEmpDetailByDetailId" parameterType="Long" resultMap="TwinEmpDetailResult">
+        <include refid="selectTwinEmpDetailVo"/>
+        where DETAIL_ID = #{detailId}
+    </select>
+
+    <insert id="insertTwinEmpDetail" parameterType="TwinEmpDetail" useGeneratedKeys="true" keyProperty="detailId">
+        insert into TWIN_EMP_DETAIL
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="empId != null">EMP_ID,</if>
+            <if test="empName != null">EMP_NAME,</if>
+            <if test="empTeam != null">EMP_TEAM,</if>
+            <if test="devices != null">DEVICES,</if>
+            <if test="remark != null">REMARK,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="empId != null">#{empId},</if>
+            <if test="empName != null">#{empName},</if>
+            <if test="empTeam != null">#{empTeam},</if>
+            <if test="devices != null">#{devices},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTwinEmpDetail" parameterType="TwinEmpDetail">
+        update TWIN_EMP_DETAIL
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="empId != null">EMP_ID = #{empId},</if>
+            <if test="empName != null">EMP_NAME = #{empName},</if>
+            <if test="empTeam != null">EMP_TEAM = #{empTeam},</if>
+            <if test="devices != null">DEVICES = #{devices},</if>
+            <if test="remark != null">REMARK = #{remark},</if>
+        </trim>
+        where DETAIL_ID = #{detailId}
+    </update>
+
+    <delete id="deleteTwinEmpDetailByDetailId" parameterType="Long">
+        delete from TWIN_EMP_DETAIL where DETAIL_ID = #{detailId}
+    </delete>
+
+    <delete id="deleteTwinEmpDetailByDetailIds" parameterType="String">
+        delete from TWIN_EMP_DETAIL where DETAIL_ID in 
+        <foreach item="detailId" collection="array" open="(" separator="," close=")">
+            #{detailId}
+        </foreach>
+    </delete>
+</mapper>

+ 94 - 0
jjt-biz/src/main/resources/mapper/emp/TwinEmpMapper.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jjt.emp.mapper.TwinEmpMapper">
+
+    <resultMap type="TwinEmp" id="TwinEmpResult">
+        <result property="empId"    column="EMP_ID"    />
+        <result property="empDate"    column="EMP_DATE"    />
+    </resultMap>
+
+    <resultMap id="TwinEmpTwinEmpDetailResult" type="TwinEmp" extends="TwinEmpResult">
+        <collection property="twinEmpDetailList" ofType="TwinEmpDetail" column="EMP_ID" select="selectTwinEmpDetailList" />
+    </resultMap>
+
+    <resultMap type="TwinEmpDetail" id="TwinEmpDetailResult">
+        <result property="detailId"    column="DETAIL_ID"    />
+        <result property="empId"    column="EMP_ID"    />
+        <result property="empName"    column="EMP_NAME"    />
+        <result property="empTeam"    column="EMP_TEAM"    />
+        <result property="devices"    column="DEVICES"    />
+        <result property="remark"    column="REMARK"    />
+    </resultMap>
+
+    <sql id="selectTwinEmpVo">
+        select EMP_ID, EMP_DATE from TWIN_EMP
+    </sql>
+
+    <select id="selectTwinEmpList" parameterType="TwinEmp" resultMap="TwinEmpResult">
+        <include refid="selectTwinEmpVo"/>
+        <where>
+            <if test="empDate != null "> and EMP_DATE = #{empDate}</if>
+        </where>
+    </select>
+
+    <select id="selectTwinEmpByEmpId" parameterType="Long" resultMap="TwinEmpTwinEmpDetailResult">
+        select EMP_ID, EMP_DATE
+        from TWIN_EMP
+        where EMP_ID = #{empId}
+    </select>
+
+    <select id="selectTwinEmpDetailList" resultMap="TwinEmpDetailResult">
+        select DETAIL_ID, EMP_ID, EMP_NAME, EMP_TEAM, DEVICES, REMARK
+        from TWIN_EMP_DETAIL
+        where EMP_ID = #{EMP_ID}
+    </select>
+
+    <insert id="insertTwinEmp" parameterType="TwinEmp" useGeneratedKeys="true" keyProperty="empId">
+        insert into TWIN_EMP
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="empDate != null">EMP_DATE,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="empDate != null">#{empDate},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTwinEmp" parameterType="TwinEmp">
+        update TWIN_EMP
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="empDate != null">EMP_DATE = #{empDate},</if>
+        </trim>
+        where EMP_ID = #{empId}
+    </update>
+
+    <delete id="deleteTwinEmpByEmpId" parameterType="Long">
+        delete from TWIN_EMP where EMP_ID = #{empId}
+    </delete>
+
+    <delete id="deleteTwinEmpByEmpIds" parameterType="String">
+        delete from TWIN_EMP where EMP_ID in
+        <foreach item="empId" collection="array" open="(" separator="," close=")">
+            #{empId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteTwinEmpDetailByEmpIds" parameterType="String">
+        delete from TWIN_EMP_DETAIL where EMP_ID in
+        <foreach item="empId" collection="array" open="(" separator="," close=")">
+            #{empId}
+        </foreach>
+    </delete>
+
+    <delete id="deleteTwinEmpDetailByEmpId" parameterType="Long">
+        delete from TWIN_EMP_DETAIL where EMP_ID = #{empId}
+    </delete>
+
+    <insert id="batchTwinEmpDetail">
+        insert into TWIN_EMP_DETAIL(EMP_ID, EMP_NAME, EMP_TEAM, DEVICES, REMARK) values
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.empId}, #{item.empName}, #{item.empTeam}, #{item.devices}, #{item.remark})
+        </foreach>
+    </insert>
+</mapper>

+ 4 - 0
jjt-common/src/main/java/com/jjt/common/utils/DateUtils.java

@@ -67,6 +67,10 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return new SimpleDateFormat(format).format(date);
     }
 
+    public static final String parseDateToStr(final Date date) {
+        return new SimpleDateFormat(YYYY_MM_DD).format(date);
+    }
+
     public static final Date dateTime(final String format, final String ts) {
         try {
             return new SimpleDateFormat(format).parse(ts);