diff --git a/op-modules/op-plan/src/main/java/com/op/plan/controller/BaseProductController.java b/op-modules/op-plan/src/main/java/com/op/plan/controller/BaseProductController.java index 828d6ffc9..1cd26b229 100644 --- a/op-modules/op-plan/src/main/java/com/op/plan/controller/BaseProductController.java +++ b/op-modules/op-plan/src/main/java/com/op/plan/controller/BaseProductController.java @@ -4,7 +4,7 @@ import com.op.common.core.web.controller.BaseController; import com.op.common.core.web.page.TableDataInfo; import com.op.common.security.annotation.RequiresPermissions; import com.op.plan.domain.BaseProduct; -import com.op.plan.service.IBaseProductService; +import com.op.plan.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/op-modules/op-plan/src/main/java/com/op/plan/controller/ProMedicationController.java b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProMedicationController.java new file mode 100644 index 000000000..12bd66398 --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/controller/ProMedicationController.java @@ -0,0 +1,75 @@ +package com.op.plan.controller; + +import com.op.common.core.domain.R; +import com.op.common.core.web.controller.BaseController; +import com.op.common.core.web.domain.AjaxResult; +import com.op.common.core.web.page.TableDataInfo; +import com.op.common.security.utils.SecurityUtils; +import com.op.plan.domain.MedicationDetailPo; +import com.op.plan.domain.MedicationPo; +import com.op.plan.domain.MedicationQuery; +import com.op.plan.service.IProMedicationService; +import com.op.system.api.model.SapProOrder; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * remark + * + * @author 019117 + * @date + */ +@RestController +@RequestMapping("/medication") +@RequiredArgsConstructor +public class ProMedicationController extends BaseController { + + private final IProMedicationService proMedicationService; + + + //同步药液订单 + @PostMapping("/syncOrder") + public AjaxResult syncMedicationOrder(@RequestBody MedicationQuery query){ + proMedicationService.syncMedicationOrder(query); + return success(); + } + + //修改药液订单 + @PutMapping + public AjaxResult updateMedication(@RequestBody MedicationPo params){ + params.setUpdateBy(SecurityUtils.getUsername()); + proMedicationService.updateMedication(params); + return success(); + } + + + @GetMapping("/list") + public TableDataInfo selectMedicationList(MedicationQuery query){ + startPage(); + List list = proMedicationService.selectMedicationList(query); + return getDataTable(list); + } + + @GetMapping("/detail/list") + public AjaxResult selectMedicationDetailList(MedicationQuery query){ + List list = proMedicationService.selectMedicationDetailList(query); + return AjaxResult.success(list); + } + + @PutMapping("/detail/list") + public AjaxResult updateMedicationDetailList(@RequestBody List list){ + proMedicationService.updateMedicationDetailList(list); + return AjaxResult.success(); + } + + + @PostMapping("/reportSapMedication") + public AjaxResult reportSapMedication(@RequestBody List params){ + proMedicationService.reportSapMedication(params); + return AjaxResult.success(); + } + + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationDetailPo.java b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationDetailPo.java new file mode 100644 index 000000000..8ad36c264 --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationDetailPo.java @@ -0,0 +1,41 @@ +package com.op.plan.domain; + +import com.op.common.core.web.domain.BaseEntity; +import lombok.Data; + +/** + * remark + * + * @author 019117 + * @date + */ +@Data +public class MedicationDetailPo extends BaseEntity { + + private String id; + + private String orderCode; + + private String itemCode; + + private String materialCode; + + private String materialName; + + private String factory; + + private String location; + + private String productionDate; + + private String amount; + + private String inputAmount; + + private String unit; + + private String backFlag; + + + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationPo.java b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationPo.java new file mode 100644 index 000000000..20c10e994 --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationPo.java @@ -0,0 +1,51 @@ +package com.op.plan.domain; + +import com.op.common.core.web.domain.BaseEntity; +import lombok.Data; + +import java.util.Date; + +/** + * remark + * + * @author 019117 + * @date + */ +@Data +public class MedicationPo extends BaseEntity { + + private Integer id; + + private String orderCode; + + private String workOrderCode; + + private String materialCode; + + private String materialName; + + private String amount; + + private String reportAmount; + + private String unit; + + private String status; + + private String productionDate; + + private String factory; + + private Date sapTime; + + private String sapRemark; + + private String realAmount; + + private String workTime; + + private String useNum; + + + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationQuery.java b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationQuery.java new file mode 100644 index 000000000..0f7f81e0e --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/domain/MedicationQuery.java @@ -0,0 +1,40 @@ +package com.op.plan.domain; + +import lombok.Data; + +import java.util.Date; + +/** + * remark + * + * @author 019117 + * @date + */ +@Data +public class MedicationQuery { + + + //订单号 + private String workOrderCode; + + private String orderCode; + + //开始时间 + private String startTime; + + //结束时间 + private String endTime; + + //生产日期 + private String proDate; + + //物料编码 + private String materialCode; + + //工厂 + private String factory; + + + + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationDetailMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationDetailMapper.java new file mode 100644 index 000000000..b4370b358 --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationDetailMapper.java @@ -0,0 +1,23 @@ +package com.op.plan.mapper; + +import com.op.plan.domain.MedicationDetailPo; +import com.op.plan.domain.MedicationQuery; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * remark + * + * @author 019117 + * @date + */ +public interface ProMedicationDetailMapper { + + void batchInsertMedicationDetail(List po); + + List selectMedicationDetailList(MedicationQuery query); + + void batchUpdateMedicationDetail( @Param("list") List list, @Param("updateBy") String updateBy); + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationMapper.java b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationMapper.java new file mode 100644 index 000000000..2d2c9eeeb --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/mapper/ProMedicationMapper.java @@ -0,0 +1,22 @@ +package com.op.plan.mapper; + +import com.op.plan.domain.MedicationPo; +import com.op.plan.domain.MedicationQuery; + +import java.util.List; + +/** + * remark + * + * @author 019117 + * @date + */ +public interface ProMedicationMapper { + + void insertMedication(MedicationPo po); + + void updateMedication(MedicationPo po); + + List selectMedicationList(MedicationQuery po); + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/IProMedicationService.java b/op-modules/op-plan/src/main/java/com/op/plan/service/IProMedicationService.java new file mode 100644 index 000000000..9fb1b71a0 --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/IProMedicationService.java @@ -0,0 +1,30 @@ +package com.op.plan.service; + +import com.op.plan.domain.MedicationDetailPo; +import com.op.plan.domain.MedicationPo; +import com.op.plan.domain.MedicationQuery; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * remark + * + * @author 019117 + * @date + */ +public interface IProMedicationService { + + void syncMedicationOrder(MedicationQuery query); + + void updateMedication(MedicationPo params); + + List selectMedicationList(MedicationQuery query); + + List selectMedicationDetailList(MedicationQuery query); + + void updateMedicationDetailList(List list); + + void reportSapMedication(List params); + +} diff --git a/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProMedicationServiceImpl.java b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProMedicationServiceImpl.java new file mode 100644 index 000000000..d7b12e21b --- /dev/null +++ b/op-modules/op-plan/src/main/java/com/op/plan/service/impl/ProMedicationServiceImpl.java @@ -0,0 +1,198 @@ +package com.op.plan.service.impl; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.op.common.core.domain.R; +import com.op.common.core.utils.DateUtils; +import com.op.common.security.utils.SecurityUtils; +import com.op.plan.domain.MedicationDetailPo; +import com.op.plan.domain.MedicationPo; +import com.op.plan.domain.MedicationQuery; +import com.op.plan.mapper.ProMedicationDetailMapper; +import com.op.plan.mapper.ProMedicationMapper; +import com.op.plan.service.IProMedicationService; +import com.op.system.api.RemoteSapService; +import com.op.system.api.domain.sap.SapMaterialPreparation; +import com.op.system.api.domain.sap.SapRFW; +import com.op.system.api.domain.sap.SapShopOrderQuery; +import com.op.system.api.model.SapProOrder; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * remark + * + * @author 019117 + * @date + */ +@Service +@RequiredArgsConstructor +public class ProMedicationServiceImpl implements IProMedicationService { + + private final RemoteSapService remoteSapService; + + private final ProMedicationMapper proMedicationMapper; + + private final ProMedicationDetailMapper proMedicationDetailMapper; + + @Override + @DS("#header.poolName") + public void syncMedicationOrder(MedicationQuery query) { + SapShopOrderQuery syncQuery = new SapShopOrderQuery(); + Map dataParams = new HashMap<>(); + dataParams.put("planDateStart", query.getStartTime()); + dataParams.put("planDateEnd", query.getEndTime()); + syncQuery.setParams(dataParams); + syncQuery.setWerk(query.getFactory()); + R> result = remoteSapService.shopOrderSync(syncQuery); + + List orderList = result.getData(); + + for (SapProOrder order : orderList) { + //只取药液订单,类型为LJ01,编号是208和209开头 + if ("LJ01".equals(order.getOrderType()) && ( order.getProdCode().startsWith("0000000208") || order.getProdCode().startsWith("0000000209") ) ){ + MedicationPo po = new MedicationPo(); + String proDate = DateUtils.parseDateToStr("yyyy-MM-dd",order.getPlanProDate()); + po.setOrderCode(order.getOrderCode()); + po.setWorkOrderCode(order.getWorkerOrder()); + po.setOrderCode(order.getOrderCode()); + po.setMaterialCode(order.getProdCode()); + po.setMaterialName(order.getProdDesc()); + po.setAmount(order.getQuantity().toString()); + po.setUnit(order.getUnit()); + po.setStatus("0"); + po.setProductionDate(proDate); + po.setFactory(order.getPlanFactoryCode()); + + //判断是否已经存在订单 (订单+物料+时间) + MedicationQuery medicationQuery = new MedicationQuery(); + medicationQuery.setMaterialCode(order.getProdCode()); + medicationQuery.setWorkOrderCode(order.getWorkerOrder()); + medicationQuery.setOrderCode(order.getOrderCode()); + medicationQuery.setProDate(proDate); + List selectPo = proMedicationMapper.selectMedicationList(medicationQuery); + + if (selectPo.isEmpty()){ + po.setCreateBy(SecurityUtils.getUsername()); + proMedicationMapper.insertMedication(po); + + //获取药液配方 + List detailList = getMedicationDetailPoList(order.getOrderCode()); + proMedicationDetailMapper.batchInsertMedicationDetail(detailList); + + } + + } + } + + } + + + + + private List getMedicationDetailPoList(String orderCode){ + List detailList = new ArrayList<>(); + List detailResult = remoteSapService.materialPreparation(orderCode).getData(); + if (!detailResult.isEmpty()) { + for (SapMaterialPreparation detail : detailResult){ + MedicationDetailPo detailPo = new MedicationDetailPo(); + detailPo.setOrderCode(detail.getAUFNR()); + detailPo.setItemCode(detail.getRSPOS()); + detailPo.setMaterialCode(detail.getMATNR()); + detailPo.setMaterialName(detail.getMAKTX()); + detailPo.setFactory(detail.getWERKS()); + detailPo.setLocation(detail.getLGORT()); + detailPo.setProductionDate(detail.getBDTER()); + detailPo.setAmount(detail.getBDMNG()); + detailPo.setUnit(detail.getMEINS()); + detailPo.setInputAmount(detail.getERFMG()); + detailPo.setBackFlag(detail.getRGEKZ()); + detailList.add(detailPo); + } + } + + return detailList; + } + + @Override + @DS("#header.poolName") + public void updateMedication(MedicationPo params) { + proMedicationMapper.updateMedication(params); + } + + + @Override + @DS("#header.poolName") + public List selectMedicationList(MedicationQuery query) { + return proMedicationMapper.selectMedicationList(query); + } + + @Override + @DS("#header.poolName") + public List selectMedicationDetailList(MedicationQuery query) { + return proMedicationDetailMapper.selectMedicationDetailList(query); + } + + @Override + @DS("#header.poolName") + public void updateMedicationDetailList(List list) { + proMedicationDetailMapper.batchUpdateMedicationDetail(list,SecurityUtils.getUsername()); + } + + @Override + @DS("#header.poolName") + public void reportSapMedication(List params) { + + for (MedicationPo po : params) { + //获取损耗物料 + MedicationQuery query = new MedicationQuery(); + query.setOrderCode(po.getOrderCode()); + List detailList = proMedicationDetailMapper.selectMedicationDetailList(query); + + if (detailList.isEmpty()){ + throw new RuntimeException("订单"+po.getOrderCode()+"的损耗物料为空!"); + } + + SapRFW sap = new SapRFW(); + sap.setAufnr(po.getOrderCode()); + sap.setGamng(po.getReportAmount()); + sap.setAnzma("111.00"); + sap.setBudat(DateUtils.parseDateToStr("yyyyMMdd", new Date())); + double allTime = Double.parseDouble(po.getWorkTime()) * Double.parseDouble(po.getUseNum()); + SapRFW.lt_gs lts = new SapRFW.lt_gs(); + lts.setConf_activity1(po.getWorkTime()); + lts.setConf_activity2(Double.toString(allTime)); + lts.setConf_activity3(po.getWorkTime()); + lts.setConf_activity4(Double.toString(allTime)); + + sap.setLt_gs(lts); + + List hwList = new ArrayList<>(); + for (MedicationDetailPo detailPo : detailList) { + SapRFW.lt_hw lt_hw = new SapRFW.lt_hw(); + lt_hw.setMaterial(detailPo.getMaterialCode()); + lt_hw.setRspos(detailPo.getItemCode()); + lt_hw.setEntry_qnt(detailPo.getInputAmount()); + } + sap.setLt_hwList(hwList); + + R r = remoteSapService.sapRFWOrder(sap); + if (r.getCode() == 200) { + po.setStatus("1"); + }else { + po.setStatus("2"); + } + po.setSapTime(new Date()); + po.setSapRemark(r.getMsg()); + po.setRealAmount(po.getReportAmount()); + po.setUpdateBy(SecurityUtils.getUsername()); + proMedicationMapper.updateMedication(po); + } + + + } + + +} diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationDetailMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationDetailMapper.xml new file mode 100644 index 000000000..c9eb63d97 --- /dev/null +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationDetailMapper.xml @@ -0,0 +1,53 @@ + + + + + + insert into pro_medication_order_detail (order_code, item_code, material_code, material_name, factory, location, production_date, amount, input_amount, unit, back_flag, create_by, create_time) + values + + (#{item.orderCode}, #{item.itemCode}, #{item.materialCode}, #{item.materialName}, + #{item.factory}, #{item.location}, #{item.productionDate}, #{item.amount}, #{item.inputAmount}, + #{item.unit}, #{item.backFlag}, #{item.createBy}, GETDATE()) + + + + + + + + + update pro_medication_order_detail + + input_amount = #{item.inputAmount}, + update_by = #{updateBy}, + update_time = GETDATE() + + where id = #{item.id} + + + + + \ No newline at end of file diff --git a/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationMapper.xml b/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationMapper.xml new file mode 100644 index 000000000..6b40057a5 --- /dev/null +++ b/op-modules/op-plan/src/main/resources/mapper/plan/ProMedicationMapper.xml @@ -0,0 +1,87 @@ + + + + + + INSERT INTO pro_medication_order + (work_order_code , order_code, factory, material_code , material_name , amount , report_amount , unit , status , production_date , create_by , create_time) + VALUES + (#{workOrderCode}, #{orderCode}, #{factory}, #{materialCode}, #{materialName}, #{amount}, #{reportAmount}, #{unit}, #{status}, #{productionDate}, #{createBy}, GETDATE()) + + + + UPDATE pro_medication_order + SET + + amount = #{amount}, + + + report_amount = #{reportAmount}, + + + status = #{status}, + + + sap_time = #{sapTime}, + + + sap_remark = #{sapRemark}, + + + real_amount = #{realAmount}, + + + work_time = #{workTime}, + + + use_num = #{useNum}, + + + update_by = #{updateBy}, + + update_time = GETDATE() + WHERE id = #{id} + + + + + + + + \ No newline at end of file